Dot-Matrix LCD-Displays

 zurück zu Elektronik , Homepage

Einleitung
Typen
Der Controllerchip HD44780
interne und externe Organisation
2x8 Display
1x16 Display
2x16 Display bis 2x40 Display
4x20 Display
4x40-Display
Adressen im Display-DDRAM
Zeichengenerator - CGRAM

Steckerbelegung
Stromversorgung
Hintergrundbeleuchtung
Interface
Display-Befehle
Initialisierung
Test eines unbekannten Displays
Der Controllerchip KS0073
Der Controllerchip KS0066U
Der Controllerchip ST7066U
Der Controllerchip ST7036U
LCD-DotMatrix-Displays

Einleitung

Dot-Matrix LCD-Displays eignen sich aufgrund ihres erträglichen Preises und des geringen Ansteueraufwandes gut, um ein PIC-gesteuertes Gerät 'geschwätzig' zu machen. Allerdings treten immer wieder Probleme auf, wenn man ein solches Display zum ersten Mal ansteuern will. Deshalb habe ich nützliche Informationen zur Funktion dieser Displays hier zusammengestellt.
nach oben

Typen der Displays

Dot-Matrix-Displays werden von vielen Herstellern in der ganzen Welt (und besonders in Taiwan) hergestellt. Neben Displays von Größen wie Datavision gibt es auch immer wieder Displays, deren Hersteller gar nicht zu ermitteln ist. Zum Glück sind Funktion und Anschluss der Displays immer gleich. Auf dieser Webseite beschäftige ich mich mit Displays, die einen Controller vom Typ HD44780 (oder kompatibel) verwenden.

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.)

nach oben

Der Controllerchip HD44780

Das einheitliche Verhalten aller Displays verdanken wir einem Controllerchip, der sich als Standard durchgesetzt hat, und der von allen Herstellern verbaut wird. Dabei handelt es sich um den HD44780 von Hitachi, der auch kompatible 'Brüder' von anderen Herstellern bekommen hat (z.B. den SED1278 von Epson).

Dieser Chip besitzt

Aufbau eines 2x8-Displays

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.

Aufbau eines 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.

1x8-Display im
        5x11-Punkte-Mode

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).

nach oben

interne und externe Organisation

Aus dem oben gesagten ergibt sich das Problem, dass der Aufbau des LCD-Modules in Spalten und Zeilen nicht unbedingt mit der internen Organisation übereinstimmt.

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.
 

nach oben

2x8-Display

Ein zweizeiliges Display mit jeweils 8 Zeichen pro Zeile entspricht genau der internen Struktur eines HD44780-Chips, wenn er im 5x8-Punkte-Modus ist.

2x8-Display

nach oben

1x16-Display

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.

1x16-Display-Rückseite: ein
              8+8-Typ
1x16-Display (8+8-Typ)
nach oben

2x16 bis 2x40

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.

2x16-Display-Rückseite
2x16-Display

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.

2x40-Display
        (Rückseite)

nach oben

4x20 Display

Vierzeilige Displays mit bis zu 20 Zeichen pro Zeile lassen sich mit nur einem Controller und zusätzlichen Displaytreibern aufbauen. Das 4x20 Display ist eigentlich ein 2x40 Display, das in der Mitte durchgeschnitten wurde, und bei dem dann die hinteren Hälften der Zeilen unter den vorderen Hälften der Zeilen angebracht wurde. Wenn man also dem Controller Daten für die 1. Zeile übergibt, so werden davon die ersten 20 Zeichen wirklich in die 1. Zeile geschrieben, während Zeichen 21 bis 40 in die 3. Zeile gelangen. Genauso gehören die 2. und 4. Zeile des Displays eigentlich hintereinander.

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.
4x40-Display

nach oben

4x40 Display

Vierzeilige Displays mit bis mehr als 20 Zeichen pro Zeile lassen sich nicht mehr mit einem Controller realisieren. Der interne Textpuffer des HD44780 ist zu klein. Deshalb sind diese Displays als zwei unabhängige zweizeilige Displays aufgebaut. Der 1. Controller verwaltet die oberen beiden Zeilen und der zweite Controller die unteren beiden Zeilen.

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.

nach oben

Adressen im Display - DDRAM

Der Controller (und damit die LCD-Anzeige) stellt in der Anzeige die Zeichen da, die sich im internen Textpuffer befinden. Dieser 80-Zeichen lange Puffer wird als DDRAM bezeichnet.

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.
 

Adressen der Displaypositionen im Textpuffer(hexadezimal, ohne Shift))
Displaytyp
1. Zeile
2. Zeile
3. Zeile
4. Zeile
Bemerkung
1x8
00-07
-
-
-
 
1x16
00-0F
-
-
-
echtes einzeiliges Display mit Displaytreiber
1x16 (8+8)
00-07

40-47

-
-
-
linke Hälfte

rechte Hälfte

1x20
00-13
-
-
-
 
1x40
00-27
 
-
-
 
2x8
00-07
40-47
-
-
 
2x12
00-0B
40-4B
-
-
 
2x16
00-0F
40-4F
-
-
 
2x20
00-13
40-53
-
-
 
2x24
00-17
40-57
-
-
 
2x40
00-27
40-67
-
-
 
4x16
00-0F
40-4F
10-1F
50-5F
 
4x20
00-13
40-53
14-27
54-67
 
4x40
00-27

-

40-67

-

-

00-27

-

40-67

1. Controller

2. Controller

 

nach oben

Zeichengenerator - CGRAM

Jedes Zeichen, das im Display dargestellt wird, besteht aus einem "Punkt"muster in einer "Matrix" aus 5 Spalten und 8 bis 11 Zeilen. Daher kommt ja der Begriff  "Dotmatrix"-Display.
Welche Punkte der Matrix bei einem bestimmten Zeichen hell sind und welche dunkel, das steht im Zeichengenerator (character generator - CG). Der CG ist ein Speicher, der für jedes darstellbare Zeichen 8..11 Bytes enthält. Jedes Bit eins Bytes entspricht einem Punkt der Matrix.
Der CG besteht aus zwei Teilen:
Den ROM gibt es in unterschiedlichen Versionen, so dass die dargestellten Zeichen je nach Display etwas unterschiedlich aussehen können. Typischerweise gibt es aber zu jedem Display ein Datenblatt mit der Darstellung aller Zeichen des CGROM.

Interessanter ist der CGRAM. Er ermöglicht es dem Anwender, eigene Zeichen zu kreieren. Dazu schreibt man einfach ein selbst entworfenes Punktmuster in den CGRAM.
Dort ist Platz für 8 Zeichen in 5x8-Punkte-Darstellung oder 4 Zeichen in 5x11-Punkte-Darstellung. Das ist nicht viel, aber es genügt z.B. für eine Balkengrafik oder einige zusätzliche Buchstaben des kyrillischen Alphabets, für die sich unter den lateinischen Buchstaben keine Entsprechungen finden. (Einige Displays haben auch kyrillische Großbuchstaben bereits im CGROM.)

Natürlich kann man die Symbole im CGRAM immer wieder ändern, aber das Display kann immer nur die Symbole darstellen, die sich auch gerade im CGRAM befinden. Zu jedem Zeitpunkt kann man im Display also maximal 8 selbst entworfene Symbole gleichzeitig anzeigen.

Die Zeichen des CGRAMs sind den "ASCII"-Codes 0x00 bis 0x0F zugeordnet. Dabei gibt es allerdings 2 bis 4 Codes für jedes darstellbare CGRAM-Symbol. die nachfolgende Tabelle zeigt , welche CGRAM-Symbole welchen ASCII-Codes zugeordnet sind.

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

Nach dem Einschalten des Displays steht noch nichts im CGRAM. Man muss den CGRAM also erst beschreiben.Dazu schreibt man (je nach Darstellung) 8 bis 11 Byte in die entsprechenden Speicherzellen des CGRAMs. Die niederwertigen 5 Bits eine jeden Bytes bilden dann je eine Zeile der darzustellenden Punktmatrix, wobei das niederwertigste Bit dem rechten Punkt zugeordnet ist. Die nachfolgende Tabelle zeigt die zu den Zeichen gehörenden CGRAM-Adressen. Die jeweils niedrigste Adresse entspricht der obersten Matrixzeile.

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 /
/
/
/


Beispiel:
Ich möchte das kyrillische Symbol für das große I ausgeben. Das sieht genauso aus wie ein gespiegeltes N. Angenommen, im CGROM ist es nicht enthalten, dann muss ich es selbst erzeugen. Zunächst denke ich mir ein passendes Punktmuster aus. Dabei gehe ich von einer 5x8-Darstellung aus:










































Jede Zeile entspricht nun einem Byte im CGRAM. Ich bestimme die Werte der Bytes, den ich in die zugeordneten CGRAM-Zellen einzutragen habe.

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

Das Einschreiben dieser 8 Bytes in die zugehörigen CGRAM-Zellen erfolgt mit den Befehlen "CG RAM Address Set" und "CG RAM/DD RAM Data Write".
Ein praktisches Beispiel findet man hier.

nach oben

Steckerbelegung

Die nachfolgenden Anschlussbelegungen gelten als Orientierung und treffen auf die meisten Displays zu. Es wird aber immer auch Ausnahmen geben. Wenn möglich, sollte man einen Blick in das Datenblatt des Displays werfen.
Um Anschlussfehler zu vermeiden, sollte man zumindest prüfen, ob das vermeintliche Massepin mit den Masseflächen des Displays verbunden ist. Dann kann man davon ausgehen, das auch die anderen Pins mit der vermuteten Anschlussbelegung übereinstimmen. (Dann erkennt man z.B. sofort, dass das bei Pollin vertriebene TC1602E-01 Vss und Vdd vertauscht hat.)
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.
1-reihiger Anschluß
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. 2-reihiger Anschluß
Pinbelegung 2x8 bis 4x20 / 2x40
Pin (Standard)
Pin (Seiko)
Symbol
Pegel
Beschreibung
1
13
Vss
Masse
Masse GND
2
14
Vdd
+5V
Betriebsspannung +5V
3
12
Vo
0 .. 1,5V (-2..-5V)
Displayspannung (Kontrast)
4
11
RS
H/L
Register Select
5
10
R/W
H/L
H:Read / L:Write
6
9
E
H
Enable
7
8
D0
H/L
Datenleitung 0 (LSB)
8
7
D1
H/L
Datenleitung 1
9
6
D2
H/L
Datenleitung 2
10
5
D3
H/L
Datenleitung 3
11
4
D4
H/L
Datenleitung 4
12
3
D5
H/L
Datenleitung 5
13
2
D6
H/L
Datenleitung 6
14
1
D7
H/L
Datenleitung 7 (MSB)
15 (optional)
?
LED+
-
Pluspol der LED-Beleuchtung
16 (optional)
?
LED-
-
Minuspol der LED-Beleuchtung

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.
 

Pinbelegung 4x24 bis 4x40 (1-reihiger Verbinder)
Pin (Standard)
Symbol
Pegel
Beschreibung
1
Vss
Masse
Masse GND
2
Vdd
+5V
Betriebsspannung +5V
3
Vo
0 .. 1,5V (-2..-5V)
Displayspannung (Kontrast)
4
RS
H/L
Register Select
5
R/W
H/L
H:Read / L:Write
6
E2
H
Enable untere Zeilen
7
E1
H
Enable obere Zeilen
8
D0
H/L
Datenleitung 0 (LSB)
9
D1
H/L
Datenleitung 1
10
D2
H/L
Datenleitung 2
11
D3
H/L
Datenleitung 3
12
D4
H/L
Datenleitung 4
13
D5
H/L
Datenleitung 5
14
D6
H/L
Datenleitung 6
15
D7
H/L
Datenleitung 7 (MSB)
16 (optional)
LED+
-
Pluspol der LED-Beleuchtung
17 (optional)
LED-
-
Minuspol der LED-Beleuchtung

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). Bei einigen Displays mit zweireihigen Verbinder stimmt die Pinbelegung mit der des einreihigen Verbinders überein. Andere Belegungen weichen aber deutlich ab. 

typische Pinbelegung 4x24 bis 4x40 (2-reihiger Verbinder)
Pin
Symbol
Pegel
Beschreibung
1
D6
H/L
Datenleitung 6
2
D7
H/L
Datenleitung 7 (MSB)
3
D4
H/L
Datenleitung 4
4
D5
H/L
Datenleitung 5
5
D2
H/L
Datenleitung 2
6
D3
H/L
Datenleitung 3
7
D0
H/L
Datenleitung 0 (LSB)
8
D1
H/L
Datenleitung 1
9
E1
H
Enable 1. Controller
10
E2
H
Enable 2. Controller
11
RS
H/L
Register Select
12
R/W
H/L
H:Read / L:Write
13
Vo
0 .. 1,5V (-2..-5V)
Displayspannung (Kontrast)
14
Vdd
+5V
Betriebsspannung +5V
15 (optional)
LED +
-
Pluspol der LED-Beleuchtung
16 (optional)
LED -
-
Minuspol der LED-Beleuchtung

 
 
 
Pinbelegung von NPC (Nan Ya Plastics Corporation) 4x24 bis 4x40 (2-reihiger Verbinder)
Pin
Symbol
Pegel
Beschreibung
1
D7
H/L
Datenleitung 7 (MSB)
2
D6
H/L
Datenleitung 6
3
D5
H/L
Datenleitung 5
4
D4
H/L
Datenleitung 4
5
D3
H/L
Datenleitung 3
6
D2
H/L
Datenleitung 2
7
D1
H/L
Datenleitung 1
8
D0
H/L
Datenleitung 0 (LSB)
9
E1
H
Enable 1. Controller (oben)
10
R/W H/L H:Read / L:Write
11 RS H/L Register Select
12
Vo 0 .. 1,5V (-2..-5V) Displayspannung (Kontrast)
13
Vss
Masse
Betriebsspannung GND
14 Vdd +5V Betriebsspannung +5V
15
E2
H
Enable 2. Controller (unten)
16
-
-
-
17 (optional)
LED +
-
Pluspol der LED-Beleuchtung
18 (optional)
LED -
-
Minuspol der LED-Beleuchtung

 
 
nach oben

Stromversorgung

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.

Kontrasteinstellung und Stromversorgung
              (Normalversion)
Kontrasteinstellung und Stromversorgung
              (erweiterterter Temperaturbereich) 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.

Hochtemperaturdisplay mit Schaltung für negative
              Kontrastspannung

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.

nach oben

Hintergrundbeleuchtung

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.
 

nach oben

Interface

Der Controller (und damit die LCD-Anzeige) besitzt ein paralleles Interface, bestehend aus: Der Datenbus dient zur eigentlichen Übertragung der Daten zum Display. Er kann 8-bittig wie auch 4-bittig genutzt werden.

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

Taktdiagramm: Schreibzyklus

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

Taktdiagramm: Lesezyklus
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.

nach oben

4-Bit Interface

 
klicken zum
                Vergrößern Das oben beschriebene Interface mit seinem 8-Bit breiten Datenbus hat den Nachteil, dass zum Anschluss des Displays an den steuernden Prozessor 11 Leitungen nötig sind. 
Wenn man einen Prozessor mit reichlich I/O-Pins benutzt, mag das nicht problematisch sein, aber gerade die Nutzer kleiner PIC-Prozessoren (PIC16F84 & Co) müssen mit den I/O-Pins geizen. 

Dotmatrix-Displays kennen auch ein Interface, bei dem nur die oberen 4-Bit des Datenbusses (D7..D4) benutzt werden: das verringert die Zahl der benötigten I/O-Pins auf 7. Da nach wie vor aber 8-Bit Werte über den Datenbus übertragen werden müssen, geschieht dies in jeweils 2 Hälften. Bei jedem Lese- oder Schreibzugriff werden auf dem Datenbus also nacheinander erst die 4 oberen Bits und dann die 4 unteren Bits des 8-Bit-Datenworts übertragen. Dazu muss Enable zwei mal ein- und wieder aus-geschaltet werden.

 
Nebenstehendes Bild zeigt drei aufeinanderfolgende Zugriffe auf das Display im 4-Bit Mode. 
  • Schreiben eines Steuerbefehls (RS=R/W=0)
  • Lesen des Status (busy-Flag und AC) (RS=0, R/W=1)
  • Lesen eines Zeichens aus dem Speicher des Displays (RS=R/W=1)
Für jeden Befehl wird Enable jeweils 2 mal aktiviert, um zuerst die oberen 4 Bit und dann die unteren 4 Bit zu übertragen. 

Ich arbeite prinzipiell mit dem 4-Bit-Interface. Beispiele für Schreib-und Lese-Routinen finden sich z.B.: 

Taktdiagramm 4-Bit-Interface
Da das Display nach dem Zuschalten der Betriebsspannung sein Interface zunächst 8-bittig betreibt, muss es in der Initialisierung auf 4-billtig umgeschaltet werden. Dafür werden die Datenleitungen D0..D3 zum Glück nicht benötigt.
nach oben

Display-Befehle

Bevor das Display benutzt werden kann, muss es vom steuernden Gerät (z.B. PIC Microkontroller) initialisiert werden. Dazu werden einige Steuerbefehle zum Display geschrieben (RS=R/W=0). Das geschieht mit Steuerbefehlen. Eine Liste aller existierenden Befehle enthält die folgende Tabelle. Die Steuerbefehle sind daran zu erkennen, das RS=0 ist.
Befehl
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
Beschreibung
benötigte Zeit
Display löschen
0
0
0
0
0
0
0
0
0
1
löscht das Display,
Kursor auf Adresse 0,
 1,64 ms
Kursor zum Anfang
0
0
0
0
0
0
0
0
1
*
Kursor auf Adresse 0,
Display-Shift entfernen,
 1,64 ms
Entry Mode Set
0
0
0
0
0
0
0
1
I/D
S
I/D: Kursor Laufrichtung,
S: Shift ein/aus
 40 µs
Display ein/aus
0
0
0
0
0
0
1
D
C
B
D: Display ein/aus
C: Kursor ein/aus
B: Blinkende Kursorposition ein/aus
 40 µs
Cursor/Display-Shift
0
0
0
0
0
1
S/C
R/L
*
*
S/C: Display oder Kursor
R/L: nach rechts oder links schieben
 40 µs
Function Set
0
0
0
0
1
DL
N
F
*
*
DL: Interface 8-Bit/4-Bit lang 
N: ein-/zwei-zeilig
F: 5x8/5x11 Darstellung
 40 µs
CG RAM Address Set
0
0
0
1
            CG RAM-Adresse einstellen  40 µs
DD RAM Address Set
0
0
1
              DD RAM-Adresse einstellen  40 µs
Busy-Flag/Address Read
0
1
BF
              busy-Flag und Adress-counter auslesen   40 µs
CG RAM/DD RAM Data Write
1
0
                Daten zum Textpuffer oder CG RAM schreiben   40 µs
CG RAM/DD RAM Data Read
1
1
                Daten vom Textpuffer oder CG RAM lesen  40 µs

Display löschen

Kursor zum Anfang Entry Mode Set Display ein/aus Kursor/Display-Shift Function Set
  nach oben

Initialisierung

Bevor das Display benutzt werden kann, muss es vom steuernden Gerät (z.B. PIC-Controller) initialisiert werden. Der Displaycontroller kennt eine Power-on-Reset-Funktion, die die meisten Displays benutzen. Diese läuft beim Anlegen der Betriebsspannung automatisch ab und bringt das Display in folgenden Zustand: Während dieser ca. 15 ms-langen Reset-Prozedur, kann das Display keine Befehle von außen annehmen, das busy-Flag ist gesetzt.
Nach dem Reset, ist das Display ausgeschaltet, also kann es so nicht benutzt werden.

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:
 
Power On

mindestens 15 ms warten
auf das Ende des internen Reset warten
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
1
1
-
-
-
-
Interface auf 8-Bit setzen
mindestens 4,1 ms warten

RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
1
1
-
-
-
-
Interface auf 8-Bit setzen
wenigstens 100 µs warten

RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
1
1
-
-
-
-
Interface auf 8-Bit setzen
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
1
1
-
-
-
-
0
0
0
0
1
1
N(1)
F(0)
-
-
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
I/D(1)
S(0)
0
0
0
0
0
0
1
1
0
0
2-zeilig, 5x8-Punkt-Matrix
Display aus
Display löschen
Kursor nach rechts wandernd, kein Display shift
Display ein
fertig

Beispiel für eine Initialisierung mit 4-Bit Interface:
 
Power On

mindestens 15 ms warten
auf das Ende des internen Reset warten
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
1
1
-
-
-
-
Interface auf 8-Bit setzen
mindestens 4,1 ms warten

RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
1
1
-
-
-
-
Interface auf 8-Bit setzen
wenigstens 100 µs warten

RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
1
1
-
-
-
-
Interface auf 8-Bit setzen
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
1
0
-
-
-
-
Interface auf 4-Bit setzen
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
1
0
       
0
0
N(1)
F(0)
-
-
       
0
0
0
0
0
0
       
0
0
1
0
0
0
       
0
0
0
0
0
0
       
0
0
0
0
0
1
       
0
0
0
0
0
0
       
0
0
0
1
I/D(1)
S(0)
       
0
0
0
0
0
0
       
0
0
1
1
0
0
       
2-zeilig, 5x8-Punkt-Matrix

Display aus


Display löschen


Kursor nach rechts wandernd, kein Display shif


Display ein

fertig

nach oben

Test eines unbekannten Display-Typs

Das Display wird zunächst mit den nötigen Spannungen verbunden. Die Kontrastspannung wird so weit verändert (0V .. 1,5V) bis ein Teil der Displaystellen oder das alle Displaystellen als dunkle Vierecke erscheinen. (Das ist meist schon der Fall, wenn als Kontrastspannung 0V verwendet wird.)
Ist es nicht möglich, am Display dunkle Vierecke zu erzeugen, dann handelt es sich beim Display offensichtlich um ein Display mit erweitertem Temperaturbereich. In diesem Fall ist eine Kontrastspannung von -2V..-5V einzustellen, wobei nun aber nicht unbedingt auch dunkle Vierecke sichtbar werden müssen. Eine negative Kontrastspannung sollte an einem noch unbekannten Display nur über einen Schutzwiderstand (1kOhm) angelegt werden. Stellt sich durch den Widerstand ein Stromfluss (>1mA) ein, dann war es doch ein Normaltemperatur-Display!
Die Kontrastspannung muss im laufenden Betrieb so eingestellt werden, dass die Dunkelfärbung der Displaystellen nicht auftritt, aber zur Erkennung der richtigen Kontrastspannungspolarität und der Anzahl von Zeilen und Stellen ist diese Einstellung hilfreich.

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:

Beispiel:
Das hier gezeigte Display wurde mit Vdd=5V und Vo=0V in Betrieb genommen. Man erkennt, das es offensichtlich ein 4-zeiliges Normaltemperatur-Display ist, dessen 1. und 3. Zeile aktiv sind. Pro Zeile werden 27 Rechtecke angezeigt, es ist also ein 27x4-Display. Folglich muss es 2 Controller-Chips besitzen - das Display ist wie ein 40x4-Display organisiert.
Der erste Controller verwaltet die oberen beiden Zeilen und der zweite Controller die unteren beiden Zeilen. Da jeweils nur eine Zeile pro Controller aktiv ist, befinden sich die Controller im einzeiligen Mode, müssen aber zum Betrieb des Displays in den 2-zeiligen Mode geschaltet werden.
Ich habe dieses Display in meinen VDR eingebaut.
27x4-Display beim Test
nach oben


Der Controllerchip KS0073

In letzter Zeit tauchen vermehrt Displays mit dem Controller KS0073 von Samsung auf. Dieser Chip ist dem HD44780 sehr ähnlich, aber leider nicht 100% kompatibel. Dass der Controller (im Vergleich zum HD44780) größere Displays ohne zusätzliche Spaltentreiber ansteuern kann, ist für den Nutzer belanglos, es gibt aber auch einige deutliche Unterschiede mit Konsequenzen für die Nutzung:

Displayanschluss
Der Controller hat einen Reseteingang, der normalerweise auf den Steckverbinder des Displays herausgeführt ist. Das wirkt sich auf die Stecker-Pinbelegung aus. Die Pins 1..14 sind in der Regel normal belegt. Dann folgt ein freies Pin (15), dann das Reset-Pin (16) und dann erst die LED-Anschlüsse für die Hintergrundbeleuchtung Led+ (17) und LED- (18).
Der Reseteingang ist Low-activ und wird im Display auf high gezogen. Man kann ihn also einfach frei lassen.

RAM-Adressen
Die Anfangsadressen der zweiten (und aller weiteren) Displayzeile weichen vom HD44780 Standard ab.

4-Bit-Initialisierung
Die Initialisierung des 4-Bit-Datenbus-Modes weicht etwas vom HD44780-Standard ab.

nach oben


Der Controllerchip KS0066U

Der Controllerchip KS0066U von Samsung soll zu 100% mit dem HD44780 kompatibel sein, Aber auch hier stößt man gelegentlich auf Probleme mit  Software, die am HD44780 problemlos läuft.
In einem Forum fand ich die Aussage, dass dieser Chip das Busy-Flag ca 10 Mikrosekunden zu früh löscht. Das müsse in der Software durch eine entsprechende Wartezeit kompensiert werden. Überprüft habe ich das aber nicht.

nach oben

Der Controllerchip ST7066U

Der Controllerchip ST70660 (von Sitronix)  ist zum  KS0066U von Samsung kompatibel.

nach oben

Der Controllerchip ST7036U

Der Controllerchip ST7036U (von Sitronix) wird u.A, in DOG-Modulen eingesetzt. Er besitzt 4 Interfaces:
Seine Befehlssatz ist zum HD44780 kompatibel. Wird der Controller im 8-Bit oder 4-Bit-parallel-Mode betrieben, dann kann er deshalb auch wie ein HD44780-Controller angesteuert werden. Dabei gilt es noch folgendes zu beachten:
Wie man sieht, lässt sich der ST7036U mit geringen Einschränkungen wie ein HD44780-Controller ansteuern. Allerdings ist müssen unbedingt einige spezielle Pins vorab fest verkabelt werden. Will man die wahren Möglichkeiten des Controllers aber ausschöpfen, dann muss man sich von der HD44780-Kompatibilität verabschieden, und das Datenblatt studieren. Dann bietet der Controller mehr frei-programmierbare Zeichen, ein per Befehl einstellbaren Kontrast und spart durch das I2C-Interface einige Anschlusspins ein.

nach oben

 zurück zu Elektronik , Homepage

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