それではUSBキーボードの製作に取り掛かります。DigisparkからはPC-E200のエミュレータで利用しているキーコードを出力するようにします。エミュレータはこちらのSHARP PC-G850/G815/E200エミュレータ g800です。キーの割り当て(主に特殊なキー)はエミュレータに含まれているg800configというファイルに記述されているので、これを元に出力するキーコードを決めていきます。
押されたキーがアルファベットや数字などの普通のキーのときは、PIC16F874AからDigisparkへOADGのUSBキーボードのコードを送りDigisparkはそのままUSB出力するようにします。ただし、Digisparkのキーボードライブラリは英語キーボードになっているので、g800configのキーボード設定も英語キーボードにします。
関数キーなどの特殊なキーはg800エミュレータでCtrl+アルファベット(または記号)に設定されているので、PICからDigisparkへはアルファベットのキーコードの最上位ビットを1に(つまり0x80を足す)したコードを出力することにしました。Digisparkはこれを受けたらCtrl+アルファベットのコードに変換してUSBに出力するようにします。
PICからDigisparkへのキーコードの受け渡し方法ですが、PICは押されたキーを随時Digisparkに送り出し、Digisparkは割り込みでキーコードを受け取りUSBに出力するという方法と、PICは押されたキーを取りこぼさないようにバッファにキーコードをためておき、Digisparkからの割り込み要求があったらバッファからコードを送る方法の2通りを試してみました。
前者の場合、Digisparkの負荷が高く場合によってはPICの処理に追いつかなくなるのではと思っていたのですが、全くそんなことはなく転送タイミングをできるだけ速くしてみたところ、普通にキーボードとして使える程度のレスポンスを得ることが出来ました。
後者の場合でもキーボードとして普通に使える程度のレスポンスは得られたのですが、PIC側のバッファの処理が余分にあるので、タイミングによってキー入力のもたつきが発生することがありました。そこで今回は前者の方式を採用しました。
ただ、キーコードの転送負荷を下げるためにキーのBreak(リリース)コードは出力していなく、キーのリピートや同時押しには対応していません。そのためSHIFTキーは機能しないので代わりに2ndFキー(SHIFTキーのオン・オフが押すたびに切り替わる)のコードを出力するようになっています。
一応、何かの参考くらいにはなると思うのでPICのプログラムとDigisparkのスケッチを載せておきます。
newmain.c
E200Keyboard.ino
キーボードとして動くものが完成したので、さっそくエミュレータでテストします。開発環境であるUbuntuで事前にコンパイルしてあったg800を起動してみたところ、かなりキー入力を取りこぼしてしまい全く使い物になりませんでした。
ターミナルエミュレータやテキストエディタなどでキー入力を行ったときは普通にキーボードとして使うことが出来たのに、とても残念な結果です。
プログラムを見直したり、ウェイトを調整してみたりもしたのですが結果は一緒でした。
でもまだ諦めません。
次は、Windows10の環境でg800を起動してテストしてみました。するとどうでしょう、普通にキー入力が行えてしまいました。特にもたつくような感じは受けませんでした。
液晶画面はPC上にありますが、懐かしいポケコンを操作している感覚になります。しばらくキー入力をしていると、たまに入力を取りこぼすこともありましたが、それがPICやDigisparkの問題なのか、ゴム製のキーをしっかり押し込んでいなかったのか判別出来ませんでした。実機でもキーをしっかり押さないと入力されないことがあったので、妙にリアルな感じがしていいかも。
関数電卓として使えるのも魅力です。特殊な関数キーをワンキーで押せるので、エミュレータを起動しておけば必要なときにすぐに電卓として使えます。
また、カナ文字をローマ字入力できるのも懐かしい感じです。
一通りキー入力をチェックしてみるとSHIFTとの組み合わせで一部のキーが入力出来ませんでした。よく調べていませんが、それほど利用しないキーなので使う必要があったときに個別に対応することにします。
ゲームプログラムなども実行してみました。キーリピートに対応していないので、アクションゲームはちゃんと操作できませんでした。でもg800ではジョイスティック設定が出来るようなので問題ないでしょう。パズルやテーブルゲームは普通に遊べます。
久しぶりにポケコンをいじった感じがして、結構楽しめました。昔のテクニカル本や雑誌にはBASICプログラムが数多く載っていますし、ネットにもたくさんのソフトがアップされていますのでまだまだ遊べそうです。
しかし、普段利用しているUbuntu環境のg800でE200キーボードが利用できないのにはがっかりです。USBがだめなら、キーボードのインターフェースをPS/2にしてみるという手もあります。PS/2ならシリアル通信なのでPICから直接PCに接続でき、レスポンスもよくなってg800エミュレータで使用できそうです。
次は基板にPS/2のコネクタを載せてPCと接続してみましょう。
最新の画像[もっと見る]
- M5Core2+ArduinoフレームワークでもLVGLを使う 1日前
- M5Core2+ArduinoフレームワークでもLVGLを使う 1日前
- M5Core2+ArduinoフレームワークでもLVGLを使う 1日前
- M5Core2+ArduinoフレームワークでもLVGLを使う 1日前
- M5Core2+ArduinoフレームワークでもLVGLを使う 1日前
- M5Core2+ArduinoフレームワークでもLVGLを使う 1日前
- M5Core2+ArduinoフレームワークでもLVGLを使う 1日前
- ラスベリーパイのベアメタル環境でLVGLを使う 1週間前
- ラスベリーパイのベアメタル環境でLVGLを使う 1週間前
- ラスベリーパイのベアメタル環境でLVGLを使う 1週間前
※コメント投稿者のブログIDはブログ作成者のみに通知されます