(仮)釣りと電子工作 忍者ブログ
趣味の電子工作と釣りについて。電子工作は、おもに変換器作成。釣りはおもにトラウトの管釣り。
[81] [82] [83] [84] [85] [86] [87]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ふぅ。。。

こちらがコネクター。へんな形。
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化も簡単なり。

もっともこのキーボード、お世辞にもキータッチがいいとはいえない。。。。
カシュカシュって感じで非常に軽い。
PR
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へ書く。

これだけ。古いだけあって、簡単。
ちょこちょこっとロジックを書いて、RS-232C(PICの世界ではUSARTと呼ぶらしいので以降はUSARTと呼ぶ)とADBの変換はほぼ問題なくできることを確認した。

こんな感じで接続

[ ADB Keyboard ] -- [ 2SC1815 ] -- [ PIC 16F628A ] -- [ MAX232(互換) ] -- [ThinkpadのCOM4]

teratermではちょっと機能不足なので、SerialDebugTool(SerialDebug112.zip)を使用。
左右のShift,Ctrl,Altで違うコードを返してくるし、文字を送るとnum lock、caps lock、scroll lockのLEDを自由に制御できた。

あとは、

[PCのPS/2ポート] -- [ 2SC1815 ] -- [ PIC 16F628A ] -- [ MAX232(互換) ] -- [ThinkpadのCOM4]

てな感じでつなぐような、PS/2をUSARTに変換するものを作って、上のやつと直結すればADB-PS/2変換器の出来上がり。

で、こんなものを作らなくてもi-mateがあるじゃないか、といわれそうだが、まったくそのとおりとおもう。かくいうおれもi-mateを持っているのだが、caps lock のハードロックを微妙に処理しているところが気に食わない。caps lockのハードロックを外してcaps lockとctrlを入れ替えようと考えているおれにはあわない。

っということで、M0115対応は目処がついたので、開発中断。
実はM0116対応(たぶんGSキーボードも一緒)も考えていたけど、キーボードをもっていないのでやめた。M0116対応はM0115対応よりむずかしい。キーの数が101 or 84キーボードより少ないので、Happy HackingみたいにFnキーを作らないといけない。

明日からはM0110 ( Mac 128K/512K用テンキーなしキーボード)に挑戦。
カレンダー
10 2024/11 12
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]