Ich verwende ein HD44780-Klon-LCD-Modul eines KS0066U. Auf dem Modul funktioniert alles in Ordnung, 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 nicht ordnungsgemäß als 1-Zeilen-LCD anstelle eines 2-Zeilen-LCD-Displays initialisiert wird. Was würde dieses Verhalten verursachen? Gibt es eine Möglichkeit, dies in der Software zu verhindern?
BEARBEITEN: Ich verwende den Display-Controller im 4-Bit-Modus und nicht im 8-Bit-Modus.
Antworten:
Ich habe meinen Initialisierungscode so geändert, dass er das obere 4-Bit-Halbbyte des Funktionssatzbefehls zweimal sendet. Anschließend ärgere ich mich über das obere 4-Bit-Nibble, gefolgt vom unteren 4-Bit-Nibble. Dies stimmt nicht mit dem Datenblatt überein, das darauf hinweist, dass Sie das obere 4-Bit-Halbbyte senden und dann den Funktionssatzbefehl oberes 4-Bit gefolgt von unterem 4-Bit senden können.
// Funktioniert manchmal Pseudo-Code
port = 0x20;
e = 1; e = 0;
Port = 0x20;
e = 1; e = 0;
port = 0xC0;
e = 1; e = 0;
// Funktioniert die ganze Zeit Pseudo-Code
port = 0x20;
e = 1; e = 0;
e = 1; e = 0;
Port = 0x20;
e = 1; e = 0;
port = 0xC0;
e = 1; e = 0;
quelle
Ich vermute, dass Ihnen eine notwendige Verzögerung in Ihrer Initialisierungssequenz fehlt. Wenn die Anzeige beim Versuch, einen Befehl zu senden, belegt ist, wird dieser Befehl ignoriert. Wenn sich die Anzeige zu Beginn Ihrer Prozedur im Vier-Bit-Modus befindet und gerade "0000" als erste Hälfte eines Befehls getaktet wurde, wird beim Anzeigen der Uhr "0011" der gesamte Befehl als "00000011" angezeigt. Dadurch ist das Display bis zu 1,6 ms lang besetzt.
Im Übrigen ist es gut, wenn möglich, die Datenleitungen niedriger Ordnung von der Anzeige so zu verdrahten, dass beim Senden eines "0011" -Befehls an die Anzeige die gesamten 8 Bits, die von der Anzeige gesehen werden, einen Modus-Set-Befehl bilden Dies ist korrekt für die Art der Anzeige, die Sie verwenden. Auf diese Weise können Sie Störungen beim Zurücksetzen eines bereits verwendeten Displays vermeiden (ein periodisches Zurücksetzen des Displays ist eine gute Idee, wenn dies problemlos möglich ist, da dadurch sichergestellt wird, dass das Display in einen schlechten Modus versetzt wird selbst).
quelle
Ich habe eine Problemumgehung für das Problem gefunden:
Ich habe beim Start eine Verzögerung von 1000 Milisekunden hinzugefügt, bevor ich den LCD-Controller initialisiert / konfiguriert habe. Es hat ziemlich gut für mich funktioniert.
Eine geringere Verzögerung (100, 200 ms) funktionierte nicht so gut. Nur eine Anmerkung: Es passierte nur im 4-Bit-Datenbus.
Viel Glück!
quelle
Wenn Sie eine Verzögerung in Ihren Code einfügen, damit das LCD beim Einschalten lang genug ist, um beim Start initialisiert zu werden. 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.
quelle
Ich bin mir nicht sicher, ob dies überhaupt hilft, aber ich habe mit dem KS0066U an einem Arduino-Projekt herumgespielt. Hier ist der Link .
quelle