5x7 Dot Matrix LC Displays und ihre Ansteuerung


Allgemeines zu LC Displays

LC Displays, oder auch LCD's (Liquid Crystal Displays) genannt, sind in der modernen Gerätetechnik nicht mehr wegzudenken. Sie sind oft die Schnittstelle zwischen Mensch und Elektronik und sind mittlerweile sowohl im Konsumgüter- als auch im Industriegüterbereich stark verbreitet. Da ich bereits einige Projekte mit LCD's realisiert habe, möchte ich an dieser Stelle die Ansteuerung von 5x7 Dot Matrix Displays erläutern. Natürlich kann ich nicht auf alle Einzelheiten eingehen, jedoch können stärker interessierte Leser im Internet bei der Firma Sharp oder bei der Firma Seiko mehr über diese Technologie erfahren. Anhand einer Microcontrollersteuerung werde ich die Besonderheiten der LCD's erklären, ohne das der Leser besondere Kenntnisse über Mikroprozessoren oder Displays benötigt.

Der allgemeine Aufbau von LC Displays

Am häufigsten kommen die Dot Matrix LC Displays zum Einsatz, die es in verschiedenen Konfigurationen gibt. Diese Displays können bereits von 4 Bit oder 8 Bit Microcontroller angesteuert werden und alphanumerische Zeichen ausgeben. Die Auflösung der einzelnen Buchstaben geschieht dabei in einer Punktmatrix, d. h., eine bestimmte Anzahl von Punkten für die Zeichenbreite und eine bestimmte Anzahl von Punkten für die Zeichenhöhe. Die Matrix 5x7 Dots hat sich hier im Laufe der Jahre durchgesetzt und ist bei den meisten Displays zum Standard geworden. Das einzelne Zeichen wird hier mit fünf Punkten in horizontaler und mit sieben Punkten in vertikaler Richtung aufgelöst. Gelegentlich findet man auch noch 5x10 Dot Matrix Displays im Einsatz. Die Anzahl der in einer Zeile darstellbaren Zeichen variiert ebenfalls. Von einem einzeiligen Display mit max. 16 Zeichen bis zu einem vierzeiligen Display mit max. 40 Zeichen können eingesetzt werden. Selbstverständlich gibt es nach oben hin kaum Grenzen, jedoch sind solch große LC Displays kaum finanzierbar. Im folgenden sind die wichtigsten Eigenschaften von LCD's aufgeführt:

  • Schnittstelle für einen 4 Bit oder 8 Bit Microcontroller

  • RAM für die darzustellenden Informationen

  • 80 x 8 Bits (80 Zeichen)

  • ROM für die Zeichenerstellung

  • 160 verschiedene 5x7 Dot Matrix Zeichen

  • 8 verschiedene frei programmierbare 5 x 7 Dot Matrix Zeichen

  • Befehlssatz mit wichtigen Steuerfunktionen

  • Interner Oszillator

Die Funktionsweise eines LC Displays

Die LCD Einheit empfängt einen Zeichencode (8 Bit pro Zeichen) von einem über den Bus angeschlossenen Microcontroller. Die Daten werden in einem Zeichen RAM abgespeichert (80 Byte DD RAM für 80 Zeichen) wo sie anschließend in ein 5x7 Dot Matrix Zeichen umgewandelt und auf dem LCD Bildschirm (Screen) dargestellt werden. Die LCD Einheit besitzt weiterhin einen ROM (Read Only Memory) für die Zeichenerstellung von 160 verschiedenen 5x7 Dot Matrix Zeichen. Ein RAM (Random Access Memory) ist bei der kundenspezifischen Zeichenerstellung behilflich, wobei acht frei programmierbare Zeichen definiert werden können, für den Fall, dass die 160 Standardzeichen nicht den gesamten Zeichensatz abdecken.

Für die passende Positionierung der Zeichen werden zusätzliche Informationen über den Datenbus vom Microcontroller zur LCD Einheit gesendet und dort in das Befehlsregister IR (Instruction Register) geschrieben. Anschließend wird vom LCD ein Zeichencode generiert und in das Datenregister DR (Data Register) übertragen. Das Display ist nun in der Lage, das übertragene Zeichen an der angewiesenen Position auszugeben. Eine automatische Inkrementierung oder Dekrementierung der Position ist ebenfalls möglich, so dass der Controller einen kontinuierlichen Zeichenstrom übertragen kann, ohne zwischendurch entsprechende Positionssteuerzeichen zu senden. Mit dem Display/Cursor Shift Befehl können Zeichen sowohl von links nach rechts, als auch von rechts nach links eingefügt werden. Wird der Display Data RAM (DD RAM) oder der Character Generator RAM (CG RAM) vom Microcontroller angesteuert und belegt, so werden unbenutzte Bereiche des RAM für allgemeine Informationen reserviert. Die LCD's können entweder über einen Dual 4 Bit oder einen Single 8 Bit Bus angesteuert werden. Einfache Technologien wie 4 Bit Mikroprozessoren haben dadurch ebenfalls die Möglichkeit, Displays anzusteuern. In dem u. a. Schaltplanausschnitt wird das Display IC7 über einen 8 Bit Bus von einem Z86E40 Microcontroller IC4 von Zilog angesteuert.


Der Datenbus ist durch den Port P1 mit acht Datenleitungen realisiert. An dem Port P2 sind die Steuerleitungen E, R/W und RS angeschlossen. Über den Anschluß Vdd erhält die LCD Einheit die +5VDC Spannungsversorgung und Vss ist die Verbindung zur Maße. Über das Poti R35 kann am Eingang Vo der Zeichenkontrast justiert, und mit R47, R48, A und K die Helligkeit der Hintergrundbeleuchtung und damit letztendlich die Energieaufnahme gesteuert werden. Details der Datenbus- und Steuerleitungen können der nachfolgenden Tabelle entnommen werden.


Signal
Eingang/Ausgang
Verbindung
Funktion
RS
Eingang
Prozessor
Signal Registerauswahl
LOW: IR Register beim Schreiben
Busy Flag und Adress Counter beim Lesen
HIGH: Datenregister beim Lesen und Schreiben
R/W
Eingang
Prozessor
LOW: Schreiben
HIGH: Lesen
E
Eingang
Prozessor
Operation Enable Signal (Daten Lesen/Schreiben)
DB4-DB7
Eingang/Ausgang
Prozessor
Bidirektionaler Datenbus, DB7 kann
ebenfalls benutzt werden, um
das Busy Flag auszuwerten
DB0-DB3
Eingang/Ausgang
Prozessor
Bidirektionaler Datenbus, Diese Leitungen
werden nicht benutzt, wenn eine
4 Bit CPU angeschlossen ist
Vdd/Vss
-
Versorgung
Vdd: +5VDC
Vss: Maße
V0
-
Versorgung
Kontrasteinstellung
A
-
Versorgung
Anode der Hintergrundbeleuchtung
K
-
Versorgung
Kathode der Hintergrundbeleuchtung


Die Register eines LC Displays

Ein 5x7 Dot Matrix Display besitzt ein 8 Bit Befehlsregister (Instruction Register IR) und ein 8 Bit Datenregister (Data Register DR). Das IR speichert Befehle wie "Anzeige löschen" oder "Cursor bewegen". Außerdem werden dort Adressinformationen vom DD RAM und CG RAM abgelegt. Auf das IR kann nur schreibend zugegriffen werden. Das IR wird zur Zwischenspeicherung eingesetzt, bevor die Daten anschließend in den DD RAM oder CG RAM übertragen werden. Das DR wird ebenfalls zur Zwischenspeicherung während des Lesevorganges vom DD RAM oder CG RAM verwendet. Werden Adressinformationen in das IR geschrieben, gelangen die entsprechenden Daten vom DD RAM oder CG RAM in das Datenregister. Die Datenübertragung ist jeweils abgeschlossen, wenn der Prozessor die kompletten Informationen ausgelesen hat. Anschließend wird der Adresszeiger auf die nächste Position im Speicher gesetzt und weitere Daten in das DR übertragen. Der Zugriff auf die beiden Register wird durch das RS Signal realisiert.


RS Signal
R/W Signal
Funktion
LOW
LOW
Schreibe ins IR und Befehl ausführen (z.B. Display löschen)
LOW
HIGH
Lese Busy Flag (DB7) und Adresscounter (DB0-DB6)
HIGH
LOW
Schreibe ins DR und Befehl ausführen
HIGH
HIGH
Lese aus DR und Befehl ausführen


Die interne Struktur eines LC Displays

Im Laufe der Jahre hat sich der Controller HD44780 von Hitachi als ein weiterer Standard bei der Ansteuerung von LC Displays etabliert. Alle Displays, die auf diesen Standard basieren, können mit den hier beschriebenen Methoden problemlos angesteuert werden. Die Grafik zeigt die interne Struktur eines mit einem HD44780 Controller aufgebautem Display.

Der HD44780 teilt den 8 Bit Datenbus in interne zwei 8 Bit Datenbussysteme auf. Der Controller hat einen "On Board" Zeichengenerator in Form eines ROM um 192 ASCII Zeichen darstellen zu können. Die Grafik verdeutlicht, welche Zeichen angeboten werden. Dies kann von Hersteller zu Hersteller etwas variieren. Es wird jeweils eine 8 Bit Information bestehend aus dem upper und lower Nibble in das CG RAM übertragen.




Hier noch ein kleiner Tipp: Um die Zeichen in die Programmierumgebung einzufügen, kann man bei gedrückter [ALT] Taste den dezimalen Wert des Zeichens, angegeben durch die High und Low Order in der Grafik, eingeben und anschließend durch das Loslassen der [ALT] Taste entsprechend einfügen. Für das "ä" gilt also die Eingabe von [ALT] 0225 oder für die Leertaste [ALT] 0032 usw.


Die Steuerbefehle eines LC Displays

Eine Befehlsliste mit den Steuerbefehlen ist weiter unten angegeben. Jeder Befehl, der von einem Microcontroller zur LCD Einheit übertragen wird, hat eine max. Bearbeitungsdauer. Dies Zeit muss der Microcontroller warten, bis er jeweils den nächsten Befehl übertragen kann. Die meisten Displays haben Bearbeitungszeiten von 40us. Um einen Befehl zu senden sind lediglich die Signale RS, R/W und der Bus DB0 bis DB7 mit den entsprechenden Level (High/Low) zu setzen und anschließend das Signal E zu triggern. Durch die fallende Flanke wird der Befehl vom Displaycontroller akzeptiert und ausgeführt. Die min. Impulsbreite des Enablesignals liegt bei 230ns mit einem Mindestabstand zur nächsten Triggerung von 500ns.


Befehl
Code

RS-R/W-DB7-DB6-DB5-DB4-DB3-DB2-DB1-DB0

Beschreibung
Ausführzeit
Clear Display

0----0----0----0----0----0----0----0----0----1

Löscht das gesamte Display und setzt die DD RAM Adresse gleich 0 im Adress Counter
1,64ms
Return Home

0----0----0----0----0----0----0----0----1----X

Setzt die DD RAM Adresse gleich 0 im Adress Counter und den Display Cursor in die Grundposition. Der DD RAM Inhalt bleibt unverändert
1,64ms
Entry Mode Set

0----0----0----0----0----0----0----1---I/D---S

Bestimmt die Cursor Bewegungsrichtung und die Zeichenverschiebung. Diese Befehle werden während des Lesens und Schreibens ausgeführt
40us
Display On/Off

0----0----0----0----0----0----1----D----C----B

Ein- und Ausschalten des gesamten Displays (D), Cursor Aus oder An (C), blinken des Zeichens an der Cursor Position (B)
40us
Cursor or Display Shift

0----0----0----0----0----1---S/C---R/L---X---X

Bewegt den Cursor und Zeichen ohne den Inhalt des DD RAM zu verändern
40us
Function Set

0----0----0----0----1----DL----N----F----X----X

Bestimmt die Bus Datenlänge (DL), Anzahl der Display Zeilen (N), und Schriftart (F)
40us
Set CG RAM Adress

0----0----0----1---------------ACG---------------

Bestimmt die CG RAM Adresse. Die CG RAM Daten werden gesendet und empfangen nach dieser Einstellung
40us
Set DD RAM Adress

0----0----1--------------------ADD---------------

Bestimmt die DD RAM Adresse. Die DD RAM Daten werden gesendet und empfangen nach dieser Einstellung
40us
Read Busy Flag

0----1----BF-------------------AC----------------

Liest das Busy Flag (BF) um festzustellen, ob eine interne Operation ausgeführt wird und liest den Inhalt des Adress Counter (AC)
0us
Write Data to CG or DD RAM

1----0------------------------DATA---------------

Schreibt Daten in den DD oder CG RAM
40us
Read Data from CG or DD RAM

1----1------------------------DATA---------------

Liest Daten vom DD oder CG RAM
40us


Erläuterung:
I/D: 1 = Inkrement, 0 = Dekrement
S: 1 = Zeichenverschiebung im Display
S/C: 1 = Zeichenverschiebung, 0 = Cursorbewegung
R/L: 1 = Nach rechts schieben, 0 = Nach links schieben
DL: 1 = 8 Bit Interface, 0 = 4 Bit Interface
N: 1 = Zwei Zeilen, 0 = Eine Zeile (hängt vom Displaytyp ab !)
F: 1 = 5x10 Dot Feld, 5x7 Dot Feld
BF: 1 = Busy, 0 = Neue Befehle können empfangen werden
X: Keine Funktion (Don't Care)
ACG: CG RAM Adresse
ADD: DD RAM Adresse
AC: Adress Counter für DD und CG RAM


Die Initialisierung eines LC Displays

Nach dem Anlegen der Betriebsspannung muss eine Initialisierung durchgeführt werden. Die Initialisierungsprozedur unterscheidet sich etwas zwischen dem 4 Bit und dem 8 Bit Modus. Ich gehe in meinem Beispiel nur auf die 8 Bit Initialisierung ein. Ein Flüssigkristall wird beim Anlegen einer Gleichspannung verformt und dadurch möglicherweise permanent beschädigt. Daher ist es sehr wichtig, dass während der Bootphase die Logik des Displays zuerst mit 5VDC versorgt, die dann wiederum die Flüssigkristalle innerhalb des Displays mit einem impulsförmigen Spannungsverlauf versogt. Somit kann verhindert werden, dass die Kristalle sich verformen, eine Verfärbung einsetzt und Gasbläschen gebildet werden. Jeder der bereits dunkle Stellen in einem defekten Display gesehen hat, weiß nun woher diese stammen. Meine Initialisierungsroutine, die ich bereits bei meinem 50W E Gitarrenverstärker einsetze, ist in der nun folgenden Grafik angegeben. Das Assemblerprogramm ist dort ebenfalls hinterlegt, so dass alle Details über die Ansteuerung des 5x7 Dot Matrix Display mit 2x40 Zeichen nachgelesen werden können.



Die Schreibsequenz eines LC Displays

Bei der Ausgabe von Zeichen in einem Display muss man zwischen einzeiligen und mehrzeiligen Displays unterscheiden. In meinem Beispiel benutze ich ein zweizeiliges 40 Zeichen Display. In der folgenden Sequenz wird daher zunächst die erste und anschließend die zweite Zeile beschrieben.

Durch die Aufzeichnung mit dem Oszilloskop ist das Enable und das RS Signal zu erkennen. Sehr gut sieht man, wie das RS Signal auf Low geschaltet wird, wenn die Beschreibung der ersten Zeile abgeschlossen ist und die zweite Zeile beschrieben werden soll.

Zum Schluss bleibt mir nur noch zusagen, dass natürlich einige Erfahrungen notwendig ist, um gleich erfolgreich LC Displays steuern zu können. Ich muss zugestehen, dass dies eines meiner Lieblingskapitel ist, da hier sowohl Software als auch Hardware im Spiel ist und dadurch die Entwicklung bzw. das Experimentieren sich oft sehr spannend gestaltet. Letztendlich ist es als Entwickler oder Bastler immer wieder schön, etwas blinken zu sehen oder sogar seine geschriebenen Worte in einem Display lesen zu könne. Ich glaube, da kommt im Manne immer wieder das Spielkind durch - Weiterhin viel Spaß !




[ Zurück zur Startseite ]      © Thomas Otte