ATtiny1604 / 404 / 202対応 ソフトウェアI2Cライブラリを公開しました【SoftI2C_VPORT】

ATtiny1604対応ソフトウェアI2CライブラリでAQM1602を制御している動作例ATtiny1604 / 404 / 202対応 ソフトウェアI2Cライブラリを公開しました【SoftI2C_VPORT】
スポンサーリンク

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=PA2

I2Cアドレスについて(重要)

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)

AQM1602ATtiny202
VCC5V または 3.3V
GNDGND
SDAPA1
SCLPA2

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() {
}
disp-aqm1602

ダウンロード

GitHubページはこちら:

ZIPダウンロード:
Code → Download ZIP から取得できます。
Arduino IDEで
「ライブラリをZIP形式でインストール」から追加できます。

まとめ

tinyAVRは小型で扱いやすいマイコンですが、
I2Cをソフトウェアで実装する場合は少し工夫が必要です。

今回のライブラリは
できるだけ小さく、シンプルに動作するよう作成しました。

今後はLCDやFMラジオICなどでも動作確認していく予定です。

タイトルとURLをコピーしました