小さなマイコンを組み込んでモジュールを作るのに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が小さいマイコンの時は考えないといけないですね。
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が小さいマイコンの時は考えないといけないですね。