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äßt 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 muß ihn also als 2-zeilig initialisieren, und wenn man auf die Positionen 9 .. 16 schreiben will, so muß 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äßt 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 Anschlußpin mehr benötigt. Um Verwechslungen zu vermeiden verwendet man gleich ein ganz anderes Steckerlayout. Anstelle des einreihigen Steckerfeldes (14..16 Kontakte) wird 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 muß 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öchstwarscheinlich 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 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 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 Anschluß 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 it 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 anschluß wird auch der einreihige Anschluß 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 numeriert 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 Anschluß
der
LED-Hintergrundbeleuchtung (soweit vorhanden).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Die Dotmatrix-Displays werden mit einer Betriebsspannung
Vdd
von +5V (± 5%) betrieben. Der Vss-Pin ist der
Masseanschluß.
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 Anschluß des Displays und die Erzeugung der Kontrast-Spannung für Standard-Displays. Durch Änderung der Spannung läßt 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 polulären ICL7660 Schaltkreis für Ladungspumpen. |
| Das rechts stehende Foto zeigt diese Schaltung an einem
2x16-Display.
Mit dem Einstellwiderstand läßt 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, daß 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ärend
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 muß (z.B.
für
OPVs) sollte also dem Hochtemperaturdisplay den Vorzug geben.
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 einner 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 Hauptanschluß 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 muß 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
weiss 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 normalenDisplays (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 weisser
Hintergrundbeleuchtung.
Dabei muss man mit dem Vorwiderstand sehr vorsichtig sein, die auf der
Site 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ässig
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äßt 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, muß diese Leitung fest mit 0V (Vss) verbinden, da ein offener Anschluß 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, daß ein Schreibzugriff erfolgt, und bereitet sich
darauf
vor, mit der High-Low Flanke von ENABLE die Daten vom Datenbus (
DB0..DB7 ) einzulesen. Dazu muß 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 muß 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, daß 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 muß das
Display
das Wort intern abspeichern, oder wenn es ein Kommando enthielt (z.B.
Löschen
des Displays) dann muß es dieses Kommando ausführen. Dazu
benötigt
das Display Zeit, und wärend 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, daß ein Lesezugriff erfolgt. Das Display muß
nun
das angeforderte Datenbyte unverzüglich auf den Datenbus (
DB0..DB7
) legen. Dazu muß 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 gecschrieben 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ünschen 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, daß 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
Autor: sprut
erstellt: 24.04.2002
letzte Änderung: 12.08.20089