秋月の液晶表示器 ACM0802C-NLW-BBW-IIC、I2Cのプルアップ抵抗
いつもはパラレルインターフェースの液晶表示器を
使うんですが、今回初めて、I2Cインターフェースのを
手に入れてみました。
・秋月のACM0802C-NLW-BBW-IIC
2本でインターフェースできるんで、パラレル品よりラクチン。
ところが・・・
パラレルインターフェース品だと、Arduinoのライブラリ
「LiquidCrystal」を使えば悩むことはありません。
「みなさん、I2Cのだとどうしてるの?」と探しますと・・・
ズバリのがありません。
3.3Vでも5Vでも使える「AQM」シリーズのなら、
「I2CLiquidCrystal」や「LiquidCrystal_I2C」が使えそう
なんですが、ACM0802C-NLW-BBW-IICとは制御(初期化方法)
がちょい異なります。
※ACM0802C-NLW-BBW-IICのほうが昔からの
HD44780と同じで拡張されていない。
※アカンと判断したライブラリ・・・
時間待ちに「delay()」を使ってるもの。
delay()はタイマー0の割り込みが絡んでるんで。
そこで、「LiquidCrystal」を手直ししてライブラリ化。
あれこれして動くようになりました。
※そのうちまとめますんで。
「delayMicroseconds」 も絡みました。
試行錯誤の途中、I2Cの信号をオシロで見ていて
「ちょいとこれはどうしたもんだ」な事態に気が付きました。
ACM0802C-NLW-BBW-IICのI2Cライン、液晶基板上に「2.2kΩ」
のプルアップ抵抗が乗っています。
液晶制御ICのLレベル駆動能力がちょい不足しているようで、
2.2kだと十分に引っ張り切れていないのです。
液晶が出力する信号は、I2Cの「ACK」。
これがGNDレベルからちょっとだけ浮いてしまいます。
Arduino-UNOのATmega328PはACKとして認識してますが、
もうちょいLレベルを下げたいところ。
I2Cのスピードも遅いですし、10kΩくらいで良いのではと。
駆動レベルを確かめるのに、もうちょい負荷を重してみるとどうやと、
SDAラインに2.2kΩの抵抗を並列につなぐとこうなりました。
Arduinoが出力するLレベルも持ち上がってしまいました。
※busyフラグを読みたかった
ライブラリ「LiquidCrystal」は「R/W」信号をつないでも
液晶の「busyフラグ」は読んでくれません。
だからR/WはGND接続というのが定石。
busyをチェックできれば、タイマー待ちにせず、最速で動かす
ことができるんですが・・・
このACM0802C-NLW-BBW-IICもダメでした。
読めるかなと思って試してみましたが(コマンド表にはあるんで)、
バスが反応しませんでした。
※参考:ラジオペンチblog
・ArduinoでI2Cキャラクタ液晶を使う(その1) 基本動作確認
・ArduinoでI2Cキャラクタ液晶を使う(その2) ライブラリの選定
・ArduinoでI2Cキャラクタ液晶を使う(その3) 最終動作確認
※悩みどころ
・液晶のイニシャル処理に「I2Cの初期化:Wire.begin()」を入れてしまっても
良いものか。
メイン側の「setup()でしてね」のほうが、良いように思うが。
・AQMシリーズの拡張命令はどうしよう。
とりあえずほっとこうかと。
今回のACM0802のI2Cアドレスは0x3C~0x3F。
SA1、SA0の設定で4種選べる。
ACM1602になると0x50固定。
AQM1602だと0x3E。
※追記 SDA、SCLのプルアップ抵抗を10kΩにしたら、
ACK信号の浮き上がり、0.24Vほどに。
抵抗なしにしてATmegaの内蔵プルアップ抵抗にすると、
この抵抗値、40kΩくらい。
波形の鈍り具合から見て、これはちょいかわいそう。
※追記 待ち時間について
I2Cの「ACM0802」、コマンドやデータ書き込み後の
待ち時間、このような表になっています。
内部クロックが「540kHz」とずいぶん高速な
値が記されているのです。
対し、従来型のパラレル・インターフェースの
「ACM0802」ではこんな具合。
190kHz、270kHz、350kHzと3種類のクロック
での時間が記されています。
I2CのACM0802、実際のクロック周波数は?
っと調べてみました。
基板上、「RF」と記されて抵抗があります。
(値は91kΩ)これで内部クロック周波数を
決めているのだろうと、オシロのプローブを
当てると・・・「370kHz」くらいの三角波
が出てました。
ということは、上の表ではなく下表の350kHzあたり
を参考にして時間を決めるということになるかと
思います。
画面クリアだと1.5~2msちょいは待ちたい。
データだと40μs~50μsは必要かと。
※I2Cインターフェース液晶 8文字x2行文字表示ライブラリ
まとめておきました。
秋月のI2C液晶表示器 ACM0802C-NLW-BBW-IIC 文字表示ライブラリ
お試しください。
| 固定リンク
« Arduino-UNOでのdelayMicrosecondsの設定は16383までだ! | トップページ | 秋月のI2C液晶表示器 ACM0802C-NLW-BBW-IIC 文字表示ライブラリ »
「Arduino」カテゴリの記事
- 1/nカウント方式とDDS方式の2相パルス発生回路(2024.10.13)
- おっと。map関数の計算桁に注意(2024.10.06)
- DDS方式の2相パルス発生回路、周波数スキャン機能を付ける(2024.10.05)
- 1クロックでも速くしたい 割込を「ISR_NAKED」で(2024.09.30)
- 1クロックでも速くしたい DDS方式の2相パルス発生器(2024.09.27)
コメント