LCDs

Inhalt

  • Benutzung eines 16×2 LC-Displays zur Textausgabe

Einführung

Auch wenn blinkende LEDs für die Signalisierung von Daten oder Zuständen oft ausreichen, so sind sie für die Vermittlung von komplexen Daten an einen User ungeeignet. Liquid Crystal Displays (LCDs) zur Darstellung von Text können Daten für den/die Benutzer/in in einer lesbaren Form vermitteln.

Dieser Artikel demonstriert die Anwendung eines 16×2 LCDs, die von vielen Herstellern günstig hergestellt werden. Dank eines standardisierten Interfaces (Hitachi HD44780) können es am Arduino mit der LiquidCrystal Library relativ leicht betrieben werden.

Das 16×2 LCD

16x2-Character-LCD

16×2 LC-Displays bestehen aus zwei Zeilen von jeweils 16 Pixel-Matrizen mit 5×7 Pixeln. Diese Auflösung erlaubt die Darstellung von allen Zeichen der ASCII-Tabelle und Sonderzeichen, die auch selber definiert werden können.

Anschluss an das Arduino

LCDs nach dem HD44780 Standard haben 16 Pins zur Spannungsversorgung und Kommunikation. Am Arduino werden sie wiefolgt angeschlossen:

lcd_16x2_Steckplatine

Die Leitungen an Pin 2 bis 5 des Arduinos dienen zur Datenübertragung, die Verbindungen an Pin 11 und 12 sind Steuerleitungen (vereinfacht gesagt teilen sie dem Controller des Displays mit wann welche Daten wohin geschrieben werden).

Die Stromversorgung erfolgt über den Displayanschluss 1 und 2 (ganz links).

Das Potentiometer an Displayansschluss 3 dient zur Anpassung des Kontrasts der LCD-Pixel. Manchmal kann man sich auch das Poti ersparen und den Pin direkt mit dem GND verbinden.

Displayanschluss 5 sollte ebenfalls mit GND verbunden werden. (Liegt dieser Anschluss auf LOW, dann kann schreibend auf das Display zugegriffen werden).

LED-Hintergrundlicht

Manche Displays haben auch eine LED Hintergrundbeleuchtung. Die interne LED wird dann mit einem Vorwiderstand über die Anschlüsse 15 (Spannung) und 16 (GND) angeschlossen.

Beispiel 1: Ansteuerung vom Arduino

Die LiquidCrystal-Bibliothek macht die Ansteuerung des Displays unkompliziert.

Code-Analyse

Das LCD-Objekt muss zunächst als Bibliothek eingebunden ( #include <LiquidCrystal.h> ) und initialisiert werden ( LiquidCrystal lcd(12, 11, 5, 4, 3, 2);), wobei die Parameter die Anschluss-Pins des Displays am Arduino entsprechen.

Über einen Cursor wird die aktuell zu beschreibende Position am Display festgelegt ( lcd.setCursor(0, 1) ), wobei Spalten und Zeilen mit 0 zu zählen begonnen werden.

lcd.print()  gibt dann ein oder mehrere Zeichen aus, wobei der Cursor automatisch um eine Spalte weiter geschoben wird.

Beispiel 2: Ausgabe von eigenen Zeichen

Neben den Zeichen der ASCII-Tabelle können auch eigene Zeichen entworfen werden. Zeichen können hierbei in der 5×7 Pixelmatrix designed und müssen dann als Array von Bytes abgelegt werden. Eine große Hilfe hierfür ist die Online-Applikation Custom Character Creator, bei der die Pixel per Mausklick gesetzt werden können.

smiley

Anmerkung: In diesem Array von Bytes werden die einzelnen Bytes in binär-Notation angelegt. Diese erkennt man daran, dass den Zahlen immer ein 0b  vorangestellt wird. Das Array besteht aus 7 Elementen, wobei die binären 1 immer für ein gesetztes Pixel, 0 für ein nicht gesetztes Pixel stehen.

Um ein solches Zeichen anwenden zu können ist es notwendig, dieses im lcd -Objekt anzulegen (bevor die Kommunikation mit lcd.begin()  begonnen wird). Dieser Befehl speichert das neue Zeichen an den internen Speicherplatz mit Index 0:

Mit dem Aufruf von folgendem Befehl kann dieses Zeichen nun am LCD geschrieben werden:

Anmerkung: Vor dem Index muss ein Typecast auf den Type uint8_t  durchgeführt werden (Dieser Variablentyp entspricht einer unsigned int  mit einer Größe von einem Byte). Der Grund hierfür ist hier nachlesbar.

Der folgende Beispielcode ist von der Seite des Custom Character Creator kopiert.

 

Aufgabe

  • Erweitern Sie das Beispiel aus Sensoren-1 um ein LCD-Display. Auf diesem sollen die aktuell gemessenen Spannungswerte des LDRs mit einem Besschreibungstext ausgegeben werden.
  • Ab einem gewissen Schwellwert soll das LCD zu blinken anfangen (um z.B. zu signalisieren, dass ein kritischer Wert überschritten wurde). Hierfür eigenen sich die Funktionen lcd.noDisplay()  und lcd.display()

Die Referenz der Bibliothek enthält möglicherweise weitere interessante Informationen.

Weiterführende Links

  • https://www.arduino.cc/en/Tutorial/LiquidCrystalDisplay
  • Aufbau des 16×2 LCDs: http://www.engineersgarage.com/insight/how-lcd-works
  • https://omerk.github.io/lcdchargen/

2 Gedanken zu „LCDs“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.