2022年4月28日木曜日

FM77AVにUSBキーボードを接続する試み(その5 完成に近づく)

 

ようやく完成に近づいたようで、使い勝手がかなり良くなりました。

前回の「その4」で一応完成と書きましたが、残っていた2つの不具合のうちの「Shiftキーを押すとシフトモードに入ったままになってしまう」については、結構使いにくいので、解消を試みました。


ハードは前回と同じです

前回はPIC24FJ64GB002側のUSB関係のプログラム中の app_host_hid_keyboard.c を手直ししただけだったのですが、それだけでは上記の不具合を解消できなかったので、ATmega88側のプログラムも手直しすることになりました。

まず、PIC24FJ64GB002側は今回も関数 App_ProcessInputReport(void) の手直しですが、修正点は4つの修飾キー(Ctrl, Shift, Alt, Winキー)に対応するようにしたことと、その修飾キーの出力タイミングを変えたことです。それを以下に示します。


   

 

次に、ATmega88側のプログラムですが、以前のものは元にしたPS/2用変換器のものを最小限の手直しだけで使用していましたが、それを見直しました。手直ししたのはmain.c 中の関数 outserialdata(unsigned cha kcode) だけですが、修飾キーの取り扱い方とその出力タイミングを変更しています。それを以下に示します。


 
 

以上のように修飾キー(Ctrl, Shift, Alt, Winキー)の出力タイミングを変更することでシフトキーの問題は解消できました。
また、もう一つの不具合ですが、実際に使用してみると6キーロールオーバーのはずが4キーロールオーバーになっているという件は実用上は特に問題にはならないようです。


残っている課題はひとつ


ということで、残る課題はキーリピートが有効ではないということだけということになりそうです。
実用上はキーリピートはぜひ実現したい機能なのですが、上記の App_ProcessInputReport(void) のリストを見ていただくと分かりますように、元にしたMicrochipのサンプルプログラムがキー入力の変更があった場合にそのキーを出力する、つまり、キー入力の変更がなければ出力されないという仕様になっているので、このサンプルプログラムを元にする限りキーリピート機能は実現できないように思えます。
どうしたものかと思案中です。。。

【蛇足】
最近はプログラムの書き込みツールとしてもっぱらPICkit4を使っているのですが、これは以前使用していたPickit3とは異なり、Atmelのチップにも対応しているので、今回のような場合にはとても便利です。
画像で分かりますように、PICとATmegaの両方に書き込みピンを用意してあるので、6ピンケーブルを差し替えるだけで両方の書き込みに対応できます。(PICkit4の8ピン出力のうちの6ピンのみを使用しているので、PICとATmegaとで6ピンケーブルを1ピン分ずらすことと、ひっくり返して装着する必要がありますが。)
さらに、ATmegaの書き込み時には基板からの電源供給にすれば、書き込み後の動作時にもPICkit4を外さなくても動作に支障がありません。(何故かPICの書き込み時には電源をPICkit4からの供給にして、FM77AVの電源を切る必要があるのが残念ですが...)
今まではPICはPickit3で、AtmelはTL866ⅡPLUSを使用していましたが、かなりの場合にPICkit4だけで間に合いそうです。

2022年4月10日日曜日

レトロエクスプレス6号のお知らせ

4月29日にレトロPCのイベント「レトロエクスプレス6号」が開催されます。

はせりんさまから声をかけていただきまして、レトロPCイベント「レトロエクスプレス6号」に、今まで製作してきましたFM-7/77関係の製作物をいくつか展示させていただくことになりましたので、ここでイベントの紹介をさせていただきます。

イベント名称:レトロエクスプレス6号
日時:2022年4月29日11:00~17:00
場所:東京都大田区産業プラザPiO小展示ホール(京急蒲田駅から歩道橋で直結です)

詳しくはこちらをご覧ください。

私の製作物は下記のFM-7/FM77AV関係のブースの一部に置かせていただきます。


展示ブースの紹介

会場に足を運んでいただき、上記のブースにも訪れていただけましたら幸いです。

なお、参加されるサークルの一覧はこちらで見ることができます。

よろしくお願いいたします。


2022年4月5日火曜日

FM77AVにUSBキーボードを接続する試み(その4 一応完成)

一応、 実用になるレベルに出来あがったようです

昨年末に「その3」を報告して以来、その間、手直しをしなければと思いつつそのままになっていたのですが、ようやく見直すことができました。

手直しが必要だった点は、Shiftキーを押した後にいくつかキーを押すとそのShiftキーの効果が無くなったりすることがあったことと、USBキーボードは仕様上6キーロールオーバーが可能なのですが、それが実現できていなかったことです。

もう一度プログラムを見直した結果、AppProcessInputReport(void)関数をほんの少しだけ書き換えることで上記の2点を解決することができました。

出来上がったものを下図に示します。

前回報告した基板にRJ-9のコネクタを追加しました。USBホスト機能を持つPIC24FJ64GB002でUSBキーボードからのキーコードを処理したものをATmega88Aに送って、77AV用のキーコードに変換しています。

PICのみで全ての処理をさせるのが理想ですが、なかなかうまく動作させることができないのでこのような構成になっています。


手配線です


ケースに入れてみました。
ケースはタカチの75x50x30mmのものです。


ケースに収めた状態


77AVとの接続には電話機の受話器用のカールケーブルを使っています。


キーボードと77AVに接続

回路は前回示したものとほとんど同じです。


RJ-9コネクタを追加しています

プログラムの変更部分を示します。変更したのはこの関数のみです。

 
 

最後に

現在分かっている不具合は次の2つです。
Shiftキーを一旦押すとシフトモードに入ったままになってしまう。(解除するにはNumLockキーを押します。)
USBキーボードの仕様では6キーロールオーバーのはずですが、何故か4キーまでになっている。
以上の点を承知して使えば特に問題はないので、これで使い続けていこうと思っています。

2022年4月2日土曜日

FT245高速通信カードの改造の試み

 秋月電子のFT245モジュールでなくFT245RLチップを使ってみました

一時期ですが秋月電子でFT245モジュールが欠品だったこともあり、また、モジュールを使わなければもっとコンパクトになるのではないかと思って、モジュールではなくチップを使ったカードを試作してみました。

モジュールをチップに置き換えるだけならわざわざ基板を起こす必要はないのですが、

(1)今までDIPのICのみを使用してきたが、表面実装部品を使ってみたい。

(2)PCとの接続ケーブルでmini-USBコネクタではなくmicro-USBコネクタを使いたい。

(3)回路を変更する実験をしてみたい。

のような意図もありました。

(1)ですが、最近はDIPのICよりも表面実装部品を使う方が作りやすい傾向もありますので、ここらで表面実装部品に慣れておきたいということです。

(2)ですが、最近はmicro-USBコネクタの方が普通になっているように感じています。

(3)ですが、FM-7からWindowsPCへの通信時に、WindowsPCの準備ができていない時でもFM-7がデータを送り出してしまうので、これを何とかしたいという事でFT245RLのTXEをフラグとしてチェックする形式に変更することを考えました。


表面実装部品を使うのは初めてなのでネットで情報を集めてみると、アマチュア的にはヒートガンかホットプレートを使用するのが普通のようですが、先日、基板から部品を外すためにPOT-21Cという小型ハンダ槽を購入したので、これを使えばホットプレートの代わりになるのではないかと考えて試してみることにしました。

これが入手した小型ハンダ槽です。温度は500℃まで上げることができます。小さな部品はもちろん、40Pコネクタ程度の大きさのものなら、数秒であっさりと基板から外すことができます。


小型ハンダ槽
ハンダ


このハンダ槽の上に5mm厚のアルミ板を載せて、ホットプレートの代わりにするというわけです。まずは左下のmini-USBコネクタと小さなフェライトインダクタ(FB)をクリームハンダを使用してハンダ付けができるかどうかを試してみました。
温度を400℃に設定し、クリームハンダを塗った上に部品を載せた基板を置いてみました。
結果ですが、1608サイズのFBは綺麗にハンダ付けされていました。しかし、USBコネクタはFBよりも熱容量が大きいせいか仕上がりが不十分だったので、後で半田ごてで補修しました。




次にメインであるFT245RLのハンダ付けに挑戦しました。温度を350℃に下げて、クリームハンダを塗ってICを載せて置いてみました。
結果ですが、うまくハンダ付けはできませんでした。350℃に下げたのが原因だったようですが、400℃に上げる勇気はなかったので普通にはんだごてですることにしました。
ホットプレートを使用する場合は蓋をするので、カップのようなものをかぶせるとうまく行くのではないかと思っています。次回挑戦する際には蓋を用意してやってみます。



FT245RLをハンダ付け


できあがったのが下の基板です。
追加のリード線が見苦しいですが、これは何とFT245RLのGNDを結線し忘れていたためです...(相変わらずドジばかり...)


完成した基板

とりあえず、ICの細い足に何とかリード線をハンダ付けして動作させることができました。
(SSOPですので0.65mm間隔の足にハンダ付けするのは大変でした...)

以上は元のFT245モジュールを使用した回路をそのままFT245RLに置き換えただけなので、ポリヒューズなどの余計な部品が載っていますが、電源をFM-7から取るようにすれば部品をいくつか省略できます。

次に回路の変更ですが、74LS244の15ピンに接続されているFT_DB6をカットして、代わりにFT245RLの22ピンのTXEを接続するだけです。
つまり、データのbit7がRXFであるのに加えてbit6をTXEにして、ソフトで読めるようにするわけです。

実は、もう既に既存のカードを改造し、それに対応してソフトも変更してありました。そのカードが下の画像のものです。LS244の15ピンを抜いてTXEに接続してあります。


DB6をTXEに変更したカード


ソフトの変更ですが、FM-7が受信する場合にはbit7(RXF)をチェックしてLowになったらデータを受信しているのと同様に、送信する場合にはbit6(TXE)をチェックしてLowになったらデータを送信するように変更することになります。

改造の結果

(1)表面実装部品を使ったおかげで、基板にかなり余裕ができましたので、上手く設計すれば他の回路も同居させることもできそうです。
(2)USBコネクタもmini-USBとmicro-USBの両方を搭載しても余裕です。
(3)FM-7からの送信時にもフラグをチェックするように変更してみたわけですが、実際にはそれ程のメリットは感じられませんでした。むしろ、何かの原因で通信経路の不調が生じた場合にハングアップ状態になってしまうのはデメリットかもしれません。


ということで、次回製作予定のプリント基板は下図のように切り替えスイッチを付けてどちらのモードでも使えるようにしようと思っています。


次回製作予定の基板


今回、初めて表面実装部品を使用してみましたが、フェライトビーズは問題なくハンダ付けができたので、同様な形であるRやCなどもこのような方法でできそうです。あとはもう少し試行錯誤しながらICなどの部品もハンダ付けできるような条件を見出したいと思います。