tinyAVR 0/1シリーズ(ATtiny1604 / 404 / 202)で
軽量なソフトウェアI2Cを使いたいと思い、
VPORTを使用した小型ライブラリを作成しました。
フラッシュやRAMが少ないデバイス向けに、
できるだけシンプルに実装しています。
GitHubで公開しましたので、自由にダウンロードして使用できます。
ライブラリの特徴
- VPORT使用で高速GPIO制御
- 非常に小さいコードサイズ
- tinyAVR 0/1シリーズ向け (必ずATtiny 202 402 404 1604)ボードの設定でお願いしますほかのボードの設定で実行するとエラーが出ます。
- PAポート対応
- MITライセンス
対応マイコン
動作確認済み:
- ATtiny1604
- ATtiny404
- ATtiny202
ピン設定について
現在は PAポートのみ対応しています。
例:
- SDA → PA1
- SCL → PA2
SoftI2C_VPORT i2c(1, 2); // SDA=PA1, SCL=PA2I2Cアドレスについて(重要)
I2Cでは7bitアドレスを1bit左シフトして送信します。
例:
uint8_t addr = 0x10; // 7bit address
i2c.write(addr << 1); // Write modeサンプルプログラム
#include <SoftI2C_VPORT.h>
SoftI2C_VPORT i2c(1, 2); // SDA=PA1, SCL=PA2
void setup() {
i2c.begin();
}
void loop() {
uint8_t addr = 0x50; // 7bit I2C address
i2c.start();
i2c.write(addr << 1); // Write mode
i2c.stop();
delay(1000);
}使用例:AQM1602(I2C LCD)
I2CキャラクタLCD AQM1602 でも動作確認しました。
接続例(ATtiny202)
| AQM1602 | ATtiny202 |
|---|---|
| VCC | 5V または 3.3V |
| GND | GND |
| SDA | PA1 |
| SCL | PA2 |
AQM1602のI2Cアドレス
通常は:
0x3E※7bitアドレスです。
送信時は左シフトします:
0x3E << 1表示テストプログラム
#include <SoftI2C_VPORT.h>
SoftI2C_VPORT i2c(1, 2); // SDA=PA1, SCL=PA2
#define LCD_ADDR 0x3E // 7bit address
void lcd_command(uint8_t cmd) {
i2c.start();
i2c.write(LCD_ADDR << 1); // Write mode
i2c.write(0x00); // Command mode
i2c.write(cmd);
i2c.stop();
}
void lcd_data(uint8_t data) {
i2c.start();
i2c.write(LCD_ADDR << 1); // Write mode
i2c.write(0x40); // Data mode
i2c.write(data);
i2c.stop();
}
void setup() {
i2c.begin();
delay(50);
// 初期化(簡易)
lcd_command(0x38);
lcd_command(0x39);
lcd_command(0x14);
lcd_command(0x70);
lcd_command(0x56);
lcd_command(0x6C);
delay(200);
lcd_command(0x38);
lcd_command(0x0C);
lcd_command(0x01);
delay(2);
lcd_data('H');
lcd_data('e');
lcd_data('l');
lcd_data('l');
lcd_data('o');
}
void loop() {
}
ダウンロード
ZIPダウンロード:
Code → Download ZIP から取得できます。
Arduino IDEで
「ライブラリをZIP形式でインストール」から追加できます。
まとめ
tinyAVRは小型で扱いやすいマイコンですが、
I2Cをソフトウェアで実装する場合は少し工夫が必要です。
今回のライブラリは
できるだけ小さく、シンプルに動作するよう作成しました。
今後はLCDやFMラジオICなどでも動作確認していく予定です。



