Es gibt einzeilige, zweizeilige und vierzeilige Displays mit 8 bis 40 Zeichen pro Zeile. Jedes Zeichen wird mit einer Matrix aus 5x8 Punkten dargestellt. Theoretisch gibt es auch die Möglichkeit einzeilige Displays mit Zeichen aus einer 5x11-Matrix zu bauen, solche Displays sind aber unüblich. (Die beiden Modes werden gelegentlich auch als 7x7 und 5x10 bezeichnet.)
Dieser Chip besitzt
Legt man die 5x8-Punktmatrix für jedes Symbol zu Grunde, so kann der Controller ein 2-zeiliges Display mit jeweils 8 Zeichen pro Zeile ansteuern. Der anzuzeigende Text wird dem internen Zeichenpuffer entnommen, der mit 80 Zeichen reichlich bemessen ist. Die beiden Zeilen stellen jeweils einen 8-Zeichen langen Ausschnitt aus dem Puffer da. Die Position dieser 'Fenster' kann eingestellt werden.
Falls nur eine Zeile des 8-Stellen langen Displays benutzt werden soll, kann man den Controller auf einzeilig schalten. Dann werden die Punktzeilen-Leitungen 9..16 abgeschaltet, und die Leitungen 1..8 mit einem Takt angesteuert, der einen verbesserten Kontrast ermöglicht. In der Praxis gibt es aber kaum 1x8-Displays.

Wird anstelle der 5x8-Matrix die Darstellung mit 5x11 Punkten gewählt, stehen nicht mehr genug Punkt-Zeilenleitungen für eine 2. Zeile zur Verfügung. Der Controller kann dann nur ein einzeiliges 8 Zeichen langes Display ansteuern.

Mit einem Trick lässt sich mit einem Controllerchip auch ein 1x16-Display (eine Zeile, 16 Stellen) aufbauen. Dabei werden einfach die beiden 8-stelligen Zeilen hintereinander angeordnet. Was Kosten spart verwirrt aber den Nutzer. Da der Controller von der exotischen Beschaltung nichts weiß, verwaltet er das Display wie ein 2x8-Display. Man muss ihn also als 2-zeilig initialisieren, und wenn man auf die Positionen 9 .. 16 schreiben will, so muss man in die 2. Zeile schreiben.
Der saubere Weg zu längeren Displays ist die Erweiterung des
Displays
mit zusätzlichen Display-Treiber-Schaltkreisen wie dem
HD44100
oder
dem SED1181. Ein Controllerchip kann mit mehrere Treiberchips
umgehen.
Jeder zusätzliche Treiber vom Typ HD44100 ergänzt den
Controller
um 40-Punktspalten-Leitungen. Das sind jeweils 8 Zeichen.
Dadurch lässt sich die Breite des 2-zeiligen Displays
schrittweise
bis auf 40 Zeichen ausbauen. Die Treiber besitzen keinen
Textpuffer,
sie
helfen lediglich dem Controller, zusätzliche Zeichen
anzuzeigen.
Da
der Controller nur einen 80 Zeichen großen Textpuffer
besitzt,
ist
bei 2x40 der Ausbau beendet.
Für ein 4x40-Displays benötigt man 2 Controller, die einzeln angesteuert werden müssen. Jeder Controller hat ein eigenes ENABLE-Pin am Interface, weshalb man an einem solchen Display einen Anschlusspin mehr benötigt. Um Verwechslungen zu vermeiden verwendet man oft gleich ein ganz anderes Steckerlayout. Anstelle des einreihigen Steckerfeldes (14..16 Kontakte) wird dann ein zweireihiges Steckerfeld verwendet (2x8 Kontakte).
Unproblematisch sind alle 2-zeiligen Displays (8..40 Zeichen pro Zeile) und alle 4-zeiligen Displays mit einer Zeilenlänge über 20 Zeichen.
Kritisch sind aber alle 1-zeiligen Displays (8..40 Zeichen) sowie
4-zeilige
Displays mit bis zu 20 Zeichen pro Zeile.

| Für Displaylängen über 8 Zeichen pro Zeile
benötigt
man normalerweise zusätzliche Displaytreiber (HD44100).
Um diese
Kosten
zu sparen, werden oft einfach die beiden Zeilen eines 2x8
Displays
mechanisch
hintereinander angeordnet (8+8-Modul). Der Controller
weiß davon
nichts, und behandelt die vordere und die hintere
Displayhälfte
wie
zwei getrennte Zeilen. Deshalb muss der Controller auch
2-zeilig
initialisiert
werden.
Es gibt gelegentlich auch echte 1x16-Displays mit nur einer logischen Zeile. Diese sollten auch nur einzeilig initialisiert werden. Was für einen Typ man besitzt, stellt sich spätestens nach der Initialisierung heraus. Befindet sich auf der Displayrückseite aber nur ein Chip (der Controller HD44780) dann handelt es sich höchstwahrscheinlich um ein 8+8-Modul. Befindet sich dort aber noch ein zweiter Chip (ein Displaytreiber HD44100), dann arbeitet das Display einzeilig mit 16 Zeichen pro Zeile. |
![]() |
| Zusätzliche Stellen können unter Zuhilfenahme
von
Displaytreibern
angezeigt werden.
Im nebenstehenden Foto einer 2x16-Display-Rückseite erkennt man deutlich auf der rechten Seite den am Interface angeschlossenen Controller und links davon (unter dem Aufkleber versteckt) den zusätzlichen Displaytreiber für die zusätzlichen 8 Stellen (40 Punktspalten) beider Zeilen. Wieviel Displaytreiber bei welcher Zeilenlänge benötigt werden, hängt vom verwendeten Chip-Typ ab. Beim HD44100 werden für jeweils 8 zusätzliche Zeichen je ein Displaytreiber benötigt. 40-Zeichen benötigen also neben dem Controller noch 4 Displaytreiber HD44100. |
![]() |
Andere Treiberschaltkreise können mehr Spalten ansteuern. Im untenstehenden Foto ist die Platine eines 2x40 Displays zu sehen, das mit nur 2 moderneren zusätzlichen Spaltentreibern ausgestattet ist. Jeder dieser Treiber entspricht in der Funktion zwei kaskadierten HD44100.

Bei den im nachfolgenden Bild eingezeichneten Displaytreibern
HD44100
handelt es sich um einmal 1,5 Schaltkreise und einmal 2,5
Schaltkreise
- zusammen also 4 Schaltkreise. Der Übersichtlichkeit halber
wurden
sie als 2 Kästchen gezeichnet.

Beide Controller sind an den selben Interfacestecker angeschlossen (, der aber meist zweireihig ausgeführt ist). Jeder Controller hat auf dem Stecker seinen eigenen ENABLE-Pin, alle anderen Anschlüsse sind an beide Controller parallel angeschlossen.
Ist der Controller als einzeilig initialisiert worden,
dann
ist
der DDRAM ein geschlossenen Speicherbereich mit den Adressen 00h
bis
4Fh.
Ist der Controller zweizeilig initialisiert worden,
besteht
der DDRAM aus 2 getrennten je 40 Zeichen langen Bereichen. Der
DDRAM
für
die 1. Zeile hat die Adressen 00h bis 27h, der DDRAM für die
2.
Zeile
geht von 40h bis 67h
Der Inhalt des internen 80 Zeichen langen Textpuffer wird vom
Display
angezeigt. Da das Display oft kleiner als der Textpuffer ist, wird
oft
nur ein Ausschnitt des Puffers angezeigt. Dieser Ausschnitt ist im
Textpuffer
verschiebbar. Dazu dient der "Cursor/Display-Shift"-Befehl,
mit
dem
der
angezeigte
DDRAM-Ausschnitt
schrittweise
verschoben
werden
kann.
Nach
dem
Einschalten
des Displays ist das erste dargestellte Zeichen die DDRAM-Zelle
"0".
Im Folgenden geht es um die Zuordnung von Displaypositionen zu Adressen des Textpuffers ohne Berücksichtigung dieser möglichen Verschiebung.
Die nicht immer einleuchtenden Aufteilungen der internen Zeilen
des
Controlers auf die sichtbaren Zeilen des Displays führen zu
einer
Zuordnung der Speicheradressen des Textpuffers im Controller zu
den
angezeigten
Stellen, die für jedes Display anders ist.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40-47 |
|
|
|
rechte Hälfte |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- |
- |
00-27 |
40-67 |
2. Controller |
| Code |
0x00 |
0x01 |
0x02 |
0x03 |
0x04 |
0x05 |
0x06 |
0x07 |
0x08 |
0x09 |
0x0A |
0x0B |
0x0C |
0x0D |
0x0E |
0x0F |
| 5x8-Pixel |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
| 5x11-Pixel |
1 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
1 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
| Zeichen |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
| Adressen bei 5x8 |
0x00-0x07 |
0x08-0x0F |
0x10-0x17 |
0x18-0x1F |
0x20-0x27 |
0x28-0x2F |
0x30-0x37 |
0x38-0x3F |
| Adressen bei 5x11 |
0x00-0x0A |
0x10-0x1A | 0x20-0x2A | 0x30-0x3A | / |
/ |
/ |
/ |
| CGRAM-Adresse |
16 |
8 |
4 |
2 |
1 |
Byte
dezimal |
Byte
hexadezimal |
| 0x00 |
16+1 = 17 |
0x11 |
|||||
| 0x01 |
16+1 = 17 | 0x11 |
|||||
| 0x02 |
16+2+1 =
19 |
0x13 |
|||||
| 0x03 |
16+4+1 =
21 |
0x15 |
|||||
| 0x04 |
16+8+1 =
25 |
0x19 |
|||||
| 0x05 |
16+1 = 17 | 0x11 |
|||||
| 0x06 |
16+1 = 17 | 0x11 |
|||||
| 0x07 |
0 |
0x00 |
| Die 1- und 2-zeiligen Displays (sowie 4-zeilige Displays
mit
bis zu
20 Zeichen pro Zeile) besitzen einen Reihe von 14 oder
16
Lötkontakten,
bzw. eine einreihige Stiftleiste mit 14 oder 16 Kontakten.
Die
Kontakte
15 und 16 sind für den Anschluss der
Hintergrundbeleuchtung
(soweit
vorhanden). Hat ein hintergrundbeleuchtetes Display nur 14
Kontakte am
Verbinder, so sind die Beleuchtungsanschlüsse an einer
anderen
Stelle
des Displays zu finden. Die Pins 1 bis 14 sind in aller
Regel identisch
belegt belegt. (Eine Ausnahme scheinen Displays von Seiko zu
sein, wie
mir Peter J. mitteilte - danke.) Der einreihige Steckverbinder kann sowohl an der Oberseite wie auch an der Unterseite des Displays liegen. Das Pin 1 ist beschriftet, oft auch das letzte Pin. |
![]() |
| Manchmal findet sich auch ein zweireihiger 14- oder 16-poliger Steckverbinder. Die Nummerierung der Pins ist in der Regel auf der Platine angegeben, und geht auch aus nebenstehender Abbildung hervor. Die Funktionsbelegung der Pins ist identisch mit der Standardbelegung des einreihigen Verbinders. | ![]() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vierzeilige Displays mit mehr als 20 Zeichen pro Zeile besitzen zwei unabhängige Display-Controller. Einen für die ersten beiden Zeilen und einen für die unteren beiden Zeilen.
Als Anschluss wird auch der einreihige Anschluss verwendet
(wie bei kleineren Displays) wobei der zusätzliche Enable-Pin
zwischen
D0 und den ersten Enable-Pin eingefügt wird. Ich habe auch
schon
Displays
gesehen, die genau andersherum nummeriert waren. Man sollte immer
analysieren,
welches Pin mit den Masseflächen der Displayplatine verbunden
ist,
um das Vss-Pin zu identifizieren.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Manche Steckverbinder für solche Displays besitzt 2 Reihen
zu
je
8 Pins. Eine Reihe sind die Pins mit gerader Pinnummer, die andere
Reiche
die ungeraden. Auch hier dienen die Pins 15&16 dem Anschluss
der
LED-Hintergrundbeleuchtung (soweit vorhanden).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Die Dotmatrix-Displays werden mit einer Betriebsspannung
Vdd
von +5V (± 5%) betrieben. Der Vss-Pin ist der
Masseanschluss.
Die Stromaufnahme (ohne Beleuchtung) liegt meist unter 1 mA.
Maximalwerte
von 5 mA sind möglich.
Außerdem wird eine Spannung zur Einstellung des Displaykontrastes benötigt. Es gibt zwei unterschiedliche Displaysorten, die auch unterschiedliche Kontrast-Spannungen benötigen: Standard-Displays (Temperaturbereich: 0°C ...50°C) benötigen eine Konstrastspannung zwischen 0V und 1,5V. Großdisplays und Displays für hohe Umgebungstemperaturen (Temperaturbereich: -20°C ...70°C) benötigen aber oft eine Spannung von -2V ... -5V, was ihren Einsatz verkompliziert. Das nebenstehende Bild verdeutlicht den Anschluss des Displays und die Erzeugung der Kontrast-Spannung für Standard-Displays. Durch Änderung der Spannung lässt sich der Kontrast und der optimale Blickwinkel zum Display verändern. Der Kontrast des Displays ist temperaturabhängig. Wer das Display unter verschiedenen Temperaturen betreiben will (Sommer und Winter im Freien) sollte den Einstellwiderstand als von außen bedienbaren Regler gestalten. |
![]() |
![]() |
Zur Versorgung eines Displays mit erweitertem
Temperaturbereich
oder eines Großdisplays benötigt man eine
negative Spannung
von ein paar Volt,
die aber so gut wie nicht belastet wird (einige
Mikroampere). Nebenstehende Schaltung ist für diesen Zweck ausreichend. Sie basiert auf dem populären ICL7660 Schaltkreis für Ladungspumpen. |
| Das rechts stehende Foto zeigt diese Schaltung an einem
2x16-Display.
Mit dem Einstellwiderstand lässt sich die negative
Kontrastspannung,
und damit der Displaykontrast einstellen. Bei -5V ist das
Display gut
ablesbar.
Wenn man ein LCD-Display zu einem sehr günstigen Preis bekommt (z.B. bei einem Restpostenhändler), dann bemerkt man manchmal erst nach dem Kauf, dass man ein 'Hochtemperaturdisplay' erworben hat. Meist wird man erst stutzig, wenn das Display mit einer normalen Beschaltung nichts (aber auch gar nichts) anzeigt. Da die Displayhersteller die gleichen Leiterplatten einsetzen, wie für normale Displays, können nur Aufkleber auf dem Display eine Hochtemperausführung kennzeichnen. Oft befindet sich auf dem Controller oder Spaltentreiber ein Aufkleber der Art '240°HT2' zur Kennzeichnung der Hochtemperaturvariante. |
![]() |
Natürlich wird man naturgemäß versuchen, ein
Display
für normalen Temperaturbereich einzusetzen, da man sich dabei
die
Erzeugung einer zusätzlichen negativen Spannung erspart.
Allerdings
haben die 'Hochtemperatur-Displays' auch einen wesentlichen
Vorteil.
Bei
einer Kontrastspannung von -5V sind sie aus nahezu jedem
Blickwinkel
hervorragend
abzulesen (trifft jedenfalls auf die von mir getesteten Typen zu),
während
normale Displays je nach Kontrastspannung nur von schräg-oben
oder
von vorn oder von schräg-unten gut ablesbar sind, wären
aus
anderen
Richtungen die Anzeige unscharf wirkt oder ein pixelieger grauer
Hintergrund
sichtbar wird. So benötigen Geräte mit Normaldisplay in
aller
Regel einen von außen zugänglichen Kontrastregler. Wer
in
seinem
Gerät ohnehin eine negative Spannung erzeugen muss (z.B.
für
OPVs) sollte also dem Hochtemperaturdisplay den Vorzug geben.
ACHTUNG - Betrieb mit
abgesenkter
Betriebsspannung
Bei Normaltemperatur-Displays muss mit sinkender Betriebsspannung
(Vdd)
auch die Kontrastspannung (Vo) vermindert werden, um ein deutlich
lesbares Display zu erreichen. Schnell ist man da bei
Vo=0V. Will man das Display bei verringerter Betriebsspannung
betreiben, ist man versucht einfach eine negative Vo anzulegen.
bis zu
ca. -500mV funktioniert das auch, und man erhält einen
verbesserten Kontrast bei kleiner Betriebsspannung. Wird die
Kontrastspannung
aber noch negativer, dann setzt ein starker Stromfluss durch das
Vo-Pin
ein, der den Controller zerstören kann. Kontrastspannungen
von
unter -0,5V sind ausschließlich an Hochtemperatur-Display
zulässig!
Erfahrungsgemäß arbeiten die Controllerchips von
5V-Displays
auch noch bei nur 3V-Betriebsspannung stabil, das Limit für den Displayeinsatz bei
verminderter Vdd stellt in der Praxis die Kontrastspannung
dar.
Typische Hochtemperaturdisplays lassen sich mit Vdd=3V und Vo=-5V
betreiben.
Es gibt auch Module (sowohl Normal- wie auch Hochtemperaturdisplays), die für 3V Betriebsspannung (Vdd) ausgelegt sind. Diese unterscheiden sich durch die Bestückung mit einem anderen Widerstand (75 kOhm anstelle von 91 kOhm) für die Takterzeugung. Wird ein 3V-Display mit 5V betrieben, steigt die Frequenz seines internen Oszillators, im Extremfall funktioniert es nicht mehr, da der Arbeitstakt zu hoch ist. Wird umgekehrt ein 5V-Display mit nur 3V betrieben, so verringert sich sein Takt, und es arbeitet langsamer als im Datenblatt angegeben. Das ist zu beachten, wenn man dem Display Befehle übermittelt, und ihm dann eine feste Zeit für die Befehlsabarbeitung zubilligt, anstatt das Busy-Flag abzufragen.
Man findet übrigens auch immer wieder preiswerte Displays, deren Oszillatoren mit einem 110 kOhm oder 120 kOhm-Widerstand bestückt sind. Die laufen bei 5V Betriebsspannung noch mit 2/3 der Normalgeschwindigkeit. Bei 3V erreichen sie höchstens noch halbe Normalgeschwindigkeit. Das ist für die meisten Anwendungen aber nicht tragisch.
Den Oszillatorwiderstand findet man, wenn man von hinten auf die Platine schaut normalerweise rechts unten neben dem Controller-Chip. Er ist normalerweise der einzige Widerstand auf der Platine mit mehr als 50 kOhm, und dadurch leicht zu identifizieren.
Die Hintergrundbeleuchtung eines LCD-Displays ist in der Regel mit LEDs aufgebaut (es gibt auch Modelle mit EL-Folie, die benötigen aber einen zusätzlichen Inverter zur 100V-Spannungserzeugung). Um diese LED-Hintergrundbeleuchtung zu betreiben, sind die LED-Pins über einen Vorwiderstand mit einer Spannungsquelle (in der Regel 5V) zu verbinden. Die Größe des Vorwiderstandes bestimmt sich aus dem zulässigen LED-Strom, sowie der Differenz zwischen Speisespannung und LED-Spannung.
Displays, deren LED-Anschlüsse als Pin15&16 am Hauptanschluss des Displays sitzen, haben manchmal (aber nicht immer !) schon einen internen Vorwiderstand, der es erlaubt, die LED-Anschlüsse direkt mit 5V zu verbinden. Befinden sich die LED-Anschlüsse aber nicht am Hauptanschlussfeld, sondern z.B. seitlich neben dem Display, dann besitzt das Display in der Regel keinen internen Vorwiderstand für die LED-Beleuchtung. Wenn man seinen Displaytyp nicht genau kennt, und das Platinenlayout nicht deuten kann, dann sollte man sicherheitshalber davon ausgehen, das kein interner Vorwiderstand existiert. Zum Betrieb der LED-Beleuchtung muss dann unbedingt ein externer Vorwiderstand verwendet werden.
Der Betrieb der LED-Beleuchtung ohne (oder mit zu kleinem) Vorwiderstand führt zur Zerstörung der LED-Beleuchtung!
LED-Strom und LED-Spannung kann man dem Datenblatt entnehmen. Die
meisten
weiß beleuchteten Displays haben eine LED-Spannung von
4,2V.
Üblich
sind aber auch 3,3V (blaue, weiße oder grüne Displays)
und
1,8V
(amber-farbige Displays). Typische LED-Ströme sind 20mA ..
200mA
(Großdisplays
schlucken auch schon mal bis zu 2A).
Stromfresser sind vor allem die Lightbox-Displays, bei denen LEDs
direkt
hinter dem LCD angeordnet sind. solche Displays sind dicker, haben
aber
auch eine hohe, gleichmäßige Helligkeit.
Lightbox-Displays
benötigen
oft 4,2V/200mA.
Stromsparer sind Displays, die hinter dem LCD einen
Lichtleitkörper
besitzen, der seitlich von LEDs angestrahlt wird. Diese Displays
sind
flacher
und begnügen sich oft schon mit 3,3V/20mA.
Wenn die genauen Parameter der LED-Beleuchtung unbekannt sind, dann speist man die LED eines normalen Displays (nicht amber !) über einen ca.80 Ohm Widerstand aus der 5V-Quelle, wodurch sich ein Strom von max. 20 mA einstellt. Dann kann man den Widerstand verkleinern, bis sich eine normale Displayhelligkeit einstellt. Nicht selten ergeben sich dann Werte um 10 Ohm.
Ergänzung von Horst:
Eine ... Ergänzung zur Beleuchtung. Ich
verwende eins dieser modernen blauen Displays mit weißer
Hintergrundbeleuchtung.
Dabei muss man mit dem Vorwiderstand sehr vorsichtig sein, die
auf der
Seite erwähnten 10 Ohm als wahrscheinlicher Zielwert
für 5V
Versorgungsspannung
führen sicher zur Zerstörung. In meinem Fall hat die
Beleuchtung
bei 20mA eine Durchflussspannung von 3.1V, bei 30mA (max.
zulässiger
Strom) 3.4V. Wenn man den Vorwiderstand
gefühlsmäßig
verkleinert,
landet man schnell im roten Bereich.
Wenn man mit 80 Ohm startet, ist man auch hier im sicheren
Bereich.
Verkleinerungen des Widerstandes darf man natürlich nur nach
einer
Strommessung machen und nicht nach Gefühl.
Die Enable Leitung schaltet das Interface ein (E=1). Nur wenn Enable auf High-Pegel liegt, lässt sich das Display ansprechen. Das erlaubt die Nutzung der anderen Leitungen für andere Zwecke (z.B. die Ansteuerung einer parallelgeschalteten Tastatur).
Die RS (Register-Select)-Leitung bestimmt, ob die übertragenen Daten als Zeichen in den Textpuffer (RS=1), oder als Befehl in ein Steuerregister (RS=0) geschrieben werden.
Mit der R/W (Read/Write) Leitung bestimmt man, ob Daten zum Display geschrieben (R/W=0) oder vom Display gelesen (R/W=1) werden sollen. Wer auf die Lesefunktion verzichten will, muss diese Leitung fest mit 0V (Vss) verbinden, da ein offener Anschluss vom Display auf high gezogen werden kann.
Im Moment der Low-High-Flanke von ENABLE liest das Dislplay die Werte von RS und R/W ein. Ist zu diesem Zeitpunkt R/W=0, dann liest das Display mit der folgenden High-Low-Flanke von ENABLE den Datenbus ein (Schreibzyklus). War aber R/W=1, dann legt das Display ein Datenword auf den Datenbus (Lese-Zyklus), solange bis die High-Low-Flanke von ENABLE das Interface wieder deaktiviert.
Schreiben zum Display
Die folgende Abbildung zeigt einen Schreibzugriff auf ein Display.
Das Display überwacht den Pegel von ENABLE.
Ändert
sich
dieser Pegel von Low nach High, dann fragt es die Leitungen RS
und
R/W
ab. Liegt zu diesem Zeitpunkt R/W auf Low, dann
weiß
das Display, dass ein Schreibzugriff erfolgt, und bereitet sich
darauf
vor, mit der High-Low Flanke von ENABLE die Daten vom
Datenbus (
DB0..DB7 ) einzulesen. Dazu muss das Display aber noch
wissen,
wohin diese Daten geschrieben werden sollen. Liegt RS auf
low,
so
werden die Daten als Kommando verstanden, und in ein
Steuerregister
geschrieben.
Liegt aber RS auf High, so handelt es sich um Daten, die
angezeigt
werden sollen, und in den Textpuffer (DDRAM) zu schreiben sind.
(oder
um
die Definition eines neuen Zeichens)
Um eine sichere Verarbeitung einzuhalten, sind Mindestzeitabstände zwischen dem Einstellen von RS und R/W sowie der ENABLE -Low-High-Flanke einzuhalten. Genauso muss der Datenbus um die High-Low-Flanke von Enable herum stabil sein, und RS und R/W dürfen erst nach ENABLE abgeschaltet werden. Diese Zeiten sind aber so kurz, dass man sie bei der Ansteuerung durch einen PIC ignorieren kann. Der Abstand zwischen zwei Befehlen, die zwei Signale Ändern ist groß genug.
Wenn mit EQU-Befehlen beschrieben wurde, an welchen Port-Pins des PIC die LCD-Steuerleitungen angeschlossen sind, und der LCD-Datenbus an PORTB liegt, dann kann eine Ausgabe wie folgt aussehen:
; alle verwendeten Pins
und
das
; ganze PORTB auf output
gestellt
; Enable ist low
BSF
RS
; Zeichen zur Anzeige
BCF
R_W
; schreiben
MOVFW
Daten
; Daten auf Datenbus
MOVWF
PORTB
;
BSF
Enable
; Interface ein
NOP
;
warten,
das
Display
Daten
hat
BCF
Enable
; Interface aus

Lesen vom Display
(Busy-Abfrage)
Wurde dem Display ein Datenwort übergeben, so muss das
Display
das Wort intern abspeichern, oder wenn es ein Kommando enthielt
(z.B.
Löschen
des Displays) dann muss es dieses Kommando ausführen. Dazu
benötigt
das Display Zeit, und während dieser Zeit kann es keine neuen
Kommandos
entgegennehmen. Bevor man also einen neuen Schreibzugriff macht,
sollte
man testen, ob das Display mit dem letzten Befehl schon fertig
oder
immer
noch beschäftigt (busy) ist.
Dazu kann man mit einem Lesezugriff auf das Display ein busy-Bit
abfragen.
Die folgende Abbildung zeigt einen Lesezugriff auf ein Display.
Das
Display überwacht den Pegel von ENABLE. Ändert
sich
dieser
Pegel von Low nach High, dann fragt es die Leitungen RS
und R/W
ab. Liegt zu diesem Zeitpunkt R/W auf High, dann
weiß
das Display, dass ein Lesezugriff erfolgt. Das Display muss
nun
das angeforderte Datenbyte unverzüglich auf den Datenbus (
DB0..DB7
) legen. Dazu muss das Display aber noch wissen, welche Daten
angefordert
wurden. Liegt RS auf low, so werden das Statusregister
ausgegeben.
Liegt aber RS auf High, so handelt wird ein Zeichen aus
dem
Textpuffer
(DDRAM) ausgegeben. Mit der High-Low Flanke von ENABLE
wird das
Interface (und insbesondere der Datenbus) wieder deaktiviert.
Wenn mit EQU-Befehlen
beschrieben
wurde, an welchen Port-Pins des PIC die LCD-Steuerleitungen
angeschlossen
sind, und der LCD-Datenbus an PORTB liegt, dann kann eine
Ausgabe wie
folgt
aussehen:
; alle verwendeten Pins
und
das
; ganze PORTB auf output
gestellt
; Enable ist low
;PortB auf input
BSF STATUS,
RP0
; auf Bank 1 umschalten
MOVLW B'11111111' ;
PortB
alle
input
MOVWF TRISB
BCF STATUS,
RP0
; auf Bank 0 zurückschalten
;Display abfragen
BCF
RS
; Statusregister lesen
BSF
R_W
; lesen
BSF
Enable
; Interface ein
NOP
;
warten
auf
Daten
MOVFW
PORTB
; Daten lesen
MOVWF
Daten
; Daten speichern
BCF
Enable
; Interface aus
;PortB wieder auf
output
BSF STATUS,
RP0
; auf Bank 1 umschalten
CLRF
TRISB
; PortB alle output
BCF STATUS,
RP0
; auf Bank 0 zurückschalten

Hat man das Steuerregister gelesen, so findet man das busy-Flag
im
MSB (D7) des gelesenen Datenwortes.Ist dieses Bit 1, dann ist der
Controller
noch beschäftigt, und kann keine weiteren Operationen
annehmen.
Man
fragt das busy-Flag solange ab, bis es 0 ist. Dann kann
wieder
zum
Display geschrieben werden.
Nebenstehendes Bild zeigt drei aufeinanderfolgende
Zugriffe
auf das
Display im 4-Bit Mode.
Ich arbeite prinzipiell mit dem 4-Bit-Interface. Beispiele für Schreib-und Lese-Routinen finden sich z.B.: |
![]() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
löscht das Display, Kursor auf Adresse 0, |
1,64 ms |
|
|
|
|
|
|
|
|
|
|
|
|
Kursor auf Adresse 0, Display-Shift entfernen, |
1,64 ms |
|
|
|
|
|
|
|
|
|
|
|
|
I/D: Kursor Laufrichtung, S: Shift ein/aus |
40 µs |
|
|
|
|
|
|
|
|
|
|
|
|
D: Display ein/aus C: Kursor ein/aus B: Blinkende Kursorposition ein/aus |
40 µs |
|
|
|
|
|
|
|
|
|
|
|
|
S/C: Display oder Kursor R/L: nach rechts oder links schieben |
40 µs |
|
|
|
|
|
|
|
|
|
|
|
|
DL: Interface 8-Bit/4-Bit lang N: ein-/zwei-zeilig F: 5x8/5x11 Darstellung |
40 µs |
|
|
|
|
|
|
CG RAM-Adresse einstellen | 40 µs | ||||||
|
|
|
|
|
DD RAM-Adresse einstellen | 40 µs | |||||||
|
|
|
|
|
busy-Flag und Adress-counter auslesen | 40 µs | |||||||
|
|
|
|
Daten zum Textpuffer oder CG RAM schreiben | 40 µs | ||||||||
|
|
|
|
Daten vom Textpuffer oder CG RAM lesen | 40 µs |
Display löschen
Eine Initialisierungsroutine sollte nicht nur das Display sicher aus diesem Zustand in den gewünschten Betriebsmode bringen, vielmehr sollte es das Display aus jedem beliebigen Zustand (auch einem 4-bit Interface-Mode) in den gewünschten Betriebsmode bringen. Schließlich wird diese Routine auch nach einem Reset des steuernden Prozessors (ohne Power-on-Reset) durchlaufen, und dabei wird ja das Display nicht automatisch 'resetet'.
Die nachfolgenden Tabellen beschreiben den Ablauf der
Initialisierung
für 8-Bit und 4-Bit-Interface. Das die Routinen
umständlich
aussehen,
ist der Tatsache geschuldet, dass sie das Display aus jedem Mode
heraus
ansprechen können.
Beispiel für eine Initialisierung mit 8-Bit Interface:
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
auf das Ende des internen Reset warten | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Interface auf 8-Bit setzen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Interface auf 8-Bit setzen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Interface auf 8-Bit setzen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
2-zeilig, 5x8-Punkt-Matrix Display aus Display löschen Kursor nach rechts wandernd, kein Display shift Display ein |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
Beispiel für eine Initialisierung mit 4-Bit Interface:
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
auf das Ende des internen Reset warten | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Interface auf 8-Bit setzen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Interface auf 8-Bit setzen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Interface auf 8-Bit setzen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Interface auf 4-Bit setzen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
2-zeilig, 5x8-Punkt-Matrix Display aus
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
Da das Display nicht mit einem steuernden Prozessor verbunden ist, befindet es sich im Grundzustand - im 1-zeiligen Mode. Werden nun alle Stellen des Displays als dunkle Vierecke dargestellt, dann ist das der richtige Mode für dieses Display. Werden aber nur die Hälfte der Stellen dunkel dargestellt, dann ist es nötig, das Display für den regulären Betrieb 2-zeilig zu initialisieren.
Nun besitzt man alle nötigen Informationen, um das Display zu nutzen:

Quellen:
- Informationen und Taktdiagramme aus dem HD44780-Datenblatt von
Hitachi
- Datenblatt der Electronic Assembly GmbH, Gräfelfing
-Datenblatt von Sitronix
Autor: sprut
erstellt: 24.04.2002
letzte Änderung: 15.07.2011