さて、前回は、ソースコードをコンパイルし、hexファイルをつくるところまでをやった。

 今回は、生成したhexファイルをDa Vinch 32U(Arduino Bootloader版)に書き込んで、Apple Keyboard(M0116,M0116J)をつないで動作するのかをテストする。
 

ATMEGA32U4のマイコンボードへの書き込みには「avrdude」を使う。

 Mac OS Xは、BSD系UNIX互換OSなので、それ用のpkgかソースコードからビルドして作れるが、Arduino IDEの中に入っているので、今回は流用する。
 

 場所は、Arduino IDE.appのコンバイン(FinderからはArduinoIDE.appの一つのファイルのように見えるけど実際は複数の実行型ファイル、設定ファイルとフォルダで構成された複合フォルダ:右クリックのメニューから「パッケージの内容をみる」で入れる。)な中にあって、「Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/」にある。

このコマンドをTerminalで使うことで、Da Vinch 32U2へ書き込む。

この使い方を抽出するために、前回、Arduino IDEで、blinkのスケッチを書き込んでテストする作業をした。重要なことなので、繰り返す。
 Arduino IDEは、スケッチ(プログラムコード)をコンパイルし、hexファイルに変換、そのあとUSBで転送してArduinoマイコンボードへ書き込むという一連の作業を担っている。

 このBlinkというサンプル・スケッチを使って書き込んで動作確認することで、詳しいログを生成し、ArduinoIDEの挙動を確認。
1
 そのログをコピペで、テキストエディットなどへ持ってきて、この「avrdude」がでてくるところをコマンド+Fで見つける。
2 

 もし、ArduinoIDEを/Applicationフォルダに入れているのなら、

「/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/cu.usbmodem11 -b57600 -D -Uflash:w:/var/folders/dw/hb9_lxr954v79_25vd9gpm8w0000gn/T/build7397555082839732555.tmp/Blink.cpp.hex:i 」

というかんじの行がヒットするはず。

「/var/folders/dw/hb9_lxr954v79_25vd9gpm8w0000gn/T/build7397555082839732555.tmp/Blink.cpp.hex」というところを、今回の「adb_usb_lufa.hex」に置き換えて、Terminalで打ち込めば、Da Vinch 32Uを書き換えられる。
3 

 アイコンをドラッグ&ドロップしてやると、ファイル名とパスを自動で入れてくれる。
 で、最後の「:i」を打ち込んで、Terminalでリターンする前に、Davinch 32U4のリセットスイッチを押してから、Terminalでリターン!
 

 うまくいけば、「avrdude done. Thank you.」で終わる。
5
 

書き込みができたら、

Da Vinch32UとApple Keyboardをつないでテスト開始。


  つなぐのは、ADBの配線をWikiを参考に、5V、GND、信号線(ADB)の3本をつなぐ。もう一本は、Macintosh本体の電源をいれるための信号線でショートさせるヤツだったはずなので、今回はつながない。

 信号線とDa Vinch 32U4の出力はPDポートのゼロ番、PD0につなぐ。F0に出したいのなら、ソースコードを書き換えると良いと書いてあるが、ソースコードをみても、専門外の素人なワシには、さっぱり分からないので、デフォルトのままでいく。

 7

 ちなみに、F0につないでも何の反応も無かったので、オシロで観たら、何の信号もでていなかった。PD0に信号が出ているのを確認し、英語での記載通りにPD0を信号線につないだ。
7  8

 ワシは、純正のADBのカールコードを繋いで使うので、これまた英語で記載された推奨通りにプルアップ抵抗を5Vと信号線の間に入れた。1KΩで安定している。プルアップ抵抗なし、もしくは10KΩは、ワシのテスト環境下では、波形が綺麗にならなず、正常に機能しない。

 ワシの記事を読んで、Apple KeyboardをUSBにつなぐアダプタを作りたくなった人は、古い日本のブログ記事を参考にせず、英語で書かれた元の情報が常に最新なので、その通りにやって欲しい。検証と原因究明にかかる無駄な時間が省ける。

デフォルトのadb_usb_lufa.hexを使うと、コマンドキーとオプションキーが入れ替わっているので、これを正しく直す。

 keymap.c をエディタで開いて、みてみると…

6

 K3AとK37を入れ替えれば良いはずなので、単純に、これを入れ替えて、該当する部分をfind&replaceで入れ替え、再び、コンパイルし直してadb_usb_lufa.hexファイルを生成した。
  んで、これを同じ手順でDa Vinch32U4へ書き込んで、テストをしてみると、見事にコマンドキーとオプションキーが入れ替わって、使えるようになった。

 ワシは、拡張アップルキーボードは持っていないのでテストできないが、日本語のM0166J、英語のM0116、計4台で、コマンドキーとオプションキーが正しく認識されていることを確認している。
 もちろん、スナップショットのシフト+コマンド+3や、Photoshopでの解像度の変更のショートカット、オプション+コマンド+I とか、Web用保存のシフト+オプション+コマンド+S等も正常に機能していることを確認している。

 これから使い込んでいくうちに、キーの割り当てが違っているところを見つけたら、その都度入れ替えたりして、直していくつもりだ。
  このUSB_ADBアダプタは、まだ改良が続けられていて、Verアップが進んでいるので、時々チェックして、書き換えなどをしていきたい。

 
 次は、ケースに入れ実装して、ぞれぞれのMacに繋いで使う。