今日は昨日の続きで、ブレッドボードに実装したATmega328PにArduinoのスケッチを書き込んでなぜ動かないのかをトラブルシュートしました。
LEDチカチカのスケッチをArduinoでコンパイルして、作成した.hexファイルをAtmel studio 6でブレッドボード上のATmega328PにAVRISP mkIIを使って書き込みましたが、LEDチカチカしません。
わけがわからなくなっていたので、16MHzの水晶と33p*2をブレッドボードに実装し、Fuseを16MHzの水晶を使用する設定(Arduinoボードと同じ設定)に書き込み、スケッチもArduino Unoの設定でコンパイルした.hexファイルを書き込みましたが、同様に動かない。
少し悩んだ後、書き込んだATmega328Pチップをこの間作成したArduinoボードに差しかえると、LEDがチカチカしました!
と、いうことは、書き込みはちゃんとできていて、ブレッドボードに実装した回路に問題があるということになります。
超単純な配線なのに、なんでだー。としばし悩み、同様にブレッドボードに実装している例をArduinoホームページに見つけて読んでみる(こちら)と、重要なヒントが。
真ん中へんに、
Pin 20 – AVcc – Suppply voltage for the ADC converter. Needs to be connected to power if ADC isn’t being used
とあります。つまり、AVccをつながないと動かないよ。ってことです。
というわけで、電源関係の配線をはしょらずにつないであげたら無事にLEDチカチカしました。わかってみれば単純な理由でしたが悩みました。

これで、ソフトをいろいろ変えたりして試すことができるようになります。あーよかった。
ついでにAVRISP mkIIをブレッドボードに接続するのがちょっと厄介なので、ISPの6ピンコネクターをSIPに変換する基板を作ってみました。

こんな感じ。いろいろと工夫している人がいますが、私は基板の配線が一番楽になるようなピン配置にしました。ので、ジャンパー線がたくさん要ります。まあ、どうってことないです。
AVRISP mkII でArduinoのスケッチを生AVRチップに書き込む方法のまとめ。
1. スケッチの.HEXファイルが残るようにする。
Arduino IDE のpreference.txt の場所を調べて、そこに、build.path=HEXファイルを置きたいディレクトリ
を書き込む。
2.スケッチをビルドすると、先ほど指定したディレクトリに.HEXファイルができるので、これをAtmel studio 6 のtools->device programmingからファイルを指定して、書き込む。
3. fuseビット、lock ビットを書き込む。
Arduino Unoと同じ値を試して問題なしでしたが、今後8MHz内蔵RC発振器の設定やさらに低速な設定を試していきます。
これでOKのはず。
ブートローダーを作成してもいいのですが、ブレッドボードの方はシリアルで書き込むI/Fを作っていないので、直接スケッチを.HEXファイルにコンパイルして、ISPから書き込んで動かすのが一番簡単そう。boards.txtを適切に設定したものを作るだけで、Arduinoの豊富なライブラリを使った楽ちんプログラミングができるのはとても良いと思います。
ふと空を見上げると、すっかり冬空って感じ。手持ちのカメラで手持ちで空を写してみたら、月とオリオン、シリウスが写ってました。ちょっとぶれているけど・・・
