Arduino-Grundlagen: LCD ansteuern
Dieses Tutorial zeigt Ihnen die Grundlagen, um ein LCD mit Parallelbus (14 oder 16 Pins) an den Arduino anzuschließen, um darauf Text ausgeben zu können.
Das Liquid Crystal Display
Eine Flüssigkristallanzeige (englisch: Liquid Crystal Display oder kurz: LCD) besitzt kleine Segmente, in denen Flüssigkristalle im ungeordneten Zustand nahezu kein Licht passieren lassen. Legt man dagegen eine Spannung an, richten sie sich so aus, dass sie lichtdurchlässig werden. Die einzelnen Segmente können bliebig gestaltet werden. Für den Arduino werden vor allem Universal-LCD angeboten, die für die Darstellung von beliebigen Zeichen oder Symbolen eine Punktmatrix verwenden. Es gibt sie in verschiedenen Größen, die sich durch Anzahl der Zeichen pro Zeile und die Anzahl der Zeilen unterscheiden.
Da es aufgrund der ungeheuren Zahl schier unmöglich ist, jeden einzelnen Punkt des LCD separat anzusteuern, besitzen marktübliche LCD bereits eine Ansteuerungselektronik. Es gibt sie entweder mit parallelem Bus (in der Regel 14 oder 16 Anschlusspins) oder seriellem Bus (meist I²C).
Die Anschlussbelegung der Pins
Da fast alle Universal-LCD mit Parallelbus den HD44780-Chip oder einen vergleichbaren Nachbau zur Ansteuerung des Displays verwenden, hat sich für die Pinbelegungen ein Quasi-Standard herausgebildet. Bitte beachten Sie: in seltenen Fällen sind schon mal einzelne Pins vertauscht. Insbesondere bei der Stromversorgung kann es schon einmal vorkommen, dass +5 V und Masse vertauscht sind. Vorher also sicherheitshalber bei jedem LCD die Beschriftung der Pins überprüfen oder die Dokumentation konsultieren.
- Pin 1 (VSS) und Pin 2 (VDD) dienen der Stromversorgung des Displays und der Ansteuerungselektronik. Pin 1 ist dabei auf Masse zu legen, auf Pin 2 sind +5 V Versorgungsspannung zuzuführen.
- Pin 3 (VEE) ist ein analoger Eingang und dient der Kontrastregelung des Displays. Der Wert muss zwischen 0 V und +5 V liegen.
- Pin 4 (RS) ist ein digitaler Eingang und bestimmt, ob die zum Display übermittelten Datenbits als Befehl (LOW) oder Zeichendaten (HIGH) interpretiert werden sollen.
- Pin 5 (R/W) ist ein digitaler Eingang, der entscheidet, ob Daten auf dem Display geschrieben (LOW) oder vom Display eingelesen (HIGH) werden sollen. Es ist also tatsächlich möglich, den Inhalt des Displays wieder mit dem Arduino einzulesen. In der Praxis ist das aber eigentlich nie erforderlich. Daher legt man diesen Pin einfach dauerhaft auf Masse (LOW).
- Pin 6 (E) ist ein digitaler Eingang, der auf HIGH geschaltet werden muss, damit das Display die an den Datenpins anliegenden Bits ausliest.
- Pin 7 – Pin 14 (D0 – D7) sind die 8 Bits des bidirektionalen, paralellen Datenbusses. Da man ungern ganze 8 Ports des Arduinos nur für die Datenübertragung zum Display verbrauchen möchte, nutzt man die Fähigkeit der Ansteuerungselektronik, in den 4-Bit-Modus zu schalten. In diesem Fall werden nur die hinteren Pins 11 – 14 (D4 – D7) mit dem Arduino verbunden und die 8 Bit in zwei Schritten (jeweils 4 Bit) nacheinander übertragen. Die Pins 7 – 10 lässt man einfach offen.
- Pin 15 (A) und Pin 16 (K) existieren nur an LCD mit eingebauter Hintergrundbeleuchtung und dienen der Stromversorgung selbiger. An Pin 15 (Anode) kommt die Versorgungsspannung, Pin 16 (Kathode) wird auf Masse gelegt. Je nach LCD muss hier entweder ein Vorwiderstand für die im LCD verbaute LED vorgeschaltet werden oder aber der entsprechende Widerstand befindet sich bereits im LCD. Wenn man sich unsicher ist und kein Hinweis darauf beim LCD zu finden ist, kann man vorsichtshalber einen 220 Ω-Widerstand einbauen.
LCD-Ansteuerung mit analoger Kontrastregelung
- Universal-LCD mit Parallelbus (14 oder 16 Pins)
- (Widerstand 220 Ω)
- Trimmpotentiometer 10 kΩ
- Jumperkabel (18×)
Die relevaten Pins des LCD werden mit dem Arduino verbunden. In die Spannungszuführung der Hintergrundbeleuchtung (so denn überhaupt vorhanden) wurde vorsichtshalber der oben erwähnte Vorwiderstand eingesetzt. Der analoge Eingang der Kontrastregelung (VEE) wird mit dem Schleifkontakt eines Trimmpotentiometers verbunden, welches auf der einen Seite mit +5 V, auf der anderen Seite mit Masse (0 V) verbunden wird. Hierüber lässt sich der Kontrast manuell regeln.
Zur Ansteuerung des LCD wird die LiquidCrystal-Bibliothek von Adafruit genutzt. Der Beispielcode gibt einen Standardtext aus und zählt anschließend die Sekunden seit dem Start des Programms hoch.
LCD-Ansteuerung mit PWM-Kontrastregelung
- Universal-LCD mit Parallelbus (14 oder 16 Pins)
- (Widerstand 220 Ω)
- Jumperkabel (14×)
Im Normalfall stellt man den Kontrast des LCD einmalig ein und belässt ihn dann in dieser Einstellung. Damit ist das Trimmpotentiometer eigentlich überflüssig und nimmt nur Platz auf dem Breadboard weg. Einen passenden Widerstand (mit festem Wert) zu finden, kann sich aber unter Umständen als schwierig erweisen. Eine Alternative stellt die Kontrastregelung über einen PWM-Ausgang des Arduinos dar. Dazu wird auch der Pin 3 (VEE) an den Arduino angeschlossen und das Trimmpotentiometer kann entfallen. Dafür verliert man natürlich wiederum einen digitalen Ausgang. Man muss von Schaltung zu Schaltung abwägen, was einem lieber ist.
Im Gegensatz zum obigen Beispiel wird bei der Initialisierung mittels der Funktion analogWrite() per PWM der Kontrast des LCD auf einen festen Wert eingestellt. Der optimale Wert muss von Ihnen einmalig auf Ihr LCD angepasst werden.