古いMacのADBキーボードを復活させた。
最近、raspberry piなんかを使うのでUSBキーボードがもう一つ欲しくなったのでロフトを探していたらADBキーボードが出て来たのだった。
昔はこれをUSBに変換するアダプタ(Griffin iMate)が市販されていたのだけれど今では入手困難なはず。ググったらば自作している人がいた。

ADB to USB keyboard converter for Teensy
https://github.com/tmk/tmk_keyboard

ここではTeensyというマイコンボードを使って作成している。
海外通販でしか手に入らないものなのでめんどくさいなと思っていた。まぁ、最近は海外通販もよく使うようになってきたら買えばいいのだけど。また円安になってきたので不利だがな。

ArduinoでADBじゃないNeXTキーボードのコンバータを作っている記事をたまたま発見して、ついでにADBコンバータの記事を探してみた。
そうしたところ Da Vinci(Strawberry Linux)で動かした人がいた。これならば秋葉原の千石電商で買える。簡単そうに見えたので作ってみた。

ADB to USB converter on Da Vinci(1/3) – エチュードの頃
http://blog.goo.ne.jp/firstletter/e/9e262abf009d31cce929aed752b7e33a

ハード篇

秋葉原の千石電商で買ってきたのは以下の二つ。

Da Vinci (Strawberry Linux) 1260円(2階にStrawberry Linuxコーナーがあった)
mini DIN 4pin 120円(エレキギターのパーツのコーナー)

あとはこれらを入れるケースと抵抗(10kΩ)とコードが少々。

mini DIN 4ピンのうちの3ピンを Da Vinci につないでおしまい。
特に注意する点は無い。
途中に抵抗を入れろと言うので入れておいた。
今回は試行錯誤を考慮してコネクタでつないであるが、直結で問題無いです。
がんばればフリスクケースに入ると思います。今回はフリスクより一回り大きいケースに入れてます。
回路図

ソフト篇

まずは以下のものをインストールする必要がある。今回はWindows Xpでやってみた。

Arduino (開発環境 Da Vinci用の設定も忘れずに)
tmk_keyboard (ソース)
WinAVR(コンパイラ)

どれもCドライブ直下にインストールする方が良い。フォルダにスペースが含まれるとたいてい面倒くさい事になります。

まずは Da Vinci を普通のArduino互換機として使えるようにしてみます。
正常にファイルが書き込めるかの確認です。

まずは環境設定で「より詳細な情報を表示する」の書き込みの方にチェックを入れるのがポイント。これは後で必要になります。

ファイルの「スケッチの例」のどれかを適当に選んでみます。
画面上の左のチェックマークのボタンを押す。(コンパイル)
→ボタンを押す。(Da Vinciへの書き込み)
これだけです。

最終的にはファイルの「スケッチの例→01.Basics→Blink」を選びます。
チェックマークボタン、矢印ボタンを押して転送します。
この時点で Da Vinci は赤LEDが点滅しているはず。

成功したならば画面下の黒い画面に表示されている情報をコピペしておく。
後でこの情報が必要になります。
次にtmk_keyboard のソースをダウンロードしてビルドします。
2013年3月末の時点のソースではコンパイル時にエラーが出るようです。
matrix.c ファイルの中の print_enable = true; が未定義と言われてしまう。
ちょっとソースを見たけれど、わからなかったので該当行をコメントアウトした。


	> cd (略)\adb_usb
	> make  -f  Makefile

これで adb_usb.hex ができるはずです。

先ほどのArduinoのログの最初の方にデータ書き込みのコマンドが表示されているので、それを元にしてconvertorのプログラムを書き込みます。
最後がファイル名なのでそこをadb_usb.hexに変更します。

 

例えば以下のような感じ。ポートの部分とファイルのパスが環境によって変わります。
オプションと引数の間にスペースが無いとか-vが4個並んでるとか気になるところはありますがそのまま実行すれば良いようです。

> C:\arduino-1.0.4\hardware\tools\avr\bin\avrdude -CC:\arduino-1.0.4\hardware\tools\avr\etc\avrdude.conf -v -v -v -v -patmega32u4 -cavr109 -P\\.\COM5 -b57600 -D -Uflash:w:C:\tmk_keyboard-master\converter\adb_usb\adb_usb.hex:i
Da Vinciのリセットボタンを押してLEDがゆっくり点滅しているいいタイミングでコマンドを実行します。
たくさん文字が流れて、 avrdude done.  Thank you. と表示されたら書き込み成功。
タイミングがあるようなので何度か試す必要があります。
失敗するとLEDは前と同じように点滅を始めます。成功の場合はLEDは点滅しない(adb_usbで上書きされたから)。わかりやすくするためにBlinkをあらかじめ転送しておいたわけです。
adb_usb

その後(ハマり篇)

使ってみたのだけどOptionとCommandのキーが逆になっているようでした。WindowsのキーボードとしてMacのキーボードを使うための設定っぽいですね。それに Apple Extended Keyboard II 用のようなので、それ以外のキーボードではテンキー部分がなんかおかしくなっています。
keymap.c で好きな配列に変更できるのでApple Keyboard II用に変えてしまいました。今使ってみているのは Apple Adjustable Keyboard というかなり変なヤツ。中古で買ったからテンキーとパームレスと無いんだけどね。

再ビルドして Da Vinci に書き込もうと思ったのですが、何度やっても書き込めないので困りました。何百回やってもダメ。バッチ書いて連続実行させてみたけど全部エラー。
書き込みのタイミングがシビアになっているのでしょうか?

試しにMacにArduinoのツールをインストールしたらavrdude(書き込みツール)がインストールされたので、Macで書き込みを試してみました。
こちらは数回試したら成功しました。そういうもんか。とりあえずAVRライタを買わなくてすんだのでよし。

/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega32u4 -cavr109 -P/dev/tty.usbmodem1a1211 -b57600 -D -Uflash:w:/Users/{俺}/Desktop/adb_usb.hex:i

それから、10年以上使っていなかったADBキーボードは接触不良っぽいです。効きにくいキーがあります。

何回もキーを叩いてあげたらだんだん調子良くなってきました。
キーボードが古いからかコンバータのせいかわかりませんが速く打つとキーの取りこぼしがあります。当時のMac本体のCPU(MPU)が8MHzや16MHzだったんですよね。キーボードもそんなに速くないかも。そういえば Da Vinci も16MHzだ!

以下を参考に作ってみました。
みんなありがとう。
tmk_keyboard はまだまだ開発中のようなので今後もチェックしていこうと思います。

ADB to USB keyboard converter for Teensy
https://github.com/tmk/tmk_keyboard

ADB to USB converter on Da Vinci(1/3) – エチュードの頃
http://blog.goo.ne.jp/firstletter/e/9e262abf009d31cce929aed752b7e33a

USB NeXT Keyboard with an Arduino Micro
http://learn.adafruit.com/usb-next-keyboard-with-arduino-micro/overview

2013/04/07