Arduinoボードを作ったのですが、これはI2CでArduino同志の通信を試すためでした。
それをステップを追ってやっていきます。
その前段階として、Arduinoボードを3.3V電源で動かします。通信先のArduino(スレーブ)は、低速で動かして消費電力を下げようと考えていますし、いろんなデバイスが3.3Vでつながることもあり、そのため、バスの電圧を3.3Vにしておくことにします。
Arduinoボードのレギュレーターを5Vのものから、3.3Vのものに変更してテスト。問題なし。
変更後、消費電力を測定。88mW(シリアル通信を使用), 74mW(シリアル通信を使用しない)になりました。
次に、Arduinoマスター側からのI2C通信を試します。といっても、wire ライブラリもあるし超簡単。
スレーブがないとテストできませんので、I2CでつながるLCDをブレッドボードでつなぎました。
LCDのドライバーも、ググって公開されているものをコピーしてお仕舞い。ありがとうございます。
これでマスター側はOKと確認されたので、スレーブ側を作ります。
ブレッドボードにATmega328Pをマウントして、ISPに接続します。
一応reset ピンだけpullup しておくのと、テスト用に、LEDをつけてみました。
実装はこんな感じで、行き当たりばったりに配線をしましたが、ブレッドボードなので、結構簡単にできあがり。
I2CでマスターのArduinoからブレッドボードに取り付けたスレーブのATmega328Pにデータを送って通信をするのですが、スレーブの方は消費電力を抑えたいので、内蔵の発振器で動かしたいと思います。
8MHz の内蔵クロックで動くarduinoのブートローダーをビルドします。
こちらに書かれた手順通り、
Arduino\hardware\arduino\bootloaders\optiboot>にて
omake atmega328_pro8を実行。
optiboot_atmega328_pro_8MHz.hex ができる。
これをAtmel studioで書き込み。
efuse 0x05
hfuse 0xDE
lfuse 0xF2
の設定をして、LED blink のプログラムを作成して書き込みをしてみましたが、点滅しない。
ArduinoIDEのボード設定をboards.txtに書きますが、Windows8.1 では、管理者権限でテキストエディタを動かさないと、ファイルが編集できなかった(管理者権限でエディタを動かさないと、見た感じはファイルが変更されているが、実際には変更されていない)。
efuse 書き込み後読み込むと違う値になっているし、何か間違いがあるのだろう。
とりあえず今は動いていないけど、また忘れてしまうといやなので、書いておく。
やっぱり、もう少し丁寧に、まず外付け水晶で全く同じシステム同志の通信をやってからこちらをチャレンジすればよかったかな。