LCD モジュールの信号レベル

最近,この手の LCD モジュールが安く売られています.

が,データシートが無いので,どう使えばいいのか,詳細が不明です. というわけで,現物をいじったり,資料をググったりして調べてみました.

HD44780

この手の LCD モジュールは,LCD コントローラに HD44780 (の互換チップ)が使用されているものがほとんどです. データシートの DC characterics の部分を見ると,妙なことに気がつきます.

〜 4.5V と 4.5V 〜 に分けて特性が書いてあるのですが,

  • 〜 4.5V は CMOS レベル
  • 4.5V 〜 は TTL レベル

で外部入出力部が動作しているように読めます.

ST7066U

HD44780 には互換チップがあって,ST7066U というやつがよく使われているようです. データシートを見ると,こちらは 5V 電源でも普通に CMOS レベルの入出力レベルです.

LCD モジュールのデータシート(?)

内部の IC のデータシートはさておき,手持ちの LCD モジュールのデータシートが欲しいので,ググってみると,それっぽいやつが見つかりました. 機構図面の外観も似ています. が,こいつがまた怪しげ.

外部入出力電圧が 5V TTL レベルっぽい?

LCD コントローラには先の ST7066U が使われているので CMOS レベルのはずなんだけどなぁ,とよく見ると,表の上部に「Vdd=3.0V±10%」とあります. ひょっとして

バックライトの LED のために電源は 5V としていて,LCD コントローラは 3.0 V で動作しているのか?

とか,期待してしまいます.

動かしてみる

LCD モジュールをマイコンにつないで動かしてみます. マイコンボードは STM32 Nucleo-F446RE を使いました.

STM32 の GPIO は 5V トレラントなので,LCD モジュールが 5V を吐いてもマイコン側が壊れることは無いはずです. マイコンの H レベル出力も,LCD モジュールのスレッショルド電圧はどうにか越えるでしょう.

というわけで,ごちょごちょとプログラムを書いて,文字の出力に成功.

FB_IMG_1591838920136.jpg

最初に表示させたのは,日本の伝統に則って,カタカナのイ.

おなじみのやつも表示させて

IMG_20200608_104357.jpg

ロジアナでバスの信号を見てみると

スクリーンショット_2020-06-08_11-01-16.png

初期化して文字を表示するまで 0.3 秒. お,遅い…

バスのウェイトに HAL が提供している delay 関数を使っているのだけど,こいつの分解能が 1 ms と粗いのが響いています. 内蔵タイマとかビジーループを使えば,もっと細かい分解能でタイミングを取れるけど,まぁ,いいか.

バスへのリードサイクルの発行

ここまでは,マイコン側がバスのすべての信号を駆動していて,LCD モジュール側からは信号は出力されていません. というわけで,リードサイクルを発行して,LCD モジュール側から信号を出力させてみます. 赤がマイコンから駆動される RW,黄色が LCD モジュールから駆動される D7 です.

IMG_20200609_175734.jpg

はい,残念賞.

普通に 5V レベルの信号が出力されていました. 5V 電源のモジュールが 5V レベルの信号を吐く,なんのヒネリもない結果でした.

何とどうつなぐか

最近のマイコンは GPIO が 3.3V レベルのものがほとんどなので,何も考えずにこの LCD モジュールをつなぐと,最悪壊れてしまいます.

というわけで,安全に使える使い方をいくつか考えてみました.

双方向通信

  • ○ Arduino UNO などの 5V レベルのマイコンを使う
  • ○ STM32 Nucleo などの 5V トレラントのマイコンで,GPIO をオープンドレインに設定して,バスを 5V にプルアップ
  • △ STM32 Nucleo などで,GPIO をプッシュプルで動作させる

    今回はこれ.まぁ動作はするけど信号レベルが合ってないので,ノイズには弱くなります

  • ○ レベル変換 IC を使ってマジメにレベル変換する

    双方向だと回路が複雑になるかな

片方向通信

LCD モジュール内の情報は参照せずに,一方的にコマンド・データを送りつけても動作させることはできます.

  • △ 何も考えずに直結.

    動作はして壊れることはないけど,やっぱり信号レベルが合ってないので,ノイズに弱くなります

  • ○ レベル変換 IC を使う

    74HCT244 あたりを1個使えばイケるかな

おまけ

newlib の printf 関数をリンクして,カウントダウン表示させてみたり

IMG_20200610_211245.jpg

「万」「円」の内蔵フォントはあるけど,「兆」のフォントは無かった

IMG_20200610_211251.jpg

そろそろボーナスのシーズンらしいので

IMG_20200610_215146.jpg

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-06-11 (木) 11:29:18 (504d)