HD44780クローンLCDモジュールKS0066Uを使用しています。モジュールの電源を入れ直したとき(オン->オフ->オン)を除いて、すべてがモジュールで問題なく動作します。何らかの理由で、電源の非常に短い中断により、ディスプレイモジュールが2ラインLCDディスプレイではなく1ラインLCDとして不適切に初期化されます。この動作の原因は何ですか?ソフトウェアでそれを防ぐ方法はありますか?
編集:私は8ビットモードではなく4ビットモードでディスプレイコントローラーを使用しています。
HD44780クローンLCDモジュールKS0066Uを使用しています。モジュールの電源を入れ直したとき(オン->オフ->オン)を除いて、すべてがモジュールで問題なく動作します。何らかの理由で、電源の非常に短い中断により、ディスプレイモジュールが2ラインLCDディスプレイではなく1ラインLCDとして不適切に初期化されます。この動作の原因は何ですか?ソフトウェアでそれを防ぐ方法はありますか?
編集:私は8ビットモードではなく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;
私の推測では、初期化シーケンスに必要な遅延がないと思います。コマンドを送信しようとしたときにディスプレイがビジーの場合、そのコマンドは無視されます。手順を開始するときに、ディスプレイが4ビットモードであり、コマンドの前半として「0000」が入力されている場合、「0011」を入力すると、コマンド全体が「00000011」と表示されます。 、これにより、ディスプレイが最大1.6msの間ビジー状態になります。
ちなみに、「0011」コマンドがディスプレイに送信されたときに、ディスプレイから見える8ビット全体がモード設定コマンドを形成するように、ディスプレイから下位データワイヤーを配線することができれば良いです。これは、使用しているディスプレイのタイプに適しています。これは、すでに使用されているディスプレイをリセットするときにディスプレイの不具合を回避するのに役立ちます(ディスプレイを定期的にリセットすることをお勧めします)自体)。
問題の回避策を見つけました:
LCDコントローラーを初期化/構成する前に、起動時に1000ミリ秒の遅延を追加しました。それは私にはかなりうまくいきました。
低い遅延(100、200ms)はうまく機能しませんでした。ただ注意:それは4ビットのデータバスでのみ起こりました。
幸運を!
コードに遅延を挿入すると、スイッチがオンになったときにLCDが起動時に初期化するのに十分な時間がかかります。最大数百ミリ秒。
LCD電源をマイクロコントローラに接続して、起動後1秒間LCDの電源を切ることもできます。
これがすべてに役立つかどうかはわかりませんが、ArduinoプロジェクトでKS0066Uをいじりました。こちらがリンクです。