2017年9月6日水曜日

HiLetogo 0.9" I2C OLED 128X32が届いたのでFast Mode(400kHz)で動作させてみた。


HiLetgoで買ったAD9833モジュールがけっこうちゃんとした製品だったので、OLEDも発注して到着したので試してみた。



8/23に発注して、今日9/6に届いたのでちょうど2週間。

ドライバICのSSD1306は、以前aitendoのOLEDでU8glibで試したことがあるのであっさり動作してくれた。

aitendoのOLEDは3.3V駆動が仕様でSPI接続で使ったので、5V駆動のArduinoから使うために5V→3.3Vのレベル変換をロジックICを使って行ったが、今回購入したOLEDはI2C接続で、駆動電圧3.3V~5Vとなっているのでレベル変換は行っていない。

とは言ってもSSD1306のデータシートを見ると、

• Power supply
o VDD = 1.65V to 3.3V for IC logic

となっているので、3.3V駆動で試してみた。

ブレッドボード配線


配線図は書くまでもなく写真の通り

  • I2C OLEDの電源はArduino Unoから3.3Vを供給
  • I2CのSCL、SDAはモジュール上でプルアップされているので、ArduinoのA5(SCL)とA4(SDA)を直結

Arduinoのスケッチ


U8glibのexampleで試してみた。

使い方は、exampleの

//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI

という行のコメントアウトを外して

U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI

として、SSD1306のI2C接続を指定すれば動作した。

I2CのFast Modeで動作させてみる。


いまだにちゃんと使いこなせないI2Cだが、Slave動作のI2Cデバイスなら細かいところはライブラリまかせにすれば、それほど深みにはまらずに済む。

I2Cでよく参考にしているのはトラ技の2014年10月号の「2線シリアル・インターフェースI2C詳解」という記事。



I2Cには通信速度によってStandard mode、Fast mode、その他より高速なモードがある。

Standard modeはクロックが100kHzでFast modeはクロックが400kHzだ。

SSD1306のデータシートによると、

Symbol Parameter Min Typ Max Unit
tcycle Clock Cycle Time 2.5 - - us

となっていて、2.5nsの逆数は400kHzなのでFast Modeでも動作できそうだ。

U8glibをI2CのFast Modeで動作させるには

U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_FAST); // I2C / TWI

と、コンストラクタのオプションに「U8G_I2C_OPT_FAST」を指定してやればFast Mode(400kHz駆動)で動作する。

Normal ModeとFast Modeの動作速度比較


U8glibには「FPS」という書き換え速度を測定するexampleがあるので比較してみた。

Test Normal Fast Ratio
draw clip test 15.3 34.9 2.281045752
clear screen 9.8 14.0 1.428571429
draw @ 10.7 17.5 1.635514019
draw pixel 7.2 9.8 1.361111111

クロック数の比率の4倍にはならないが、まあまあ高速化できると思う。

I2C通信のようす


Normal Mode (100kHz)

ch1:SDA ch2:SCL

SCLはマス目で読み取って100kHz。

Fast Mode (400kHz)

ch1:SDA ch2:SCL

SCLは400kHz。

Fast Modeでは波形がなまっているので、プルアップ抵抗の抵抗値を下げるとかなんかした方がいいかもしれない。

消費電流


電源のVCC側に10Ω(実測値9.9Ω)のシャント抵抗を入れて電圧をテスタで測定してみると、どちらも

30mV~130mV / 9.9Ω ≒ 3mA~13mA

バックライト付きのLCDよりすこし多いぐらいか。

aitendoのI2C接続のキャラクタLCDとのサイズ比較



いつも使っているaitendoのSPLC792-I2Cと比べると、面積比で1/2ぐらいだと思う。

サイズは小さいが、視認性はかなりよくキャラクタ表示の16桁×2ぐらいならOLEDの方がいいんではと思う。

特にコントラストと、角度をつけて斜めから見た時の視認性はかなりいいと思う。