(仮)釣りと電子工作 忍者ブログ
趣味の電子工作と釣りについて。電子工作は、おもに変換器作成。釣りはおもにトラウトの管釣り。
[82] [83] [84] [85] [86] [87] [88]
ps/2プロトコルのところを下記を参考に書き直した。

http://ioio.at.infoseek.co.jp/PS2/PS2.HTML

ここの記事には、タイミングについて詳しく書いてあったので、これを参考にした。
ついでに、ADB-PS/2変換を2CHIPから1CHIPに変更した。
さらに、なんちゃってオープンコレクター(こんな言葉あるのか?)で、無抵抗、無トランジスタ化。
さらに、もっと小さくしようと思って、PIC12F683対応にした。これは、PIC16F648Aと内部が似ているらしく、少しのプログラム修正だけで済んだ。

完成品は、こんな感じ↓。おそらく史上最小のADB-PS/2変換器だと思う。
IMG_0121.JPG








こちら↓はその拡大写真。抵抗なし。トランジスタなし。PIC直結でシンプル。でも、あまりいけてない空中配線。。。
原価(ハンダ、線材除く)は、
12F683 .... 180円
ICソケット ... 25円
PS/2ケーブル ... 300円/2=150円
Sケーブル(ADB) ... 100円/2=50円
合計...  405円
まずまずですな。
IMG_0128.JPG





PR
ふぅ。。。

こちらがコネクター。へんな形。
IMG_0117b.png










1,2.......... GND
3.............. TX
7,8........... 5V

調歩同期シリアル9600bpsスタート/ストップビット1
偶数パリティみたいだが受信側で無視して良し。



こちらがキーボード&キーコード
oa30b.JPG







カーソルキーを除き、1キー2バイト
たとえば1キーを押したときは 80 02 送信
離したときは 90 02 送信
押している間、ずーっとリピート送信するが、
ディレイはない。
全キーリリース時には、離したキーのキーコードにかかわらず、
90 7Fを送信する。

カーソルキー(メーク+リピート+ブレイク)については、図の上に書いたとおり。

これなら、ps/2化も簡単なり。

もっともこのキーボード、お世辞にもキータッチがいいとはいえない。。。。
カシュカシュって感じで非常に軽い。
Caps Lockのメカニカルロックを解除してみた。M0115は簡単。M0110は半田ごてとハンダ吸い取り器が必要。
M0115でメカニカルロックを外した形が、至高のキーボードではなかろうか??

m0110asw.JPG







↑M0110Aの一部のキートップを外した写真。メカニカルロックのスイッチは、スイッチ内部にバネはなく、少々硬めのバネが外付けしてある。


m0110alk.JPG







↑M0110Aのロック付きスイッチ分解写真。ホッチキスの芯みたいな部品を外せばメカニカルロック解除可能
さて、M0110A(厳密にはM0110AJ)を入手。このキーボードは安い!
人気はないけど、キータッチはM0110とほぼ同じ。

さっそくキーコードを調べてみた。

①基本はM0110とまったく同じ
②Enterキー(Returnではない)の吐き出すコードはM0110のEnterとは違う
③M0110Aで追加されたキーは1バイトではなく2または3バイトのコードを返す

ということで、調べてみた。

キー Make Break
---------------------------
←  79 0d    79 8d
→  79 05    79 85
↑  79 1b    79 9b
↓  79 11    79 91

ここから下はTenキー

0  79 25    79 a5
.  79 03    79 83
1  79 27    79 a7
2  79 29    79 29
3  79 2b   79 2b
4  79 2d    79 2d
5  79 2f    79 2f
6  79 31    79 31
7  79 33    79 33
8  79 37    79 37
9  79 39    79 39
Clear  79 0f    79 8f
=  71 79 11    f1 79 91
/  71 79 1b    f1 79 9b
*  71 79 05    f1 79 85
-  79 1d    79 9d
+  71 79 0d    f1 79 8d
Enter  79 19    79 99

おお、71(shiftキー)の処理が複雑になる!!
忘れないうちにメモしておく。

① CLKとDATAの2本の線でデータのやりとりをする。
② CLKはつねにキーボードからホスト(Mac)に向けて送信する。
③ RS-232CやPS/2と違って、MSB firstでデータを送受信する。(さすが68系)
④ホストはCLK立ち上がりのタイミングでDATAを読む
⑤キーボードはCLK立ち上がりから80μs秒後にDATAを読む
⑥ホストからなにもしなければ、キーを押してもキーボードからデータを送ってこない。(無理にキーから値を読もうとすると無限ループにはまってハングする)
⑦ホストから0x10 (Inquiry)をキーボードに送ると、キー入力がある、ないにかかわらず、キーボードからデータを送ってくる。キー入力がなければNULL(0x7B)を返す。あれば該当するキーコードを返す。
⑧M0110が返すキーボードは、ADBキーボードが返すキーコードをちょうど2倍した値(左に1ビットシフトした値)になぜかなっている。


M0110_protocol.JPG







この図の言わんとすることは、つまり

キーボードからデータを受け取るときは、CLKがHighになるまでループさせて、HighになったときにDATAを読む。

キーボードへデータを送るときは、とりあえずDATAをLowにしておき、しばらくするとキーボードからクロックを送って(Lowにして)くるので、HighからLowに切り替わるタイミングでDATAへ書く。

これだけ。古いだけあって、簡単。
カレンダー
08 2025/09 10
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
リンク
最新TB
バーコード
ブログ内検索
カウンター
Powered by ニンジャブログ  Designed by 穂高
Copyright © (仮)釣りと電子工作 All Rights Reserved
忍者ブログ / [PR]