作成日:2013年9月11日
最終更新日: 2013年9月12日

I2C接続のLCDディスプレイで文字欠落?

秋月て売ってるI2C接続の小型LCDディスプレイモジュール、AQM0802A-RN-GBW を使ってみました。その時のトラブルを。

引っ張れない?

このモジュールは3.3V駆動です。これを5VのArduinoと接続。I2Cなのでバスを+3.3Vにプルアップするだけで大丈夫なはずですが、ちょっと使ってみたかったので同じく秋月で売ってるI2Cレベル変換モジュール(M-05452)を経由してみました。

下の写真はLCDモジュールとI2Cレベル変換モジュール。どちらもマウントする高さをできるだけ低くしたかったため、付属の細ピンヘッダは樹脂部を部品面にして取り付けてます。


このレベル変換モジュール、各信号線が1kΩでプルアップされています。LCDディスプレイには10kΩのプルアップ抵抗が内蔵されているのでこれを使う事にして、レベル変換モジュールの3.3V側のプルアップ抵抗は切り離しました。5V側は1kΩでプルアップしたままです。

これでとりあえず動きましたが、たまに文字が欠落してしまいます。

ということで波形を調べてみると…

ACKの部分が中途半端な電圧になってました。

この画面はI2Cのアドレス(0x7C)をArduino側から送信した部分です。つまりACKはLCDディスプレイからの返信であり、正しく受信できたのであればLレベルに落とす必用があります。しかしその引っ張る能力が弱いらしく、完全にLレベルと言えるほどの電圧になっていません。

そこで、I2Cレベル変換モジュールにて5V側のプルアップ抵抗を切り離し、10kΩの抵抗を外付けしました。その結果の波形が以下。


まぁ、デジタル的には充分にLレベルと見なせる電圧まで下がりました。そして動作も全く誤動作を起こすことなく完璧に動きました。

ということで、このLCDディスプレイモジュールとこのI2Cレベル変換モジュールは、そのままでは相性が悪いです。引っ張る力が弱いようなのでプルアップ抵抗を大きめにする必用があるようです。

その後確認しましたが、Arduino側では標準のI2Cライブラリを使えばATMega内蔵のプルアップ抵抗(10kΩ)が有効になるようです(という事で、普通に外部で3.3Vにプルアップするだけで3.3Vデバイスに接続するのって、場合によっては3.3Vを越えてしまうのかな?)。しかしこれだけではSCL信号の立ち上がりが若干なまり気味でした。でも動作そのものは問題ありませんでした。とりあえず内蔵プルアップ抵抗だけでも問題ないかとも思いますが、ちょっと注意が必用かもしれません。

 



home | Elec top

inserted by FC2 system