Arduino I2C 通信

2つのArduino の間でI2C通信を行い、スレーブのArduinoのLEDをマスターから点滅させてみました。
スレーブの方では、ポートのset/resetコマンドを実装するのと、リクエストを受けた時にポートの値を送り返すように実装しました。
と言っても、こちらの例とほとんど同じなものを実装しただけ。

マスターの方も、こちらの例に倣ってお仕舞い。

一応、別のIDを持っているLCDに表示させつつ、スレーブArduinoのポートの制御もできたのでOK.

ほとんどただの備忘録ですが、一つ一つ進めていくつもりなので、進捗を記録しておく。

明日は、低消費電力にするのをチャレンジしようと思います。

Arduino AVRISP mkII で書き込み

今日は昨日の続きで、ブレッドボードに実装した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チカチカしました。わかってみれば単純な理由でしたが悩みました。
DSCN3228
これで、ソフトをいろいろ変えたりして試すことができるようになります。あーよかった。

ついでにAVRISP mkIIをブレッドボードに接続するのがちょっと厄介なので、ISPの6ピンコネクターをSIPに変換する基板を作ってみました。
DSCN3229
こんな感じ。いろいろと工夫している人がいますが、私は基板の配線が一番楽になるようなピン配置にしました。ので、ジャンパー線がたくさん要ります。まあ、どうってことないです。

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の豊富なライブラリを使った楽ちんプログラミングができるのはとても良いと思います。

ふと空を見上げると、すっかり冬空って感じ。手持ちのカメラで手持ちで空を写してみたら、月とオリオン、シリウスが写ってました。ちょっとぶれているけど・・・
DSCN3233