HIDaspxを作った


最近、癒される時間の過ごし方が、半田付けになりつつあります。
Kindleにシリアルコンソールを接続するために、数年ぶりに半田ごてを握ったのをきっかけに半田付けの楽しさを思い出したのです。
Twitterで電子工作というかマイコン工作をしている人たちと知り合ったのもきっかけですね。

8bitのAVRというCPUを使ったマイコン工作をはじめていたのですが、数年前から流行りだしているArduinoという開発環境が便利なので、それを使っています。
ArduinoはPCやMacで動くJavaで書かれた開発ソフトでC/C++ライクの言語で、世界中のユーザが書いている豊富なライブラリを使って、比較的簡単に開発をすることができるものです。PC/MacからUSB-シリアル経由でAVRにソフトウェアを転送するのですが、AVR側にはbootloaderと呼ばれるArduinoソフトウェアが書き込まれており、この仕組みが実現しています。

で、bootloaderは公開されているので(オープンソースハードウェアです)、市販のAVRチップにbootloaderを書き込んで、Arduinoのボードは買ってこなくても自作することが出来るのです。完成品のArduinoボードも大して高くはないのですが、AVRのCPUは種類が豊富で、たくさんのバス(インターフェース)を搭載したAVRを使って遊びたかったので、自分でAVRにbootloaderを書き込む方法を調べてみました。

AVRプログラマで人気なのは、USBaspxやHIDaspxといったものです。このプログラマもAVRを使って作られています。どちらもAVRを直接USBに接続する仕組みになっているのでUSBコントローラチップなどを買う必要がなく、安価に作ることが可能です。
とりあえず、両方作ってみることにしたのですが、USBaspxのほうは3.3V対応のモノを作ろうとしたために、部品が秋葉原で簡単に入手できなかったために、とりあえずHIDaspxが完成しました。

HIDaspxは、山形県立産業技術短大の千秋広幸さんが公開しているもので、HIDプロファイル(キーボードとかですね)に見えるために、PCにドライバなどを導入しなくても使えることが特徴です。ATtiny2313 1個で作られています。
HIDaspxの情報は、 http://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?AVR%2FHIDaspx で入手できます。

このページの、HIDaspx の製作例を見ながら半田付けすると楽ちんです。
回路図と製作例には電解コンデンサの容量(47μFと33μF、たぶんレギュレータがなければ発振を気にせずに済むので33uFでいい)などの差異があるのですが、製作例だけを見て半田付けすると良いでしょう。裏からみた配線図なのがありがたいです。

部品は、ほとんどを秋月電子で、3.6VのツェナーダイオードとUSBコネクタのみ秋月電子の隣の千石電商で購入してきました。
USBコネクタは秋月でも売っているのですが、私はMini-Bコネクターにしたかったため、サンハヤトのCK-36というMini-bコネクタ変換基板を使っています。タカチのTW4-2-8というケースを選んだので、これ用のユニバーサル基板(タカチのTNF 34-62)を使って組み立てました。

千秋ゼミのWikiに掲載されている、配線図や回路図を見ているとUSBとの配線が分かりづらいのですが、調べたところ、
1. VCC 2. D- 3.D+ 4. GNDとなっています。(あ、今回路図みたら書いてあった。)これとサンハヤトの変換基板のパターンを接続すれば良いです。

また、ArduinoやAVRと接続する方の端子(ISP(In-System Programming)と言います)は、千秋ゼミの作例では1列の6ピンになっていますが、Arduino界隈でよく見かけるのは2×3ピンのIn Circuit Serial Programming (ICSP)形式のコネクタだったりします。なので、
基板上には1×6と2×3ピンの2通りでコネクタを付けました。
ちなみに、2×3ピンのコネクタのピン配置はこんな感じです。

僕はこんな感じに仕上げました。

で、ATtiny2313へのファームウェアの書き込みですが、初めてのAVRプログラマ製作ですのでUSBシリアルを使って書き込みを行いました。
Kindleへの接続にも使っている、秋月のUSBシリアル変換モジュール AE-UM232R (950円)が手元にあったので、FTDI BitBang AVR-Writerという方法で書き込みを行いました。
詳細は、(番外) FTDI BitBang AVR-Writerにあります。
この例では、ATMEGA168への書き込みをしていますので、ATtiny2313向けにピン配置を変更しています。
ATtiny2313は、 1. RESET 4,5.XTAL 10.GND 17.MOSI 18.MISO 19.SCK 20.VCC です。ブレッドボードでクリスタルとセラコンを使った回路を用意するのは面倒だったので、16MHzのセラロック(真ん中のピンがGND)を刺しています。
あと、RESETを10kΩでVCCに接続してプルアップ、0.1μFの積層セラコンをパスコンとして接続しました。

あとは記事に従って、avrdude-serjtagという、avrdudeというライタをコントロールするプログラムにFT232R対応を付け加えたものを、avrdude-GUIというWindows用のGUIラッパから操作します。元記事では、avrdude-serjtagは0.3ですが、新しいモデルのAVRをサポートなどしている0.4eが出ていました。
ファームウェアは、千秋ゼミのHIDaspx_news02のページの「hidspxとHIDaspx(2種類のGUIを同梱)」をダウンロードし、Flash欄で/bin/firmware/main-12.hexを選択して、[Erase-Write-Verify]ボタンをクリックして書き込みをしました。あと、ドキュメント(Readme-i.txt)に従ってFuse欄のhFuseを0xDB、lFuseを0xFFに書き換えておきました。いま気付いたんですが、FTDI BitBang AVR-Writerのページの手順8のlFuse値の書き換えはしていません。

書き込みを終えたATtiny2313をブレッドボードから取り外して、作ったHIDaspxの基板のICソケットに刺し、PC/MacのUSBコネクタに接続したところHIDデバイスとして検出されたので、OKそうです。

これで初めてのAVRライタができあがりました。わーい。
ケースへの組み込みも済ませてあります。こんな感じです。久しぶりにプラケース加工をしたので、ちょっと加工がヘタクソですが、ご愛敬ということで。ケースはもっかい作り直そうかなと考え中です。