2003.1.2

Introduction

ひょんなことからThinkPad340を手に入れた。とても古いモノクロノートでこれ自体は使いようがないが、キータッチがけっこうよさげだ。意味もなくぱちぱちたたいたりして、かなり気に入ってしまった。ぜひこれをディスクトップでも使いたい。



ある日webにてIBMのSpaceSaver IIなるPS/2のキーボードを発見、まるでThinkPadのキーボードみたいなそれに期待を膨らませ日本橋に走ったが実物を見るとキーがあの薄いのじゃない。もちろん悪いものではなかったが、想像と違いがっかり。

それなら、いっそ自分でインターフェースを作ってしまおうではないか。トラックポイントは少し難しそうだけどとりあえず挑戦〜。

Theory

キーボードのようなスイッチの数の多いものは、配線を行と列に並べその交差点毎にスイッチを配置し行(列)の端から順に"1"にしたデータを送り、列(行)のどこにつながっているかを調べることによってどのキーが押されたかを知ります。一般的にはこれをスイッチ・マトリクスと呼びます。



ただ、これだと複数のキーが押されていると、押されていないキーが押されたようにみえる、いわゆるゴーストが発生するため、ダイオードを入れるのですが



身のまわりのキーボードを見る限り考慮していないようです(AXのキーボードにはちゃんと入っていました)。ターゲットのキーボードはねじを使っておらず分解できないので確認できませんでしたが。どちらでも同じ事です。

このキーボードからは11と18で合計29本の端子が出ています。これだけの数を扱うにはI/Oの多いAVRを使うか、シフトレジスタやマルチプレクサなどをつないでI/Oをふやす工夫が必要です(このキーボードの本体側の端子をたどると74HC4067というアナログマルチプレクサにつながっていました)。

本体の端子周辺をよく見ると10本ほど終端がグランドにおちた30kの抵抗アレーに接続されています。これはスイッチが押されていないときなどに安定して0V付近になるように信号線をプルダウンするためのものだとおもわれるので、おそらくこちらが検出側でしょう。

Experiment

マッピング。



対応表を作成 : 結果
なぜかPageUpとPageDownの位置が不明。

キーボードは一本の信号線を入出力に使っているため、下図のような回路で方向を見分けます。

compare


観測した波形

sense.png


上:CLOCK 下:DATA

PS/2 のキーコード

まずスタートビットがあり、データが LSB 側から順に出力され、パリティビットとストップビットがあります。パリティは奇数パリティとなっています。
例えば上のタイムチャートでは 0101 0100 で @ となります。

AVR との入出力インターフェース

KeyI/O


キーコードはInterface 2003年1月号を参考。

Hardware

keyboard_ic


回路図。
いたって簡単。

Software

Coming soon ...
調整中




もどる