202duino で I2C OLEDディスプレイ [Arduino]
ちょっと前にAliexpressで買ったままになっていた I2C OLED ディスプレイを出してみた。
SSD1306という制御チップを使ったもの。
プルアップ抵抗なしでもなんとかなった。
ATtiny202で制御できるかどうか調べてみると、、ありました。
GitHub - wagiminator_ATtiny13-TinyOLEDdemo I²C OLED on an ATtiny10_13_202
https://github.com/wagiminator/ATtiny13-TinyOLEDdemo
ここで使われているのは、128 x 32 ドット用のスケッチなので、128 x 64 ドット用にちょっと変更するとふつうに使えました。
変更箇所の1つめは、
// OLED init settings
const uint8_t OLED_INIT_CMD[] = {
0xA8, 0x3F, // set multiplex (HEIGHT-1): 0x1F for 128x32, 0x3F for 128x64 HEIGHT-1 : 0x1F --> 0x3F
0x22, 0x00, 0x07, // set min and max page max page : 0x03 --> 0x07
0x20, 0x01, // set vertical memory addressing mode
0xDA, 0x12, // set COM pins hardware configuration to sequential 0x02:Sequential --> 0x12:Alternative
0x8D, 0x14, // enable charge pump
0xAF, // switch on OLED
0x00, 0x10, 0xB0, // set cursor at home position
0xA1, 0xC8 // flip the screen
};
のように、初期設定を変えること。2つめは、// Setup のところで、OLED_init();の前にちょっとdelayを入れること。
3つめは、OLED_clear(void) で、512 → 1024 に変更すること。
です。
delayもArduino標準のを使わずAVRのdelayを使ったりして、スケッチも1kBほどにおさまっています。
試しにこのスケッチを「Wire(I2C)ライブラリ」,「delay()」を使って書き換えてみました。
注意点というか、嵌った点。
・アドレスを 0x78 → 0x3C と1ビットずらした表記で指定する。
・write()というのは書きだすのではなくて溜めておくだけで、endTransmission()で書き出す。
・溜めて置けるのは32バイトまで。
ということで、単純な置換だけではなく、関数の修正も必要でした。
で、それをするとどうなるかというと、、
・そこそこ遅くなっているような気がする
・スケッチが大きくなる(ATtiny202の2kBに収まらなくなり、ATtiny412を使用した。)
・他のArduinoでも使える(UNO R4でも表示できた。)
1.3インチのものも出てきたので使ってみたら、表示できるにはできるけどおかしい。
似て非なる制御チップを使っているらしい。(SH1106?)
0.96インチのと1.3インチのもので電源ピンの順番が逆になっていて、一つ壊してしまった。
202duinoのピン配列をよくあるやつっぽく作ってみた。
QUHSSHIK 0.96インチOLED I2C IIC 通信 128*64 OLEDモジュールデジタルディスプレイ回路基板自発光スペアパーツ, 白
- 出版社/メーカー: QUHSSHIK
- メディア:
2023-10-14 23:09
nice!(0)
コメント(0)
コメント 0