HD44780 LCD
Ansteuerung eines LCD Displays mit Hitachi HD44780 Controller
Für die Ausgabe von Informationen von einem Raspberry-Pi auf ein 16x4 Display sollte ein Pascal Programm erstellt werden. Dafür wurde der GPIO Anschluss verwendet. Die Datenübertragung sollte im 4bit Modus erfolgen. Eigentlich kein grosser Akt.Aber das Datenblatt (org. Hitachi) gab nicht genügend Informationen über die Initialisierung her. Das ist ja der eigentliche Knackpunkt. Gelingt zumindest irgendeine Form der Ausgabe, dann bekommt man den Rest schon irgendwie hingebastelt. So war eine stundenlange Stümperei ohne Ergebnis die Folge.
Die Rettung war ein Datenblatt für den HD44780 von Sharp. Dort werden einige Schritte zur Initialisierung detailiert beschrieben, die Hitachi irgendwie vergessen hat.
So funktionierts:
Für den 4bit Modus werden die Datenleitungen D4-D7 verwendet. D0-D3 bleiben offen.
a) EN: 1 (Enable)
b) D7: 0 - D6: 0 - D5: 1 - D4: 1
c) EN: 0 (mit fallender Flange liest der Controller die Zustände der Datenleitungen)
d) ein paar ms warten
Die Schritte a) bis d) noch 2 mal wiederholen. Die Sequenz muss also 3 mal durchlaufen werden. Damit wird der Controller sicher in den 8bit Modus geschaltet. Und zwar unabhängig davon, in welchem Zustand er sich befindet. Also auch wenn er sich z.B. im 4bit Modus befinden und auf ein 2tes Nibble warten sollte.
Anschliessend muss in den 4bit Modus geschalten werden:
a) EN: 1
b) D7: 0 - D6: 0 - D5: 1 - D4: 0
c) EN: 0
d) ein paar ms warten
Ab hier werden die 8bit Instruktionen als 2x4bit (Nibbles) gesendet.
Es folgt die Festlegung von Interface (4bit), Zeilen (1/2) und Font (5x7):
a) EN: 1
b) D7: 0 - D6: 0 - D5: 1 - D4: 0
c) EN: 0
d) EN: 1
e) D7: 1 - D6: 0 - D5: 0 - D4: 0
f) EN: 0
Danach Display ein/aus, Cursor ein/aus, blinkender Cursor ja/nein (z.B.):
Ablauf wie oben. Kurz: 00001000
Danach Display löschen:
Ablauf wie oben. Kurz: 00000001
Dann Display fix/fliessend, Cursor Addr. inkrementierend links/rechts:
Ablauf wie oben. Kurz: 00000110
Zum Schluss Display ein/aus, Cursor ein/aus, blinkender Cursor ja/nein (z.B.):
Ablauf wie oben. Kurz: 00001100
Nun ist das Display einsatzbereit.
Ich wollte ein Programm für die Kommandozeile unter Linux, das ich in Shellskripten verwenden kann. Mit folgenden Parametern kann das Display angesprochen werden:
-i: Initialisierung
-l: Disp. löschen
-l<N>: Zeile N löschen
-z<N><text>: Text in Zeile N
-d<L>: Debug L=1..4
Mehrere Zeilen-Parameter sind möglich.
Hier noch das Programmlisting.