2.5元だったはずがいつの間にか5元に値上げしたかと思ったらさらに8元になり仕舞に日本で300円で売られているi2c液晶を動かす


約2年前、ねむいさんはtaobaoでピン配置以外詳細不明のi2c液晶を超破格値の
2.5元で購入しておりました
。その後なぜか急に8元に値上げしやがっておりましたが
私は破格かつ超円高だったのを活用して30個くらいガメて以来殆ど動作させず
そのままで放置。

が、

2014年の春、aitendoさんもこの液晶に漸く目をつけたようで一つ当たり
300円で販売しています。
さすが大陸店、阿漕っスね
このまま腐らせるのもなんなので誰かがこれを使って面白い物を作ってもらえる
ようにとの願いを込めて込めて私の当時の解析結果を公開したいと思います。




●これはなんだ

これは今となってはごく一般的なドットマトリクス形式のモノクロ液晶です。
インターフェースはI2Cのみとなっています。
プラ製の外枠はLEDをつけるくぼみのような意味深なものも見受けられますが
あまり気にしてません。

●だからこれはなんだ

なんなんでしょうねこれ…粘着テープ等でべったりつけられてるわけではないので
簡単に取り去ることができます。中華液晶は謎が多いです。


●マイコンとどうつなげればいいのか?

データシートに提示されているのはピン配置のみ…ほんっとこれだけです。
しかしその情報だけでも十分解析が可能です。


ここで閑話休題、I2Cというインターフェースについてですが…
ひとまず、I2Cの規格はNxPのサイトにPDFにて公開されていますのでしっかり確認し
ておきましょう。後述しますが最初はGPIOのエミュレーションの方が動作の把握が
しやすいかと思います。いずれの動作においてもオープンドレインで動作させるのは
変わらないため、SDA,SDLの各信号線にはプルアップ抵抗は絶対に必要です。

プルアップ抵抗算出式は Rp(kohm)>(Vdd-0.4)/3(mA) 
なので一般的な+3.3V系では
Rp > (3.3-0.4)/3 = 0.967(kohm)となりますが、
100pFの容量で400kBps通信時の所要立ち上がり時間300nSecを考慮すると
Rp < 300(nSec)/100(pF) = 3(kohm)

計算上は0.967kohm~3kohmが適切な抵抗値なはずですが、1kohm付近では
ドライブ能力が低いF**KなI2C液晶だとACKがLowに引いてくれないことが
あるので結局実測(オシロスコープの波形)を元に安全値を求める羽目に
なります…めどい
BolyminのキャラクタI2C液晶を動かした際の実測は以下のようになりました。

(MAX400kbps通信時)
  1kohm ×
  1.5kohm ○
  2.2kohm ○
  2.7kohm ○
  3.3kohm ○

というわけで400kBpsでI2Cデバイスを動作させる際はプルアップ抵抗は
2.7kohmが最も適しているかと思われます。

ですが速度的に潰しの効く100kbpsまで落とすなら4.7kohmで吊っとけば大抵は
問題はありません。…て言うわけで今回4.7kohmで行きます。



先ずは液晶と意識せず一つのI2Cデバイスと思い込んでI2CのACKが返ってくる
アドレスをサーチしてやりましょう。ほとんどのデバイスは8bit変数で示される
範囲内なので捜索数も少なくそんな時間がかかりません。
で、ヒットしたアドレスは0111_101xと0111_100xでした。ヒットした
アドレスを元にいろいろググってみるとI2Cで64x96のドットマトリクスに
適合したドライバICはUC1602Sが最も近いのではないかと推測しました。
データシートを見るとデータとコマンドのレジスタが上記アドレスのとおり
二つに分かれており推測が正しかったと分かります。


ここで改めてこのI2C液晶、"GG0906186FWNNC"を動かしせしめるための
準備を行います。ドットマトリクス液晶に必須のバイアス電圧を作り出す
ための電圧ドライバもUC1602Sには入っているので後はデータシートを参考に
VLCD用のキャパシタを外付けしてやればおしまいです。
具体的には上記回路図の要領でVLCDに0.33uFぶら下げればよいです。



●動かす!




使用するマイコン/基板は今流行りのSTM32-Nucleoボードを使用します。
初めて動作させる際は低速ですがデバッグがしやすいGPIOによるI2Cバスの
エミュレーション(ソフトI2C)が良いです。上でも注意しましたが制御は
すべてODです!あと裏ワザになりますが、STM32の場合はGPIOを出力に
設定をしていてもODで制御してREADの際はポートをHI(=疑似トライステート)
にしておけばターゲットデバイスから吐かれる信号レベルがわかりますので
入出力を切り替える手間が省けてオトクです★



…ていうかハードウエアI2C制御版のほうはF1/F4系と全く違ってて動かし方を見つけ
てる最中なので今しばらくお待ちください。

20230822追:
2023年現在はハードウエアI2Cでもバリバリ安定動作してます!!!!



UC1602Sのイニシャライズのための呪文もねむいさんが既に調査済ですので
ご安心ください。ご覧の通りに無事表示が出来ました。
TFT-LCDで使用したFONTX2ドライバを使用しております。


これだけでは使いどころが分かりづらいので同じI2C接続デジタル温度計STTS751
つなげて簡易の温度計をサクっと作成してみました。


特に危なげなく温度を表示することが出来ました♥
やっけつ配線ですがこういう出来合いボードは本当に便利ですね〜



今回のF0版Nucleo向けのソースコードはおきぱに置いておきます。圧縮ファイル内
のlibフォルダにxMSTNというフォルダがあり、ドットマトリクス液晶の制御のための
コードが集中しています。
今回制御したUC1602SはxMSTN/driversフォルダにuc1602.cとして抽象化して
ありますので別のマイコンやmbedに移植される方はご参考に。移植は容易に
できるはずです。

デフォルトではSTTS751の制御はIF文で切っていますのでSTTS751を
お持ちでない方もaitendoさんから購入したi2c液晶単体でも動作確認が
可能です。この液晶は動作電流がかなり小さく、低消費電力な工作にも
かなり使えるアイテムとなるでしょう。

I2Cネタは書きたいことが沢山有りすぎてまとまりがつかない状態です。
特に怪しい中華製I2Cキャラクタ液晶の電源投入時の変な動作とか回避の
ためのバスリカバリとかキリがないです。ですが今回みたいなひょんなことを
チャンスにして公開していきたいと思います。

Comments

Post a Comment








Go to top of page