小さなマイコンを組み込んでモジュールを作るのにI2C通信のSlave機能があると便利だと思い,ATtiny1604で簡単なプログラムを試してみました。


MasterはBASIC言語のPICAXE-20M2,SlaveはArduino言語のATtiny1604で赤と緑のLEDをコントロールしています。



書き込み機のArduino nanoやOLEDディスプレイなどでごちゃごちゃしていますが,今回使っているのは2つです(^^;;;。



I2Cの配線はシンプルですが,slave addressの表記に注意!です。

Arduino 0x08 (7bit表記)
PICAXE 0x10 (8bit表記)





PICAXEからのデータでArduino側でLEDをコントロールしているところです。




Master側のPICAXEのBASICプログラムはI2CでLEDの点灯を指示しています。





Slave側のArduino, ATtiny1604ではI2Cからのデータ入力での割り込みを試してみました。




割り込みルーチンでデータを取り込む変数は今回の "selectLed"のようにvolatile指定を行った方が安定するように書かれている解説が多いですね,,。



一番シンプルなぐらいのプログラム(^^;;;;でI2C通信を試してみました。配線も簡単でライブラリも強力でなかなか便利です。

ただ,I2CのWireライブラリはバッファのメモリ使用があります。ATtinyでもRAMが1KBある1604ぐらいなら余裕ですが,もっとRAMが小さいマイコンの時は考えないといけないですね。