以前、挑戦してあえなく撃沈したAVRISP mkIIでしたが、今回再挑戦しました。
回路は前回試した以下の回路からLEDを2つに減らし、7ピンのVccと8ピンのGNDの間に0.1μFのコンデンサを入れ、電源を+5VのACアダプターにしました。
上の回路図を見ながらブレッドボード上に組んだのが下の写真。
最初に組んだらLEDが1つ付きっぱなしでATmega88Pがチンチンに熱くなり、AVRISP mkIIからは認識されない状態でした。
「チンチンに熱くなるのは+/-を間違えていることが多いな」と配線を調べたら7ピンのVccと8ピンのGNDを1ピンずれてGNDに+5Vを入れていました。たぶん、前回もこの間違いを犯していたんだと思います。
さらに、22ピンのGNDをつなぐのを忘れていて、それも直しました。
これでOKと、AVR Studio 4で以下のようなテストプログラムを書いてHEXファイルを書き込んでみたら、見事動きました。
#include <avr/io.h> #include <util/delay.h> int main(void) { char bit = 0x01; DDRD = 0x0F; PORTD = bit; _delay_ms(10); while (1) { bit <<= 1; if (bit > (1 << 1)) { bit = 0x01; } PORTD = bit; for (char i = 0; i < 10; i++) { _delay_ms(10); } } return 0; }
「7ピンのVccと8ピンのGNDの間に入れたコンデンサを抜いたらどうかな?」と抜いてみましたが、それでも動きました。
「AVRってすごくシビアで動かすのが難しい」と思い込んでいたのですが、自分のミスで動かなかっただけで、ちゃんとつなげばちゃんと動くのがわかってスッキリしました。
メモ:AVRISP mkIIのブレッドボード用自作ケーブルはちゃんと考えて作らなかったので、赤のワイヤーが2ピンになっていて、紫のワイヤーが1ピンになっています。