Ich verwende ein HD44780-Clone-LCD-Modul, ein KS0066U. Auf dem Modul funktioniert alles einwandfrei, außer wenn ich das Gerät schnell aus- und wieder einschalte (Ein-> Aus-> Ein). Aus irgendeinem Grund führt eine sehr kurze Unterbrechung der Stromversorgung dazu, dass das Anzeigemodul fälschlicherweise als 1-zeiliges LCD statt als 2-zeiliges LCD-Display initialisiert wird. Was würde dieses Verhalten verursachen? Gibt es eine Möglichkeit, dies per Software zu verhindern?
BEARBEITEN: Ich verwende den Display-Controller im 4-Bit-Modus, nicht im 8-Bit-Modus.
Ich habe meinen Initialisierungscode so geändert, dass er das obere 4-Bit-Nibble des Funktionssatzbefehls zweimal sendet. Anschließend sende ich das obere 4-Bit-Nibble, gefolgt vom unteren 4-Bit-Nibble. Dies stimmt nicht mit dem Datenblatt überein, das darauf hinzudeuten scheint, dass Sie das obere 4-Bit-Nibble senden und dann den Funktionssatzbefehl obere 4-Bit gefolgt von unteren 4-Bit senden können.
// Funktioniert manchmal Pseudocode
port=0x20;
e=1; e=0;
port=0x20;
e=1; e=0;
port=0xC0;
e=1; e=0;
// Funktioniert immer Pseudocode
port=0x20;
e=1; e=0;
e=1; e=0;
port=0x20;
e=1; e=0;
port=0xC0;
e=1; e=0;
Ich vermute, dass Ihnen eine notwendige Verzögerung in Ihrer Initialisierungssequenz fehlt. Wenn das Display beschäftigt ist, wenn Sie versuchen, einen Befehl zu senden, wird dieser Befehl ignoriert. Wenn sich das Display zu Beginn Ihres Vorgangs im Vier-Bit-Modus befindet und gerade „0000“ als erste Hälfte eines Befehls eingegeben wurde, wird beim Eingeben von „0011“ auf dem Display der gesamte Befehl als „00000011“ angezeigt. , was dazu führt, dass das Display bis zu 1,6 ms beschäftigt ist.
Übrigens ist es gut, wenn möglich, die niederwertigen Datenleitungen von der Anzeige so zu verdrahten, dass, wenn ein "0011"-Befehl an die Anzeige gesendet wird, die gesamten 8 Bits, die von der Anzeige gesehen werden, einen Modus-Einstellbefehl bilden die für den von Ihnen verwendeten Anzeigetyp richtig ist. Dies hilft dabei, Anzeigestörungen zu vermeiden, wenn ein bereits verwendetes Display zurückgesetzt wird (das regelmäßige Zurücksetzen des Displays ist eine gute Idee, wenn es störungsfrei durchgeführt werden kann, da es sicherstellt, dass es behoben wird, wenn das Display irgendwie in einen schlechten Modus gerät selbst).
Ich habe einen Workaround für das Problem gefunden:
Ich habe beim Start eine Verzögerung von 1000 Millisekunden hinzugefügt, bevor der LCD-Controller initialisiert/konfiguriert wird. Es funktionierte ziemlich gut für mich.
Eine niedrigere Verzögerung (100, 200 ms) funktionierte nicht so gut. Nur eine Anmerkung: Es passierte nur im 4-Bit-Datenbus.
Viel Glück!
Durch Einfügen einer Verzögerung in Ihren Code, damit das LCD beim Einschalten lange genug Zeit hat, um beim Start zu initialisieren. Maximal einige hundert Millisekunden.
Sie können auch versuchen, die LCD-Stromversorgung an den Mikrocontroller anzuschließen und das LCD nach dem Start für eine Sekunde auszuschalten.
Ich bin mir nicht sicher, ob das überhaupt hilft, aber ich habe mit dem KS0066U in einem Arduino-Projekt herumgespielt. Hier ist der Link .
Kortuk
mjh2007
David