HIDaspx を作る

AVR を使った電子工作では、ISP プログラマーが必須だ、以前から「ELM さんの AVR ライタ」を使わせてもらっている。
※シリアル→ISPの変換デバイスを USB シリアル変換(FTDI)と組み合わせて、ケースに入れてある。

IMG_0436s
※さすがにかなりくたびれているが、未だ現役。

数年前に、ATtiny2313 を使って、ソフトウェアーだけで、USB クライアントになる ISP プログラマーが発表され、ずっと使ってみたかったのだが、現役のプログラマーで何とかなっていたので、ずっと見送っていた。
千秋ゼミ(AVRマイコンなど)
先日ゲームコントローラーを作るので部品を買った余り(余分に買った)があり、丁度良い機会なので、作ってみる事にした。

HIDaspx は、ATtiny2313 といくつかの部品だけで動作する AVR 用 ISP プログラマーなのだが、非常に洗練されており、ソフトウェアーの機能もてんこ盛りだ(はまった)。
折角なので、単純に AVR の ISP プログラマーを作りたい人の為に、簡単な製作記を残しておこうと思う。

(1) ハードの製作
HIDaspxは、プリント基板を販売しているところがあり、それを使えば簡単なのだがー、いくつかの点で、自分のスタイルに会わない為、今回はパス。

・やはりこの手の物は、ちゃんとケースに入れて、使わないと、ショートしたり、何かとトラブルが起こるもので、前回同様、同じケースに入れる事とした。
・ISP のコネクターは、前回と互換性を持たせ、10ピン仕様とする。
・最近はミニ USB やマイクロ USB が主流で、小さくて、扱いやすいので、ミニ USB コネクター仕様とした。
・電源の切り替えは、前回同様、5V、3.3Vを切り替えできるようにした。
・HIDaspx は、Ready と Busy のランプがある。
以上を踏まえて、ケース内のレイアウトを決め、ケースの加工、基板の切り出し、加工を行った。

IMG_0434s
※この段階では、LED 電源切り替えスイッチの穴は開けてない。
※ミニ USB のコネクターは、既製品の変換アダプターを使った。(かなり昔に買ったもの)
※このケースは、底蓋の面構造が、基板を、コネクターの形状を利用して固定するのに都合良く作られている。

内部に納める基板が出来たら、回路図を見ながら、部品を乗せて行く。

IMG_0437s

IMG_0438s
※緑の LED、VF が 3.2~3.4V なので、3.3V で動作させた場合にLEDが点灯しないのでは無いかと考え、フォトカプラーを間に入れて、常に5Vで駆動するように改修してある。
※他は、ほぼオリジナルの回路準拠
※経験上、三端子レギュレーターの入力側にはコンデンサはを入れていない(無くても、まず発振したりしないし、レギュレーションが悪くなる事も無い)
※緑 LED は超高輝度を使った為(手持ちがそれしかなかった)、電流を少なくしても、直視できないほど刺すような明るさで、失敗・・・、ブルー LED に交換する予定

最後にケースにレタリング

IMG_0439s
※新旧、2台のISP

IMG_0440s
※USB コネクター部分の違い

(2) 動作検査
まず、ファームやツールなどをダウンロードする。

今回使ったのは「hidspx-2012-0326.zip」で、既存の ISP で、2313 にファームを書き込んだ。

hidspx-2012-0326/bin/firmware/main-12.hex

ヒューズの設定は、ここに詳しく書かれている。

さて、一応、配線を確認後、PC の USB ポートに接続する、しばし・・・
問題なく、デバイスドライバーがインストールされた。

※自分の環境は、Windows7 64 ビットだ。
※USB2.0 のハブに接続している。

HIDaspxDeviceMan
※デバイスドライバーは、「HID 準拠デバイス」として認識されているようだ・・

(3) ツールの用意

hidspx-2012-0326/bin/hidspx.exe があるので、cygwin などのシェルを起動して、このコマンドを使ってみる。

↓以下のようにコマンドを打てば、認識したデバイスを表示してくれる。
% ./hidspx -ph?
VID=16c0, PID=05df, [ YCIT], [HIDaspx], serial=[0000] (*)

では、AVR を ISP に接続して、ヒューズビットを読み込んでみよう~
% ./hidspx -ph -d4 -rf
Detected device is ATmega88.

==== ATmega88 ====

Low: 11100110
||||++++-- CKSEL[3:0] システムクロック選択
||++-- SUT[1:0] 起動時間
|+-- CKOUT (0:PB0にシステムクロックを出力)
+-- CKDIV8 クロック分周初期値 (1:1/1, 0:1/8)

High:11-11111
|||||+++-- BODLEVEL[2:0] (111:無, 110:1.8V, 101:2.7V, 100:4.3V)
||||+-- EESAVE (消去でEEPROMを 1:消去, 0:保持)
|||+-- WDTON (1:WDT通常動作, 0:WDT常時ON)
||+-- SPIEN (1:ISP禁止, 0:ISP許可) ※Parallel時のみ
|+-- DWEN (On-Chipデバッグ 1:無効, 0:有効)
+-- RSTDISBL (RESETピン 1:有効, 0:無効(PC6))

Ext: -----001
||+-- BOOTRST (1:Normal, 0:BootLoader)
++-- BOOTSZ[1:0] (11:128W, 10:256, 01:512, 00:1024)

Cal: 182

※何かの拍子に、ISP が認識しなくなる事があるようだ、USB ケーブルをさし直すと直るようだが・・・

----- 注意!注意!注意! -----

hidspx は非常に高機能で、複雑、オプションなど注意を要する、得に、他の ISP プログラマーの機能を取り込んでいる為、他の ISP と混同すると期待した動作はしない。

※ありがちな事(自分もやった)
・USBaspx と HIDaspx を混同する。
※USBaspx は、libusb-win32 経由でデバイスとやりとりする為、libusb-win32 のツールを使って、デバイスを認識させる必要がある。

・libusb-win32 のツールを使って、HIDaspx を認識させてしまうと、hidspx で認識しなくなる。
※誤って、そうしたら、デバイスドライバーを削除すれば OK。
※HIDaspx はドライバーのインストールなどが一切不要で、直ぐに利用できる、半面、デバイスドライバーのプロパティでは、「HID 準拠デバイス」としか認識されない。

「千秋ゼミ」のページは、情報が多く、初心者には判りずらいかもしれない、しかしながら HIDaspx は非常に素晴らしい ISP なので、AVR のプログラマーを探している人は是非使ったら良いと思う。

追記:
> 何かの拍子に、ISP が認識しなくなる事があるようだ、USB ケーブルをさし直すと直るようだが・・・
外部電源に、数百mA程度を消費するような機器を繋いだ場合に、瞬間的に電源電圧が変動して、ATtiny2313 の機能が止まって認識しなくなるようです。
※Windows のデバイスマネージャーからは、正常に見えている。
そこで、外部電源ラインに、直列にフェライトビーズ「BLM18PG471SN1D」(秋月電子扱い)を入れたら、安定しました。
※470オーム(100MHz)/1000mA/0.2オーム(直流抵抗)