HD44780 LCDモジュールのパワーアップ初期化


10

HD44780クローンLCDモジュールKS0066Uを使用しています。モジュールの電源を入れ直したとき(オン->オフ->オン)を除いて、すべてがモジュールで問題なく動作します。何らかの理由で、電源の非常に短い中断により、ディスプレイモジュールが2ラインLCDディスプレイではなく1ラインLCDとして不適切に初期化されます。この動作の原因は何ですか?ソフトウェアでそれを防ぐ方法はありますか?

編集:私は8ビットモードではなく4ビットモードでディスプレイコントローラーを使用しています。


あなたの質問に賛成投票する価値があるとは誰も思っていなかったようです。
Kortuk

一部のHD44780クローンのデータシートは、かなり不十分に書かれています。私の目標は、それらを初期化するための適切な方法が何であるかについて話し合うことでした。たぶん、私が4ビットモードでの使用に問題があったのは私だけです。
mjh2007

いいえ、4ビットモードで実行しているのと同じ問題が発生しています。シンプルなキャラクターLCDを最後にプログラミングしてから約15年になりますが、学校にいるときにデバッグするのが本当に大変だったことを覚えています。ただし、私はあなたのところまでは行きません-まだ1文字を表示できないので、初期化を正しく行うことさえできません。:)
デイブ

回答:


4

function setコマンドの上位4ビットニブルを2回送信するように、初期化コードを変更しました。その後、上位4ビットニブルを再送信し、その後に下位4ビットニブルを再送信しました。これは、上位4ビットニブルを送信してから、関数セットコマンドの上位4ビットに続いて下位4ビットを送信できることを示すと思われるデータシートとは一致しません。

//時々動作する擬似コード
port = 0x20;
e = 1; e = 0;
port = 0x20;
e = 1; e = 0;
port = 0xC0;
e = 1; e = 0;

//常に動作する疑似コード
port = 0x20;
e = 1; e = 0;
e = 1; e = 0;
port = 0x20;
e = 1; e = 0;
port = 0xC0;
e = 1; e = 0;


2

私の推測では、初期化シーケンスに必要な遅延がないと思います。コマンドを送信しようとしたときにディスプレイがビジーの場合、そのコマンドは無視されます。手順を開始するときに、ディスプレイが4ビットモードであり、コマンドの前半として「0000」が入力されている場合、「0011」を入力すると、コマンド全体が「00000011」と表示されます。 、これにより、ディスプレイが最大1.6msの間ビジー状態になります。

ちなみに、「0011」コマンドがディスプレイに送信されたときに、ディスプレイから見える8ビット全体がモード設定コマンドを形成するように、ディスプレイから下位データワイヤーを配線することができれば良いです。これは、使用しているディスプレイのタイプに適しています。これは、すでに使用されているディスプレイをリセットするときにディスプレイの不具合を回避するのに役立ちます(ディスプレイを定期的にリセットすることをお勧めします)自体)。


1

問題の回避策を見つけました:

LCDコントローラーを初期化/構成する前に、起動時に1000ミリ秒の遅延を追加しました。それは私にはかなりうまくいきました。

低い遅延(100、200ms)はうまく機能しませんでした。ただ注意:それは4ビットのデータバスでのみ起こりました。

幸運を!


0

コードに遅延を挿入すると、スイッチがオンになったときにLCDが起動時に初期化するのに十分な時間がかかります。最大数百ミリ秒。

LCD電源をマイクロコントローラに接続して、起動後1秒間LCDの電源を切ることもできます。


起動時にすでに100ミリ秒の遅延があります
mjh2007

次に、他の提案を試してください。ピンから直接LCD電源を制御することもできます。数mAを超えてはなりません。
Thomas O

本当に最大許容遅延はありますか?これらのLCDの主なものは、最小量を待つことだと思いましたが、タイミングを正確に取得できない場合は、安全に再生して、さらに長く待つことができます。
デイブ

@デイブ、「最大遅延」を誤解しているかもしれませんが、それは私がお勧めする賢明な遅延です。たとえば、数時間待つことは少し極端です...
Thomas O

笑!まあ私はそれがあなたの意味するところだと考えましたが、LCDをまだ初期化していないので、何かを見落とさないようにしたかったのです。私がポットをつかんで、ここで私を台無しにしているコントラストではないことを確認するべきかどうか疑問に思います。:)
デイブが

0

これがすべてに役立つかどうかはわかりませんが、ArduinoプロジェクトでKS0066Uをいじりました。こちらがリンクです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.