液晶表示モジュールを4ビットモードで使ったときの空きピン処理

2005-08-10

△▽△▽ 随時工事しています △▽△▽
※トランジスタ技術2005年9月号に掲載されました。

NIFTYのFDEVICEで

 ずいぶん以前の話ですが、簡単なインターフェースで使える液晶表示器「SC1602」
に関し、NIFTYのフォーラム「FDEVICE」で疑問を投げかけたことがあります。
  (液晶SC1602に関しては「秋月電子通商」のカタログホームページhttp://akizukidenshi.com/
   と、液晶モジュールの製造メーカーである「サンライク」社のホームページhttp://www.lcd-modules.com.tw/
   を参照してください。サフィックスによりバックライト付きなどのバージョンがあります。)
さて、その書き込みの内容です。

- FDEVICE MES(20):ワンチップ・マイコンの会議室 4 02/05/31
217/217 GEB02643 下間憲行     液晶表示器SC1602のD0〜D3 (20) 02/05/31 10:38

 「トラ技」の記事などでよく使われている16文字×2行の液晶表示器「SC1602」で気になっていることがあります。

 4ビットモードで使う場合、これの「DB0〜3」の4本を「未使用ピンの処理」ということなのでしょう、直にGNDに落としている回路をみかけるのです。

 DB0〜7の8本は双方向のデータ線です。
4ビットモードではこのうちDB4〜7の4本を使い、DB0〜3は未使用となります。
 「R/W」信号がHのときに液晶からデータが出力されます。
しかし、液晶の「BUSYフラグをチェックせず自分でタイミングを作る」という使い方では、R/W信号をLに固定(GND接続)してしまい、マイコンからのデータを書き込むだけというふうにもできます。

 これはこれで良いのですが、DB0〜3のGND接続が気になってしかたないのです。
なかには、R/W信号は使いながら、DB0〜3をGNDにつないでいるという回路も見つかります。
これじゃ、DB0〜3が出力になったとき、GNDに短絡してしまうのじゃないかという、不安です。

 で、ちょっと調べてみました。
液晶に載ったコントローラIC(見た目は樹脂で封印されてますが)には日立とかセイコー電子のが使われているようです。

 これらのコントローラのスペックを見ますと、「R/W RS DB0〜7」の信号線にはプルアップ抵抗が入っていると記されているのです。
ただし「E」には入っておらず、MOSの入力がそのまま端子に出ています。
プルアップ抵抗の値は「数十kΩ」。
実測してもそのくらいの電流が流れます。

 ということは、安定動作のために必要なのは、

(1) 「E」信号はプルダウン。 Hレベルでストローブ有効だから。
(2) 4ビットモードでのDB0〜3はGNDにつながずオープンで。
(3) 積極的なプルアップ抵抗の付加は省ける。
(4) 待機時のR/W・RS信号は、マイコンからHレベルを出力。
(5) マイコン側のDBラインは入力にしておいてもOK。
   出力にしておくならHを出力。

でないでしょうか。
「(4)(5)」は消費電流をちょっとでも減らすという考えです。

※参考トラ技 (液晶表示器接続のサンプル:ざっと探しただけ)
 02年 1月p296
 01年 8月p251
 01年 1月p252
 00年10月p337
 00年 5月p299
 99年 5月p210
 98年 3月p365

 DB0〜3のGND接続、PICの使用記事に多いようなのです。
Webでも見つかります。
どこかに「4ビットモードでのDB0〜3はGND接続」という「原典」のようなものが存在するのでしょうか?

 日立のデータシート(HD44780U)で「4ビット動作ではこの4本はオープンに」と記されているのを見つけました。

・・・・・・・・・・・・・・・・・・・・下間(しもつま) jh3dbo◎jarl.com

 その後、気にはなりながら、自分の設計物は上の書き込みのような方針で回路を描いています。
とくに問題にも出会わず、今に至っています。
また、たぶんこれが「DB0〜3をGNDに」という「原典」じゃないものかという資料の発掘にも成功して
おりましたが、忘れておりました。
 ひょんなことから、後閑哲也さんのホームページ「電子工作の実験室」「PIC初心者用掲示板」
http://www.picfun.com/treebbs/1/index.html
にこのことを書き込みましたところ、反響がありました。

※初心者掲示板の過去ログはこちら
http://www.picfun.com/bbslog.html

手元にあった液晶モジュールでは


 表示中の液晶です。 16文字×2行のキャラクタータイプの液晶表示器です。
「SC1602BS*B-SA-GS-K」という形式名で、この写真はバックライトなしのものです。
バックライト付きのはバッテリチェッカで使っています。

 これが、その液晶表示器の裏。
右端のコネクタ部に近いところに抵抗がいくつか並んでいますが、これは液晶のバイアス電圧を決めるためのもので、話題にしていますプルアップ抵抗ではありません。
プルアップ抵抗はチップ内部の半導体で作られています。
左側の「A・K」というスルーホールにバックライトLEDがつながります。

 液晶を表示制御している途中、液晶モジュールを接続しているコネクタを抜くなどして異常事態を起こすと、このようになります。
初期状態は8ビットモードで、4ビットモードとは制御方法が異なります。
運転中に初期状態になっても、4ビットモードでのbusy/readyチェックは正常に進みますので、制御側で知るすべがありません。

 オープンにしたDB0〜DB3をGNDに短絡すると、およそ「0.1mA」の電流が流れます。
4ビット分で0.4mAという値になります。
この液晶モジュールの消費電流をスタティックな状態(表示文字はあるがマイコンからの
アクセスがない状態)で計ってみると「0.33mA」でした。
未使用端子をGNDにつなぐ使い方をすれば、消費電流がざっと倍になる勘定です。
これが多いか、少ないか・・・、いかがでしょうか。

 (異常事態が生じたときの電流は、下の方、オシロ波形を紹介しているところで
  計っていますのでご覧ください。)


これがDB0〜DB3をGNDに、という原典か?

PICマイコンで有名なマイクロチップ社から頂戴したデータブックCD−ROM。1996年版です。

この中のアプリケーションノート「AN587」に、4ビットモードで液晶表示モジュールを使ったときの回路例が紹介されていれています。

これのDB0〜DB3がGNDにつながっているのです。

これを丸写しして使った・・・というのが真相じゃないかと推理しています。


下の回路が上のCD-ROMで紹介されていたインターフェース回路です。
ドキュメントは「AN587A」、「1994年」となっています。
FIGURE 1B、1CともDB0〜DB3はGNDにつながっています。

現在、マイクロチップのホームページで参照できるアプリケーションノート
http://ww1.microchip.com/downloads/en/AppNotes/00587b.pdf
は、 下の図のように「587B」、「1997」となっています。
FIGURE 1Cの回路のGND接続が消されています。

DB0〜DB3をGNDに落としてるとどうなるの?


 すでに記していますが、DB0〜DB7は双方向の信号です。
AN587のようにR/Wを使う使用方法では液晶側がデータを出力するタイミングが存在します。
(busy/readyチェックなどで)
4ビットモードでイニシャルされた後は、DB0〜3はプルアップされたフローティングとなり
液晶が出力することはありません。
正常に動作しているときは良いのですが、何かの拍子、ノイズとか電源ドロップなどの異常が発生して
液晶モジュールに載ったコントローラICがリセットされてしまうと、コントローラの初期状態である8ビット
モードになってしまいます。
すると、液晶がデータを出力するタイミングで、DB0〜DB3に乗る出力がGNDに短絡されてしまいます。
やはりこれはまずいでしょう。

 液晶モジュール内部でプルアップされているのですから、積極的にこれを利用して悪いはずはありません。
内蔵抵抗の値が大きいと感じるなら、もっと小さな値の抵抗を外部につないでプルアップすべきで、
GND接続はよくありません。

 R/W=GNDにしてあれば、液晶がデータを出力することはないのでDB0〜DB3をGNDに落としていても
かまわないような気がしますが、やはり元は双方向の信号です。電源が不安定になったときの挙動など
考えると、わざわざGNDにつなぐことはないでしょう。
内蔵プルアップを利用してオープンで使えば解決できることです。


 SC1602は日立製のコントローラICと同じものが使われています。
入出力端子がどんな構造になっているか、日立のデータブックに載っていましたので紹介しておきます。
1997年のデーターブックから引用します。
 下表のDB0〜DB3のところに、「4ビット動作のとき、この4本は使われませんので、オープンにしてください」と明確に記されています。
入出力信号端子の等価回路です。
E:プルアップなし
RS、R/W:プルアップあり
DB0〜DB7:プルアップあり  となっています。


 DB0〜DB7、それにRS、R/Wには内蔵プルアップ抵抗が入っているのを頭に入れて回路を設計すべきでしょう。
外付け抵抗を付けるとしたら、プルアップでなくてはなりません。
抵抗でプルダウンすると、抵抗の値によっては、フローティング状態の信号レベルが中間値になってしまい、
内部回路に不要な電流が流れるかもしれません。

 それともうひとつ。忘れていけないのは「E」入力は裸のままだということです。
マイコンのI/Oポートを使って制御する場合、マイコンのポートが不安定になる電源投入時やリセット時など
のことを考えておかなくてはなりません。
EはHアクティブなので「抵抗でプルダウン」が定石でしょう。

信号波形

 4ビットモードで制御している様子をオシロスコープで観測してみました。
R/W制御あり、DB0〜DB3=オープンで使っています。電源電圧は5Vです。
未使用端子のDB0を「47kΩ」の抵抗でGNDにプルダウンしています。
DB0がフローティングになると、5V〜0Vの中間レベルになるので、どこからも駆動されて
いないことが目で見えます。
 液晶にデータを書き込んでからbusy/readyをチェックするという方法でタイミングをとって
います。
書き込み直後、busyが帰っている様子が見えています。


 上の図、下側の波形が4ビットモードから8ビットモードになったときの信号波形です。
液晶モジュール接続コネクタを一回抜いた後、また挿して初期化しました。
 DB7を見る限りハンドシェークはきちんと行われていますが、初期化が行われて
いませんので、液晶には何も表示されません。
 DB0の様子に注目してください。
4ビットモードではフローティングだったのが、8ビットモードになってデータの読み出しが
行われているのが見えています。
つまり、DB0〜DB3をGNDに落としていたら、液晶モジュールがHレベルを出したとき、
その出力電流がGNDに流れてしまいうわけです。
それほど強力なドライブ能力を持つわけではありませんので、チップを壊すことはないでしょうが、
やはり気持ちの悪いものです。

※双方向バスのフローティング状態を見るのに、この方法(プルアップ+プルダウン)が便利です。
 PICマイコン書き込みツールのトラブル対策でも役に立っています。
 覚えておいて悪くないテクニックかと思います。


 4ビットモードでは未使用のDB0〜DB3を8ビットモードでGNDに短絡したとき、どのくらいの電流が
流れるか計ってみました。
4ビットモードで制御しているつもりなのに何かの拍子に8ビットモードになってしまった、ということが
条件です。また、R/Wを制御して液晶からのデータを読み出すという制御も行います。
この点お間違いなく。
 電流プローブなんて持っていませんので、抵抗をDB0・GND間に入れて、Hレベルの落ち込み
具合から推定します。

 このように、100Ωの抵抗でおよそ0.4Vという値が読みとれますので、約4mAと推定できます。
空きピン4本分で16mAです。

※だから・・・・・

 液晶モジュールにを4ビットモードで使用する場合の私の考えは、
「R/Wを使いながらDB0〜3をGNDにつないでいるのは、まずいぞ」
「R/WだけでなくDB0〜DB3をいっしょにGNDに落としているのは気持ち悪いなぁ」
です。

 実際のところ、DB0〜DB3をGNDに落としておいても実害はないでしょう。
ただ・・・出力に切り替わるかもしれない信号を、なんの防備もなしに直接
GNDに落とす回路例を初心者に見せるのは・・・いかがなものでしょうか。

トラ技で見かけた回路

 CQ出版の「トランジスタ技術」に掲載されていた、この液晶(類似品を含む)を4ビットモードで使った回路を
ピックアップしてみました。
やはりPICマイコンでの使用例が多く見つかります。
しかし最近では新機種マイコンでの紹介例も目に付きます。

発見したトラ技 コメント マイコン R/W DB0〜DB3 参考回路図の引用
1998年3月 ワンチップ・マイコンと液晶ディスプレイで作るシリアル通信ライン・モニタの製作 佐藤節夫 365p 図3:シリアル通信ライン・モニタの回路図 液晶は日立のLM16L。コントローラは44780そのもの。
DB0〜3をオープンで使いR/Wで制御とまっとうな使用方法です。
PIC16C84 制御 オープン 9803
1998年12月 市販の赤外線リモコン送信器で任意の機器を制御する逆学習リモコンの製作 和泉清士 357p 図4:逆学習リモコンの回路図 AKI-80マイコンボードで制御。液晶はM1632。
「E」信号をプルダウンしているのが目に付きます。
AKI-80 GND GND 9812
1999年5月 分解能1cm,PICマイコンと超音波センサの応用 超音波距離計の製作 後閑哲也 210p 図3:製作した超音波距離計の回路図 筆者の後閑さんには申し訳ないですが、(私の意見として)この使用例が気になるのです。 PIC16F84 制御 GND 9905
1999年7月 はんだごて温度コントローラの製作 加納淳 333p 図10 マイコン部の回路図 16文字×1行の液晶を使っています。 PIC16F84 制御 オープン
2000年5月号 2.4時間〜680日間記録 自動校正機能付き電圧ロガーの製作 増田幸夫 299p 図1:電圧ロガーの回路 R/WとDB0〜DB3、両方GNDに落としてbusyチェックなしで制御しようという一番よく見かけるパターンです。上位バスをスイッチ入力としても兼用しています。 PIC16F84 GND GND 0005
2000年10月 シリアル通信でリモート・コントロールできるサーモスタット機能付きディジタル温度計の製作 若本章/堀尾浩之 337p 図5:ディジタル温度計の回路 DB0〜DB7を5.1kΩの抵抗でプルアップ。外付け抵抗によるプルアップの見本ですね。 PIC16F84 制御 プルアップ 0010
2001年8月 初心者にもスグに始められるオーソドックスな汎用ライン・トレース・ロボット組み立てキット 湯本兵吾 251p 図4:モータ・ドライブ・ボードの回路 OAKS16マイコンボードでの利用例。 OAKS16ボード GND GND 0108
2001年11月 パソコンを使わずにLine6社PODをMIDIで制御 ギター・アンプ・シミュレータ用ポケット・コントローラの製作 今野邦彦 328p 図2:本機の全回路図 ポートは余っているのに4ビットモードで使っています。 PIC16C873 制御 オープン 0111
2002年1月 自動車のスピード信号を利用して走行データを記録するドライブ・レコーダの製作 木ノ本隆 296p 図2:ドライブ・レコーダの回路図 ポートの数が足らない場合は、R/W=GNDでの制御も仕方ないかと思います。 PIC16F84 GND GND 0201
2002年11月 低電圧PICライタとWindowsXP対応PICライタの製作 末長泰光/小野寺康幸 130p 図13:低電圧プログラミング対応のTVチューナ回路 R/W=GNDでの使い方を見ていると、液晶のbusyチェック、やはり面倒なものかと感じてしまいます。 PIC16F873 GND GND 0211a
2002年11月 PIC16F628を使ったパルス幅カウンタの製作 吉田功 155p 図3:パルス幅測定器の全回路図 16F84だけでなく新しいチップが登場しました。 PIC16F628 GND GND 0211b
2002年11月 ハード・ディスク・ドライブ用のモバイル・ラックを使ったなんちゃって計測ラックの製作 幾島康夫 161p 図6:製作した周波数カウンタ・モジュールの回路図 バスを使って外部スイッチを入力しています。 PIC16C711 GND GND 0211c
2004年1月 簡易GP-IBコントローラの製作 井村裕 237p 図1簡易GP-IBコントローラの全回路図 20文字×4行の液晶を制御。R/Wを10kΩでプルアップ。
本文には「R/W線をポートにつないだがライト固定で制御」と記されています。
PIC16F877 制御 オープン -
2004年7月 本誌4月号付録マイコン基板とサーミスタを使った無調整多点温度計の製作 北野優 258p 図7:製作した無調整多点温度計の回路図 4月号付録のH8/3694F基板の応用例です。 H8/3694F 制御 GND 0407
2004年10月 新世紀マイコン教室<第5回>LCDモジュール・インターフェースの設計 北野優 260p 図5-2:LCDインターフェースの例 4月号付録のH8/3694F基板での使用例を4ビット、8ビットモードに分けて解説されています。気になるのは4ビットモードでの「DB0〜3は内部でプルアップされているのでオープンでも可だが,コントローラによってはプルアップが入っていないものもあるので"L"または"H"に固定する」というコメントです。ずいぶんあれこれ探しましたがHD44780互換のものではみなバスにプルアップが入っています。 H8/3694F 制御 GND 0410
2004年12月号 ワンチップ・マイコンにHTTPサーバ+CGI機能を実装!H8/3048Fを使ったネットワーク・ボードの製作 外丸順一 256p 図3:ネットワーク・ボードの回路図 制御ポートはマイコン側で10kΩの抵抗でプルアップ。 H8/3048F 制御 GND 0412
2005年2月 R8C/Tinyマイコン入門<第4回>多機能周波数カウンタの製作 タイニー・マスタ 233p 図4-13:多機能周波数カウンタの回路図 2005年3月号の連載の251pにも同様の使用例が載っています。しかしその後、筆者のタイニー・マスタさんは、自身のHPで紹介している回路からDB0〜3のGND接続を外されています。また、4月号281pの訂正で「DB0〜3はオープン」と記されています。 R8C/15 GND GND

オープン
0502
2005年2月 新世紀マイコン教室<第8回>ファン駆動回路の製作と回路のまとめ 北野優 224p 図8-5 ファン・コントローラの全回路図 R/W=制御、DB0〜3=オープンと思いきや・・・ありゃ、DB0〜3がマイコンのポートにつながって、DB4〜7がオープンになっています。単純なトレースミスでしょう。5月号に訂正記事が載りましたが、DB0〜3=GNDになっています。 H8/3694F 制御 オープン (?) 0502b
2005年4月号 H8マイコンを使った周波数特性測定器の製作 中林歩 257p 図3 本機の回路図 2004年4月号付録の基板で制御しています。 H8/3694F 制御 オープン


 これを見ますと、なぜか「R/W=GND 制御なし」で「DB0〜DB3オープン」という使用例がありません。
なぜでしょうね?

液晶モジュールを4ビットモードで使った回路例

Webで見かけた液晶モジュールの使用例を紹介します。


R/W=制御  DB0〜3=GND
http://speana-1.hp.infoseek.co.jp/lcd/lcd_4/lcd_4.htm
http://www.picfun.com/equipj30.html
http://www.toshu-ltd.co.jp/gaki/electronics/AVR/tech/LCD.html
http://homepage2.nifty.com/NAO_TECHNOHUT/02_PIC/02f_miniP/03/03_main.htm
http://www.hoijya.com/PIC/BORD-2.pdf
http://www.cek.ne.jp/~kunio.h/MP3_2.gif
http://hp.vector.co.jp/authors/VA037406/html/img/pulse_cc.png
http://hp.vector.co.jp/authors/VA015654/zbeya/electro/pic/16f84lcd.htm



R/W=GND  DB0〜3=GND
http://www.nmri.go.jp/eng/khirata/mcon/ch04_04.html
http://www.hal.ne.jp/tamasu/w_tac/w_tp1.html
http://web.maizuru-ct.ac.jp/control/machida/picavr/i2crtc/index.htm
http://www.saturn.dti.ne.jp/~khr3887/mv.html
http://www.nazo-fjt.com/elehobby/kousaku/pic-fc/ckt.htm
http://www.try-net.or.jp/~el_dream/timer/interval_1/itvalc.html
http://www.asahi-net.or.jp/~gt6s-sbic/electro/gm-count5/
http://sugi.sakura.ne.jp/denshi/030913a.html
http://www.ne.jp/asahi/ham/js1rsv/GPS/NavGen4.PDF
http://nonchansoft3.at.infoseek.co.jp/2ch1.htm
http://www5e.biglobe.ne.jp/~dai6ten/pctimer/
http://3.csx.jp/fulton/qt4-2/demo-lcd-1.htm



R/W=制御  DB0〜3=オープン
http://www.mpk.co.jp/ohka/samp006s.pdf (行方不明)
http://www.mkusunoki.net/z-gypsy/kousaku/avr/test_board2.pdf
http://einst.hp.infoseek.co.jp/watch/watch.html
http://www.8052.com/tutlcd2.phtml



R/W=GND  DB0〜3=オープン
http://www.geocities.co.jp/SiliconValley-Sunnyvale/4889/picmel/application_lcd232c/index.htm (行方不明)


ちょっとばかり意見を発表

webページ「SPECTRUM の館」、
http://speana-1.hp.infoseek.co.jp/lcd/lcd_4/lcd_4.htm
を読みますと、液晶表示モジュールの制御に関し、こんな注意書きが見つかります。

『なお、4ビットモードでは液晶表示器のDB0〜DB3端子は未使用となって
おりますが、必ずGNDに接続してください。
液晶表示器の初期化の段階では8ビットモードになっており、DB0〜DB3ピン
をLowレベルにしておきます。
4ビットモードでは液晶表示器のDB0〜DB3端子は必ずGNDに接続すること
(注)オープンにしていると、初期化できない場合があります。』

 残念ながら私の場合、この経験はありません。
オープンにしてして問題なく動作しています。
(4ビットモードで、R/W制御あり、DB0〜3オープン)

なぜ初期化に失敗したのか、その可能性について考えてみます。

(1) 液晶制御チップのタイミングは合っているか?
  E信号を基準としたセットアップタイム、ホールドタイムが規定どおり
  に守られていたのかどうか不明です。
  液晶モジュールに搭載されているコントローラの違いにより、微妙に
  制御仕様が異なっていることも考えなければなりません。

(2) 書き込み後の待ち時間は十分か?
  コントローラに初期化コマンドデータを書き込んだあと、
  busyをチェックするのではなく、タイマー待ちで次の書き込みを
  行います。この時間にミスはなかったのでしょうか?
  制御マイコンの品種により、ときにはクロックも変えるものです。
  古い制御プログラムを流用した場合、落とし穴があるかもしれません。

(3) 初期化に失敗したというハードはどのようなもの?
  webページ紹介されているようにPICを使っていたのか、
  それとも、他のマイコンだったのか不明です。

(4) 電源電圧はだいじょうぶ?
  液晶モジュールの定格によっては電圧が低くなると動かないものが
  あります。

(5) PICを高クロックで動作させた場合、出力ポートに対しbit SET/RESET
  を直接行うとポートがうまく変化してくれない場合があります。
  この点を考慮して制御されていたのかどうか不明です。

(6) もうひとつ。電源の立ち上がり具合も要注意でしょう。制御マイコンと
  液晶が同時にリセット解除ということはまずありません。
  液晶が初期化コマンドを受け付け可能状態になるより先に、マイコン側の
  初期化ルーチンが走り始めたら、初期化に失敗してしまいす。

 うまく制御できなかったハードウェアとプログラムを提示してもらわなければ
これ以上の追求は難しいのが実情です。
ただ、その気になれば初期化異常の再現はできるかと思いますが、それが
「SPECTRUM の館」で言われている初期化の失敗と同じかどうかは
わかりません。
不具合が発生した状況をお教え願えればいいのですが・・・。



 それと、もうひとつ。
さまざまな回路を拝見していて気になるのが「E」信号です。
液晶コントローラの主タイミングを決める信号なのですが、コントローラ
内部ではプルアップされていません。
 マイコンのI/Oポートにつないだ場合、電源がオンしてリセット解除後、
マイコンがI/Oポートを初期化するまでは、高インピーダンス状態で
不定になっています。
 4ビットモードでDB0〜3をGNDにしている回路でも、たいてい「E」信号
はほったらかしです。プルアップもプルダウンもなくポートにそのまま直結
という回路ばかりです。
「E」はハイアクティブなので、ポートの初期化が終わるまでLレベルを保持
ということで、プルダウン抵抗を入れるというのが定石かと思います。
実害はないでしょうが、電源オン直後に「E」が不安定だと、初期化の失敗に
絡むかもしれません。

※E信号についてもうちょっと考えてみました。

R/W=GNDだと、いつも書き込みモード。RSとDB4〜7はプルアップされるので
誤ってEが駆動されたとしてもキャラクターデータの書き込みになる。
→ 誤イニシャルの心配なし。だろう

R/W=制御だとプルアップでHになってデータの読み出し。
→ 実害なし。いやいや。DB0〜3をGNDに落としていると
  初期モード8bitなので、Eが駆動されデータラインからHが
  出ると短絡が発生。
  この面からも、R/W=制御、DB0〜3=GNDはまずいぞ〜ということ
  が言えるのではないでしょうか。

 ただ、E信号がフローティングになり中間レベルになったとき、液晶コントローラが
どんな挙動をするか、C-MOSの貫通電流が増えて電流消費がちょっと増えるだけ
なのか、こんなことを考えると、プルダウン抵抗を付けて安定させておきたいと
思うわけです。

 上の考察では、まっとうに考えられたI/Oポートの初期化が行われることを
想定して記述しました。
しかし液晶の制御ポートがそれぞれ別のポートであったり、深く考えずに
初期化が行われていた場合はどうでしょうか。
 R/W=GNDのとき、Eをイニシャルするより先にRSがLとなるようイニシャルしてし
まったということなら、データではなくコマンドが書き込まれるかもしれません。
 R/W=制御も同じで、Eの制御ポートより先にRS=L、R/W=Lに初期化している
場合は、コマンドが書き込まれる可能性が存在します。
データ線の状態がどうなっているかにもよりますが、不用意にEが有効になると、
初期化の順番によってはデータやコマンドが書き込まれる可能性があるわけです。
 液晶コントローラが何かの処理をしはじめると、busyが解除されるまで次の
命令を受け付けません。
タイミングによっては、ミスで出たE信号のせいで、後から与えた正規のE信号に
よる命令が実行されない可能性があるのです。
 ということで、リセット時にEを安定させるため、プルダウン抵抗を付けておきたい
わけです。



 最初に紹介しました後閑哲也さんのホームページ「電子工作の実験室」・
「PIC初心者用掲示板」
http://www.picfun.com/treebbs/1/index.html
では、「サージ対策でGNDにつなぐのだ〜」という書き込み(私への反論?)が
ありました。「ラッチアップ」という怖い言葉も出ておりました。
     ※初心者掲示板の過去ログを探してみてください。
       http://www.picfun.com/bbslog.html
       2005年1月19日の3321番からの記事です。
       一部、削除されてしまったコメントもありますが、
       どんな内容がやりとりされていたか、残っています。
その後、「Youngトラ技SPIRITS掲示板」
http://rdoginza.hp.infoseek.co.jp/yantora.html

でも話が出ておりました。

 4ビットモードで使う液晶モジュールのDB0〜3をGNDにつなぐというのは、
125や367、244、541などのスリーステートバッファの出力を、駆動されるこ
とはないからGNDにつないでもかまわないだろうと言うのと同じ意味ではな
いかと思っています。
普通こんなつなぎかたはしませんよね。
  (125や367の数字の意味が分からなければ、74シリーズという基本ゲート
   ICを調べてみてください。
   1970年台から使われている枯れたデバイスが、IC内部の製法が新しくなっ
   て現在に生き続けています。
   74HC125などとプリフィックスを付けて探すのが良いかもしれません。)
そう、こんなつなぎかたをした図をCADで描いたら、「エラーチェックでひっかかるぞ」
っというレポートも頂戴しています。


 サージ対策、とりわけ操作者に帯電した静電気放電による影響については、
以下のように考えています。

・機器に実装した液晶モジュールで人が触るのは液晶面あるいは液晶ガラスを
 保持している金属の外枠。
・コネクタ部分、できあがったものでは人が触る所にはないはず。
・静電気放電、どこに飛ぶか分からないものだが、金属枠の奥に位置するコネクタ
 に直接は飛ばないだろう。(箱に入れてパネルに付けた液晶、指を入れようにも金属枠
 がじゃまでコネクタは触れない・・・普通はこう作りますわな)
・放電エネルギの通過点としてコネクタで接続されたGND・電源線や信号線が考えら
 れるが、コネクタの先(マイコン側)でDB0〜3をGNDに落としていてたとしても、 
 DB0〜3を守れるわけではないし、DB0〜3だけを守る理由があるの?
・放電エネルギ、どこを通って逃げるか、DB0〜3以外ところを通ることもあるだろうし
 GNDや電源でなく、信号をつないでいるマイコンのポートから抜けることもあるだろう。
・ということで、サージ対策、DB0〜3だけのことを考えても無意味。
・マイコンポートとの接続部分を放置したまま、DB0〜3をGNDに落とせば大丈夫、なん
 てこと普通は言わない。・・・この意見はおかしいぞ・・・と思うのが普通。
・マイコンのポートと直接つなぐのは、C-MOSポートだとサージでラッチアップするかもし
 れないぞ。→そしたらTTLでバッファして・・・信号線に弱抵抗をシリーズに入れて・・・とか。 
 このように話が発展しなかった。

ひたすらDB0〜3=GNDのことばかり強調されていたので不思議な気がしました。

 それと「ラッチアップ」。皆さんほんとうにラッチアップしたICを見たことがありますか?
サージを受けたICがサイリスタのようになってしまい、電源を切るまで大電流が
流れ続けてアチアチになるという現象です。
体験しようとしてもなかなか起きない現象です。
サージによる誤動作、たとえばマイコン回路の暴走とか順序回路の異常は経験する
でしょうが、ICのラッチアップにはなかなか出会えません。
サージ・ノイズが原因で発生した誤動作をラッチアップと称しているのかとも思いますが、
いかがでしょうか?

ただ・・・昔の4000版シリーズのアナログスイッチ(4051など)では良く体験しました。
一度ラッチアップしたIC、「道」ができるのかラッチアップしやすくなります。