ようやく完成に近づいたようで、使い勝手がかなり良くなりました。
前回の「その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だけで間に合いそうです。
0 件のコメント:
コメントを投稿