PS/2キーボード→RS232Cプロトコル コンバージョンアダプタ |
アダプタを使用してワンダースワンにPS/2キーボードを接続 |
はじめに |
ワンダースワンの開発環境であるワンダーウィッチが発売されて、携帯用ゲーム機のプログラムが個人でも手軽に作製できるようになりました。
ゲーム機としてだけ使うのならば、ワンダースワン単体で過不足は無いのですが、自由にプログラムが組めるとなると、ゲーム機以外の使い方をしたくなります。誰でも考えつくのがVisorやザウルスといったPDA的な使い方なのですが、そういった方面で使おうと思うとワンダースワンの入力デバイスは貧弱です。 タッチパネル等の入力デバイスをワンダースワンに装着するのは難しそうなので、さしあたっての解決策としてPS/2キーボードの接続を考えました。ちょうどいいタイミングで超小型のPS/2キーボードが入手できたという事もあり、とりあえずやってみようということで作製したのがPPCA(PS/2 keybord Protocol Conversion Adapter)です。 ファームウェア部分はまだ完全ではなく、現在も色々と手直ししたり新しい機能を組み込んだりしている途中なのですが、とりあえず一通り動くようにはなったので、資料として以下にまとめておくことにします。何かの参考になれば幸いです。 尚、これらの内容についてはその一切を保証しません。全ての作業は自己責任において行うようにしてください。 |
ハードウェア |
PPCAの回路は非常に単純で、PS/2のCLOCK信号をAVRの外部割り込み端子に、DATA信号を入力端子に接続し、AVRのUART入出力端子をMAX232経由でRS232Cコネクタへ接続しているだけです。
AVRの入力ポートにはプルアップが内蔵されているので、CLOCKとDATAのプルアップ抵抗は不要なようにも思えますが、内蔵プルアップではキーボードに対するコマンド送信がうまくいかなかった為、付けてあります。 特に難しい部分は無いと思いますが、RS232CコネクタとPS/2用のDINコネクタは基板に乗らないので、ケースに入れない場合は取り付けに工夫が必要かもしれません。
|
|
|
上記パーツの他に、ACアダプタで動作させる場合にはACジャック、乾電池で動作させる場合にはスナップコネクタや電池ホルダ等が必要となります。
MAX232と7805は同等品でもかまいません。最近はコンデンサ内蔵のMAX233互換チップというのも出ているので、そちらを使うと更にパーツ数を減らすことができます(ちょっと高いようですが)。 |
ファームウェア |
PPCAを動作させるためには、AVRワンチップマイコンの内蔵フラッシュメモリへファームウェアを書き込む必要があります。
フラッシュライタは自作することも可能ですが、秋月電子のAVRマイコンプログラマキットを使用するのが簡単でしょう。AVRマイコンプログラマキットに付属する書き込みソフトはAT90S2313未対応なので、アップデータをダウンロードする必要があります。ここからダウンロードしてください。 |
|
バイナリファイル |
ワンダースワンとの接続を想定しているため、ボーレートは38400bpsに固定です。他のボーレートに変更したい場合は、ソースファイルを変更してください。
AVRのPortBが丸ごと空いているので、DIP-SWを付けてボーレートを変更できるようにするというのも考えたのですが、今回は見送りました。 |
キーコード表 |
PPCAはスキャンコードモード、トランスレートモード、拡張トランスレートモードの三つの出力モードを持ちます。
スキャンコードモード時はPS/2キーボードの生データをそのまま出力し、トランスレートモードと拡張トランスレートモード時はスキャンコードを内部で変換してから出力します。 スキャンコードについては、CQ出版社から出ている「トランジスタ技術SPECIAL No.72 パソコン周辺インターフェースのすべてIII」を参照してください。今回PPCAを作製するときに参考にした本です。 ScrollLock、NumLock、CapsLockの各LEDのON/OFFや、Shiftキーを押した時の英小文字/英大文字の切替動作は、スキャンコードモード時には一切行われないので注意が必要です。
|
|
|
拡張トランスレートモード時は、トランスレートモード時のコードに加えて0x80〜0xFFの範囲のコードが出力されます。
基本的に全てのキーコードはキーを押したときに出力されますが、左右のCtrl、Shift、Altキーだけはキーを押したときと離したときにコードが出力されます。 後ろに(M)と書かれているのがキーを押したときに出力されるコード、(B)と書かれているのが離した時に出力されるコードです。 |
コマンド |
ホストコンピュータ側からPPCAに対してコマンドを送信することで、動作モードを切り替えたり、状態を取得したりすることができます。
コマンドは全て1バイトの半角英大文字または数値です。 |
|
おわりに |
アダプタを使用してワンダースワンに文字入力 (見えにくくて申し訳ない) |
AVRワンチップマイコンのアプリケーションノートにPS/2キーボードとの接続例が既にあったので、簡単に実現できるだろうと思って着手したのですが、実際にはかなり苦労しました。
PS/2キーボード自体がもっとインテリジェントなもので、たとえばCapsLockキーを押したときにLEDが点灯し、自動的に小文字から大文字に変換したコードを出してくれるのだろうと思っていたのですが、実際にはそうではありませんでした。
PPCAはASCIIコードをシリアルで出力する機能を持たせるつもりでしたから、ホストが行っていた処理をすべてAVRワンチップマイコンで行う必要があり、この部分がやたらと面倒で七転八倒してしまいました。
苦労したおかげでAVRワンチップマイコンのプログラミング、及びPS/2キーボードの構造に関する知識はだいぶ増えたような気がします。増えた知識が今後なにかの役に立つかどうかは分かりませんが、技術屋としては知らないより知っていた方が良いことは間違いないと思います。
プログラムの不具合や、改善点の要望などありましたら↓の掲示板の方へ書き込んでください。確約はできませんが、できるかぎりは対応したいと思います。 |
ワンダーウィッチ専用掲示板 |
WorldWideWonderWitchWorkbench |