2016年8月5日金曜日

VGM12864-3SをI2Cで接続してみた。

前回、SPIで接続したVGM12864-3Sですが、折角の3バス対応なのでI2Cでも接続してみました。

引き続き使用するArduinoは5vなので、TA48M033Fを使用して3.3vへ降圧し、パーツ箱の中で眠っていたI2Cバス用双方向電圧レベル変換モジュール(PCA9306)を引っ張り出して使用しています。

レベル変換モジュールは、下図の様なものです。

配線は、

・VREF1 ← Arduino VCC(5v)
・SCL1 ← Arduino I2C SCL
・SDA1 ← Arduino I2C SDA
・VPU 入力なし

・VREF2 ← TA48M033F VCC(3.3v)
・SCL1 → VGM12864-3S SCK
・SDA1 → VGM12864-3S SDI
・GND ← Arduino GND

となります。
簡単に言えば、VREFに変換元電圧、変換先電圧を入力すれば、それぞれのI2Cを信号を指定電圧に変換して出力してくれる便利なものなわけです。

これから先は、VGM12864-3Sの配線をしていきます。

ここで使用するのは、正面中央上部のPIN(VCC、GND、RES、SCK、SDI、BS1、BS2)の7つとなります。(SCK、SDIは既に上記で解説済みとします。)


まずは、バスタイプをI2Cに指定する必要が有ります。
前回に記載したものを抜粋すると以下の様に配線する事でI2Cとなります。

Bus TypeBS1BS2有効となるPIN(MCU)
I2CVCCGNDSCK(SCL), SDI(SDA), A0(SA0), RES(RES#)

VCC、BS1は、TA48M033F VCC(3.3v)と接続、GND、BS2はArduino GNDと接続すればI2Cで起動する状態になります。

RESは、SPIで動作させた際はArduino RESETに接続して動作したのですが、今回は動作しなかったのでTA48M033F VCC(3.3v)に接続しています。試していませんがSPIの場合も同様で動くかと思います。

A0(SA0)は、スレーブアドレス選択のためSA0として機能するようですが、ここではI2Cの通信は単一スレーブなので必要ありません。

以上で配線は完了です。

表示を実行させるのは、前回同様にU8glibを使用しています。

SPI時にアンコメントした箇所をコメントアウトして下記の箇所をアンコメントすれば動作が確認出来るかと思います。
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI

で、次回が本題となるのですが、マルツでついつい購入してしまった160×128 RGB26万色 OLEDディスプレイ +3.3V【BL160128ACRNHn$】を動かしてみたいと思います。

このBL160128Aですが、カラーOLEDとしては安かったので衝動買いしてしまったものの、解説はペラ一枚のみ、私もOLEDを使った事がない上にFPC端子のままで、変換はマルツで取り扱っていないという状況で、お勉強を兼ねてVGM12864-3Sを購入検証してきたわけです。

まだ、動くか不明ですが、VGM12864-3Sで学んだ事を反映出来れば良いなと思っています。ちなみにU8glibではBL160128AのコントローラーSSD1353に対応していないので、その辺りも含めて色々調査中です。

0 件のコメント:

コメントを投稿