「米粒AVR」とも言われる超小型のAVRであるATtiny10を使いたいと思ったところ,これまで使ってきたAVRライター(HIDaspx)が
ATtiny10に対応していないようだったので,新たに別のAVRライター(USBasp)を作成しました.また,書き込み用のソケットを作り,
Linux上でアセンブラを使って開発できる環境を整えました.
USBaspというAVRライターが,(1)USB接続で,(2)Linux用の書き込みソフトが存在し,(3)ATTiny10に書き込むことができる(avrdude使用)ことから今回作成しました.
回路図は下図のとおりです.オリジナルの回路と比較して,
という違いがあります.
このAVRライターからターゲットデバイスに電源を供給してISP書き込みを行う時に,何らかの原因で電源がショートしてもPCに影響を与えないために,保護回路付きのレギュレータICを使っています.
またターゲットの電圧が3Vよりも高い場合への対処ですが,AVRは全ての入出力ポートにクランプダイオードを内蔵しているので,10kΩの外付け抵抗を付けることで簡易的にレベル変換を行うようにしています.
これらの改造は,これまで使ってきたHIDaspxでも行っていました.
下の写真は,配線後の基板と,ケースに入れて完成したものです.
DIPパッケージのAVRの場合はICソケットに取り付けた状態で自作のICクリップを使ってISP書き込みをすることが多かったのですが,ATtiny10はSOT23パッケージなのでその方法が使えません.
SOT23のICソケットは市販されていますが高価なので,今回は書き込み用のICソケットを自作しました.下の写真が完成したものです.
ATtiny10書き込み用ソケット
ATtiny10をセットした状態
秋月で売っているSMDプロトタイピング用基板を使って作成しました.
基板に配線をハンダ付けする際に,ATtiny10の幅に切ったカプトンテープをあらかじめ貼っておいてマスキングすることで,ちょうどハンダ付けしたすき間にATtiny10がぴったり収まるようにしています.
ATTiny10の4番ピンは未接続です.また,ISPコネクタのMISO(1番ピン)とMOSI(4番ピン)はショートしています.
最初はこのソケットの下に鉄のワッシャーを取り付けて,磁石でAVRを固定できるようにしようと思っていましたが,磁石にAVRがついて使いにくいので,使用中は洗濯ばさみで挟んで固定しています.見栄えは悪いですが確実に動作してくれます.
これまではAVR用のソフトウェアの開発(アセンブラ・C言語)はWindows上で行ってきましたが,Linuxの方が開発作業がやりやすく,また最近自宅サーバーをリプレースしてLinux環境の使い勝手がよくなったこともあり,今後はLinux上で開発をしようと思っています.
アセンブラには,avr-asを使うことにしました.
Debian wheezyのavr-cppはattiny10をサポートしていないため,avr-asやavr-cppで-mmcuオプションにattiny10を指定することができませんでした.
しかしながら,avr-as自体はATtiny10をサポートしておりヘッダファイルも存在するので,次のようにして"#include <avr/io.h>"しているファイルをアセンブルすることができました:
% avr-cpp -D__AVR_ATtiny10__ program.S | avr-as -Wall -mmcu=attiny10 -o program.o % avr-ld -m avrtiny10 -o program.elf program.o % avr-objcopy -O ihex program.elf program.hex
書き込み用のソフトにはavrdudeを使うことにします. 次のようにして書き込めます:
% avrdude -c usbasp -p attiny10 -U flash:w:program.hex:a
なお,下記の内容で/etc/udev/rules.d/99-USBasp.rulesというファイルを作っておけば,root以外でもUSBaspにアクセスできます.
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", GROUP="users", MODE="0666"