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の方がいいんではと思う。
特にコントラストと、角度をつけて斜めから見た時の視認性はかなりいいと思う。
0 件のコメント:
コメントを投稿