2.13 Alphanumerisches I2C-Display - Institut für Elektronik, TU-Graz

Transcription

2.13 Alphanumerisches I2C-Display - Institut für Elektronik, TU-Graz
2.13
Alphanumerisches I2C-Display
2.13 Alphanumerisches I2C-Display
Ein LED-Display für den I2C-Bus haben wir schon in Kapitel 2.3 vorgestellt. Die
7-Segment-Displays lassen jedoch viele Wünsche offen, vor allem die Darstellung
von Buchstaben und Zeichen, die bei einem modernen Computer-Display einfach
dazugehört.
Wie Bild 13.1 beweist, ist ein LCD-Modul mehr als ein Display. Das hier verwendete (weit verbreitete) Modul von Hitachi kann zwei Reihen mit jeweils 40 Zeichen
V LED
backlight
LCD
E
16
R/W
2
I C- D/I
interface
DB4...DB7
+5V
kontrast
LCDcontroller
4
40
VDD
VO
4
LCDdriver
LCDdriver
VSS
930044 - 12
Bild 13.1. Blockschaltbild des I2C-Interface und des LCD-Moduls.
115
Teil 2: Komponenten und Applikationen
wiedergeben. Jedes Zeichen besteht aus einer Matrix von 5 · 8 Punkten, wovon die
meisten Zeichen, die im Zeichengenerator-ROM abgelegt sind, nur die oberen
sieben Reihen verwenden. Die achte Reihe ist für den Cursor reserviert und wird
sonst nur von einigen speziellen oder selbst definierten Zeichen benötigt.
Das Modul umfaßt die notwendige Steuerlogik in Form eines LCD-Controllers, der
einerseits das Display ansteuert, andererseits sich aber auch um die Kommunikation
mit dem Computer kümmert. In unserem Fall läuft diese Kommunikation über vier
Bits (DB4...DB7) des I2C-Interface. Der Controller »schafft« auch acht Bits,
allerdings würde dann der I2C-Controller umfangreicher als notwendig. Neben den
vier Datenbits sind noch vier Steuerleitungen notwendig. Die Funktion der Enableund
-Leitungen erklärt sich von selbst, das
-Signal zeigt an, ob die
aktuellen Daten für den Controller selbst oder für die Anzeige bestimmt sind. Mit
der vierten Leitung VLED kann man das Display hintergrundbeleuchten. Zu diesem
Zweck besitzt das Modul hinter dem Display LEDs, die bei einer Versorgungsspannung von 5 V satte 170...250 mA ziehen (Zum Vergleich: Das Modul verbraucht etwa 1...3 mA im unbeleuchteten Betrieb).
Wie der Controller Daten und Befehle verarbeitet, ist im Abschnitt Software zu
erfahren. Zunächst geht es nämlich um das
I2C-Interface
Das Schaltbild (Bild 13.2) weist einen ähnlichen Busanschluß auf wie die vorangegangenen Projekte mit dem 8-bit-I/O-IC PCF8574, das die gesamten Interfaceaufgaben zwischen I2C-Bus und LCD-Modul übernimmt. Die acht Ports P0...P7 teilen
sich in jeweils vier Daten- (DB4...DB7) und Steuerleitungen (
, E,
, und
VLED). Natürlich wäre auch - wie beim Modul vorgesehen - die Ansteuerung mit acht
Datenbits denkbar. Dann muß man allerdings zwei I/O-ICs verwenden, was angesichts der begrenzten Adressierungsmöglichkeiten am I2C-Bus wohl nicht wünschenswert ist. Die Adresse wird durch die drei Jumper A0...A2 eingestellt, und
zwar in der Form
0
1
0 0 A2 A1 A0
Der Port P7 kann natürlich nicht direkt den hohen LED-Strom liefern. Deshalb ist
der Schalttransistor T1 zugefügt. R2 begrenzt den LED-Strom, wenn dies nicht
sowieso schon im Display geschieht (wie im vorgeschlagenen LM092LN). In
diesen Fällen ersetzt man R2 durch eine Drahtbrücke, ansonsten richtet sich der
Wert von R2 nach dem angegebenen LED-Strom des Displays.
IC1 und IC3 gehören zwar nicht unmittelbar zum Interface, sind aber dennoch
wichtig: IC1 und Jumper C/D bieten die Möglichkeit, das Interface samt Modul
116
Alphanumerisches I2C-Display
2.13
SDA
SDA
INT
INT
SCL
SCL
U+
U+
+5V
+5V
0V
0V
Up
Up
IC1
U+
5V
7805
C1
C
D1
C4
10µ 16V
T1
R1
100n
3
4Ω7
C2
C3
100n
10µ
16V
K3
VLED
16
P0
4
P2 DB6 13
14 DB7 P3
P1
5
P0 DB4 11
12 DB5 P1
P2
6
DB2
9
10 DB3
P3
7
DB0
7
8
DB1
P4
9
R/W
5
6
E
P6
P5
10
VO 3
4
D/I
P5
P6
11
VSS 1
2
VDD
P7
12
P1
10Ω
1k8
47µ
P4
P5
LV C+
8
V+
5V
C8
47n
C7
100µ 10V
4
PCF
8574
A2
A1
P7
A0
7
1
7
6
13
14
R3
330Ω
P6
16V
2
330Ω
15
P3
8
R6
INT
SCL
P2
C9
6
IC2
5
R4
SDA
P0
Up
Up
4
2
16
15
R5
3
5V
K1
10k
6
5V
*
P1
7
Up
R2
Up
5
1
1N4001
P7 (BL)
P4
4
2
1µ
16V
390Ω
BC327
K2
C6
C5
100µ
16V
5V
D
3
2
Up
1
A0
A1
A2
B
B
B
A
A
A
C– OSC
IC3
MAX660
3
V–
5
5V
C10
47µ 16V
930044 - 11
Bild 13.2. Die Elektronik des Interface beschränkt sich auf den Seriell-nach-parallelWandler IC2. IC1 und IC3 sind nicht unbedingt nötig, kommen aber dem praktischen
Handling entgegen.
117
Teil 2: Komponenten und Applikationen
extern aus der +5-V- oder der computereignen U+-Leitung zu versorgen. IC3 ist ein
Step-down-Konverter und verwandelt die positive in eine negative 5-V-Spannung.
Der Grund dafür: Zwar arbeitet die Kontrasteinstellung der Flüssigkristallanzeige
auch mit einer einfachen positiven Spannung am Eingang VO, bei nahezu senkrechtem Ablesewinkel kann aber nur eine negative Spannung ausreichenden Kontrast
bieten. Die Spannung an VO darf höchstens 6,5 V unter der positiven Betriebsspannung und 1,5 V unter Masse liegen. Dies ist in der Dimensionierung des einstellbaren Spannungsteilers R5/P1 berücksichtigt. Obwohl die negative Spannung in
dieser Anwendung ausschließlich zur Kontrastverbesserung benötigt wird, haben
wir -5 V doch auf den freien Anschluß 16 von K1 gelegt, damit bei anderen
Anwendungen (Opamp-Schaltungen) eine symmetrische Versorgungsspannung
zur Verfügung steht.
R2
A2
A1
A0
B
930044
A
R1
R3
R4
R5
R6
D1
Aufgrund der wenigen Bauteile des
Interface ist auch die (einseitige)
U+
U+
+5V
+5V
K2 K3
Platine in Bild 13.3 recht kompakt
2
5
2
5
O
O
1 3 4 6
1 3 4 6
ausgefallen. Es sind insgesamt zwölf
SCL
SCL
C4
C6
SDA
SDA
Drahtbrücken (eventuell plus eine anC D
INT
INT
stelle von R2) zu verlegen. Die MontaC5 IC1
C8
ge der restlichen Bauteile sollte keine
C10
P1
C7
1 2
Schwierigkeiten bereiten. Die Verbindung zwischen Interface und LCDC2
Modul läuft über ein 16-poliges FlachIC3
IC2
bandkabel. An der Displayseite ist ein
1
C3
1
Platinenverbinder aufgepreßt, der diT1
C9
440039
15 16
rekt auf die Platine gelötet und auch
K1
nicht mehr abgezogen wird. Diese
C1
Befestigungsart besitzt gegenüber ei2
Bild 13.3. Die Platine des I C-LCD-Interface. ner Pfostenfeldverbindung die wesentAuch hier finden die bei allen I2C-Schaltungen lich geringere Bauhöhe, was der Monüblichen Mini-DIN-Buchsen Verwendung.
tage des Displays hinter einer Frontplatte entgegenkommt. Auf der anderen Kabelseite findet man einen
Pfostenfeldverbinder (female), der lösbar auf ein entsprechendes Gegenstück auf
der Platine gesteckt wird. Der im Platinenaufdruck gekennzeichnete Pin 1 entspricht
dem Pin 1 des LCD-Moduls.
Die Software
PC-User, die Turbo-Pascal als Programmiersprache verwenden, dürfen aufatmen:
Für sie löst sich das Problem Software in Form der Diskette 1852 fast von selbst.
Schwierigkeiten mit der Ansteuerung des Moduls kann man aber auch durch eine
aufmerksame Beachtung der Display-Funktionen und der Timing-Vorschriften aus
118
2.13
Alphanumerisches I2C-Display
D/I
R/W
E
DB7
IR7
IR3
BF
AC3
DR7
DR3
DB6
IR6
IR2
AC6
AC2
DR6
DR2
DB5
IR5
IR1
AC5
AC1
DR5
DR1
DB4
IR4
IR0
AC4
AC0
DR4
DR0
Instruction (IR) write
Busy flag (BF) and
address counter (AC) read
Data register (DR) read
930044 - 13
Bild 13.4. Das Timing-Diagramm zeigt Schreib- und Leseaktionen.
dem Wege gehen, wenn man die Pascal-Unit nicht verwenden kann oder will. Der
Quelltext ist übrigens ein gutes Vorbild für eigene Entwürfe auch in anderen
Sprachen.
Die wichtigste Funktion der Software ist das korrekte Ansteuern der Steuer- und
Datenleitungen des Displays. Das I2C-Interface übersetzt die seriellen I2C-Daten in
parallele Daten für das Display. Die richtige Reihenfolge der Signale und deren
Timing ist in Bild 13.4 zu sehen. Befehle und Daten werden immer in Portionen á
vier Bit (Nibbles) zum Display durchgegeben, das höchersignifikante Nibble eines
Bytes immer zuerst. Im Timing-Diagramm ist links die Übertragung eines Befehls
(IR) zum Modul zu sehen, dessen Nibbles in genau den Augenblicken übernommen
werden, in denen die Enable-Leitung auf Low kippt. In der Mitte ist zu sehen, wie
die Software die Busy-flag und den Stand des Adreßzählers des LCD-Controllers
liest. Die Softwaremuß diese Aktion vor jedem Lese- oder Schreibbefehl durchführen, da der LCD-Controller für 40 µs...1,6 ms nach dem Empfang von Daten absolut
taub ist für alle folgenden Signale. Nur das Lesen der Busy-flag ist möglich. Der
dritte Teil des Timing-Diagramms zeigt das Auslesen der Datenregister in dem
Moment, in dem Enable auf High geht.
Wer mit einem PC und der Turbo-Pascal-Unit arbeitet, muß an dies alles keinen
Gedanken verschwenden. Die Software besteht aus vier Prozeduren (WriteInstrLCD,
WriteCharLCD, ReadCharLCD, InitLCD) und einer Funktion (GetAddrntLCD),
die Sie bis auf InitLCD – was für sich selbst spricht – in der Tabelle 13.1 neben den
119
Teil 2: Komponenten und Applikationen
Tabelle 13.1. Funktion des LCD-Controllers.
entsprechenden Funktionen des LCD-Controllers wiederfinden. Die Busy-flag wird
in jeder Prozedur berücksichtigt, ebenso die Variable BackLight, mit der die
Displaybeleuchtung ein- und ausgeschaltet werden kann. Das Einschalten dieser
Variablen zieht übrigens einen Verlust der aktuellen Displaydaten nach sich. Wie
120
2.13
Alphanumerisches I2C-Display
Bild 13.5. Ein Beispiel für ein Pascal-Programm, das »Hello« auf das Display schreibt.
die LCD-Prozeduren in ein Programm aufgenommen werden können, zeigt
Bild 13.5. Dieses kleine Programmbeispiel schreibt »Hello« auf das Display. Auf
der Diskette mit der Pascal-Unit finden sich noch mehr Programmierbeispiele, auch
eine Routine, um eine Zeichenkette ins LCD zu schreiben.
Der gesamte Zeichenvorrat des LCD-Controllers ist in Tabelle 13.2 zusammen mit
den dazugehörenden Binärcodes abgebildet. Er besteht aus Ziffern, Klein- und
Großbuchstaben, Zeichen, den meistverwendeten griechischen Formelzeichen sowie den allseits bekannten japanischen Kana-Zeichen. Acht Zeichen in der ersten
Spalte der Tabelle können frei definiert werden, sie werden im CG RAM des
Displaycontrollers gespeichert. In diesem RAM lassen sich natürlich auch beliebige
andere Daten speichern.
Tabelle 13.2 zeigt schließlich, unter welcher Adresse des DD RAMs (Display Data
RAM) die Zeichen gespeichert werden. Die Adresse entscheidet nämlich über die
Tabelle 13.2. Adressierung der Zeichen im 2-reihigen Display (N=1).
121
Teil 2: Komponenten und Applikationen
122
2.13
Alphanumerisches I2C-Display
Plazierung im Display. Auf der Diskette mit der Displaysoftware befindet sich auch
ein Programm namens LCDTEST, das alle Möglichkeiten des Displays ausschöpft.
LCDTEST ist – neben der Testfunktion selbst – ein hervorragender Ratgeber für
selbstgestrickte Programme. Lediglich eine Funktion werden Sie nicht in LCDTEST
finden: Der Controller kann die Zeichenmatrix auf 5·10 vergrößern, was besonders
für selbstdefinierte Zeichen von Bedeutung sein kann. Die Anwendungsmöglichkeiten
des Displays sind enorm. Probieren Sie es einfach aus!
Stückliste
Widerstände:
R1 = 390 Ω
R2 = 4Ω7 *
R3,R4 = 330 Ω
R5 = 1k8
R6 = 10 Ω
P1 = 10-k-Trimmpoti
Kondensatoren:
C1,C3 = 10 µ/16 V stehend
C2,C5 = 100 n
C4 = 100 µ/16 V stehend
C6 = 1 µ/16 V stehend
C7 = 100 µ/10 V stehend
C8 = 47 n
C9,C10 = 47 µ/16 V stehend
Halbleiter:
D1 = 1N4001
T1 = BC327
IC1 = 7805
IC2 = PCF8574
IC3 = MAX660
Außerdem:
K1 = 16-poliger Pfostenfeldverbinder,
male, mit Schutzkragen
K2,K3 = 6-poliger Mini-DIN-Chassisbuchse
LC-Display LM092LN (Hitachi)
16-poliger FlachbandkabelPlatinenverbinder
16-poliger Flachbandkabelverbinder
30 cm 16-poliges Flachbandkabel
Platine 930044 inkl. Software 1852
Tabelle 13.4 Abmessungen des LC-Displays LM092LN [mm]
Tabelle 13.3 (links). Die darstellbaren Zeichen des LM092LN.
123
Teil 2: Komponenten und Applikationen
124
125