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