LCD / Interface / ISA-Bus Was ist das ein LCD? Ein LCD ist ein "Liquid Crystal Display". Es handelt sich hier um einen Kristall, welcher seine Ausrichtung bei anlegen einer Spannung ändert. Legt man nun mehrere von diesen Kristallen übereinander, so kann man nur Durchsehen, wenn ihre Ausrichtung gleich ist. (Abb) Es handelt sich hierbei um einen Optischen Effekt: Ist die Ausrichtung zweier übereinanderliegender Schichten ungleich, können wir nicht hindurchsehen, wir sehen eine schwarte Fläche. [Demo mit Plättchen] Auf diesem Prinzip basieren nun unsere LCD. Durch eine geringe Spannung wird die Ausrichtung an gewissen Stellen umgekehrt, so werden diese Stellen für uns sichtbar. Einsatzgebiete sind Anzeigen, die wenig Strom verbrauchen. (z.B. Taschen- oder Armbanduhren). [Zeige UHR] Bei meinem Vorfürmodell handelt es sich um ein "Dot Matrix Liquid Crystal Display". (Abb) Auf einer Dot Matrix sind, wie der Name schon sagt, viele Punkte in einer Matrix angeordnet. Also zum Beispiel 8 Zeilen und 5 Punkte je Block. Das ganze mal 16Blöcke, also 8x5x16. Um nun die ansteuerung dieser Punkte zu vereinfachen, steuert man diese in einer Matrix an: Der eine Pol der jedes Punktes ist horizontal, der andere Vertikal verbunden. Auf diese Weise hat man für das gesammte Display "nur" 80 (5 * 16) + 10 = 110 Anschlüsse statt 80 (8 * 16) * 10 = 800. Die ansteuerung so einer Matrix ist denkbar einfach: Der Trick: Man beschaltet die Punkte in Reihe nacheinander. Da das LCD träge ist, als die Kristalle nicht sofort in ihre Ausgangslage zurückfallen, bemerkt das Menschliche Auge nicht das die Punkte dauernd an und aus geschaltet werden. Und das Menschliche Auge ist ja auch extrem träge. Nagut, das ist natürlich eine extreme Arbeit! Dieser Vorgang muß einige hundert, wenn nicht tausend mal, in der Sekunde wiederholt werden. Zum Glück gibt es dafür einen Mikrochip, genannt HD44780A00 (Oder Vergleichbar). Dieser macht diese ganze Arbeit der Ansteuerung der Punkte komplett für uns. Sogar dir Umwandlung zwischen ASCII-Zeichen und ``Punktemuster'' erledigt er. [Zeichentabelle] Wir müssen ihm nur sagen, welches Zeichen wo hinsoll. Zum aufbau dieses ICs: Was braucht er den um zu funktionieren. [Blockschaltbild des ICs] Also er braucht einen ROM, in dem die Zeichentabelle Steht [im Character generator ROM (CGROM) 9920 bits]. Des weiteren muß er die Zeichen, die er anzeigen soll irgend wo Speichern, dies tut er im [Display data RAM (DDRAM) 80 x 8 bits] Zur Umwandlung der eingehenden Zeichen ins Muster braucht er zusätzlich noch etwas Speicher, den [Character generator RAM (CGRAM) 64 byte]. Soweit zu den Speichern. Er braucht noch eine menge weiterer Teile, auf die ich aber nicht komplett eingehen kann. Hier eine kleine auswahl: Das Busy-Flag: Hiermit teilt uns der IC mit, ob er Daten empfangen kann oder noch "beschäftigt" ist welche zu verarbeiten. "MPU-Interface, In- Ouput buffer": Dieses Teil übernimmt die Kommunikation mit der Außenwelt, sprich dem Rest des Computers. Kümmert sich zum Beispiel auch um 4 oder 8Bit Interface, Busy-Weitergabe, unterscheidung zwischen Daten und Instruktionen, etc. "Reset circuit ACL": Sorgt dafür, das beim Einschalten alle werte auf default gesetzt werden, das LCD betriebsbereit ist. IR,DR: Register: Zwischenspeicher für Instruktionen bzw. Daten. Instruktion decoder: Dieses Teil kümmert sich um die Auswertung der Kommandos, die an das LCD gegeben wurden. Adress counter: Sorgt dafür, das immer das richtige Byte im Speicher überschrieben wird. Zum Beispiel: Wenn man Andreas in das LCD schreibt, muß jeder Buchstabe, auf das nächste Segment geschrieben werden. Comman signal driver, Segment signal driver sorgen für das Stetigen wiederansprechen der Einzelnen Punkte auf dem LCD. Interface Ein Interface ist eigentlich eine Schnittstelle zwischen zwei Systemen. Zum Beispiel kann die Parallele oder Serielle Schnittstelle als Interface gesehen werden. Diese verbindet zum Beispiel ISA-Bus des Computers mit dem Seriellen Übertragungssystem welches zum Beispiel zur Maus oder Modem führt. Aus der anderen Seite muß auch wieder ein Interface sein. Eine Maus hat auch ein Interface, nämlich ein welches zur die Kommunikation über die Serielle zum PC übernimmt. Betrachtet man die Sache etwas mehr menschlich, ist die Maus ein Interface zum Menschen. Zur ansteuerung des LCD-Interfaces komme ich nach der Einführung in ein BUS-System. Das ISA-Bus System Alle Komponenten eines Computers, sei es eine Primitive Steuerung mit einem 8086 oder der neuste PC, sind über ein Bus-System miteinander verbunden. Sprich alle Daten gehen irgend wann mal über den ISA-Bus. Dabei ist es eine wichtige Eigenschaft, daß zum Bus beliebig Geräte hinzugefügt bzw. entfernt werden können. Man kann die Gesamtheit des Busses in drei grundlegende Teile aufteilen: Der Datenbus: Er besteht aus acht Leitungen, über die sämtliche Daten im System transportiert werden. Die Übertragungsrichtung wird bei jedem Zugriff je nach Zugriffsart neu festgelegt. Der Adressbus: Er dient zur Unterscheidung der am Bus vorhandenen Geräte, da diese alle an denselben Leitungen parallel angeschlossen sind. Dazu wird jedem Gerät eine eindeutige Adresse bzw. ein Adressbereich zugeordnet. Erscheint nun eine dieser Adressen auf dem Adressbus, so aktiviert das angesprochene Gerät seine Datenleitungen. Alle anderen Geräte verbleiben im hochohmigen Zustand, d. h. sie sind für das System nicht erkennbar. Der Kontrollbus: Er steuert Art, Richtung und schrittweisen Ablauf der Übertragungen auf dem Bus. Bei dem PC-ISA-Bus wird im grundlegenden zwischen zugriff auf Speicher (MEM) und Ein-/Ausgabe- Geräten (Steckkarten) unterschieden. Wobei noch dazugesagt werden muß, das mit Speicher hier der RAM (Hauptspeicher) ROM (BIOS) gemeint ist. Der Zugriff auf "externe" bzw. erweiterte Speicher ist hier der Zugriff auf Disketten oder Festplatten, wobei dies nichts mit, auf das Gehäuse bezogen, externen Geräten zu tuen hat. Sondern nur auf den Prozessor-Bus bezogen extern. Das Prinzip ist eigentlich ganz einfach, zuerst werden die Daten (jemals 1Byte/2Byte beim 16-Bit-Bus) auf den Datenbus gelegt, dann wird die gewünschte Adresse an den Adress-Bus angelegt und zu letzt teilt der Prozessor noch mit einigen Kontroll-Bits mit, ob er vom Speicher lesen oder schreiben, oder auf IO-Ports schreiben oder lesen will. Wenn er dies alles getanen hat sagt er über AEN das die anliegenden Daten jetzt gültig sind. Sehen wir uns mal die PINS auf dem ISA-Bus an: SDxx: Data-Bus (Gut zu sehen, die 16-Bit Erweiterung) SAxx: Adress-Bus AEN: Adress Enable (Jetzt sind die Daten gültig) IOR*: IO-Read (Lesen von IO-Port) IOW*: IO-Write (Schreibe auf IO-Port) SMEMR*: Lese aus Speicher (8Bit-Bus) MEMR*: Lese aus Speicher (16Bit-Bus) SMEMW*: Schreibe in Speicher (8 Bit-Bus) MEMW*: Schreibe in Speicher (16 Bit-Bus) RESET: Reset Hardware (For MS-Windows only) IRQx: Interrupt (Unterbricht das laufende Programm im Prozessor, und setzt die ausführung an einer gewissen stelle weiter) * = active low: Bedeutet dieses Bit ist gültig (wahr) bei 0-Signal LCD-Interface Das LCD verfügt über viele PINs, die es auch im ISA-Bus gibt: Pin 1 - GND (0V) Pin 2 - +5V Pin 3 - LCD Contrast - 0V to +5V Pin 4 - R/S (Data/Instruction Select) Pin 5 - R/W (Data Read/Write Select) Pin 6 - E (Data/Instruction Strobe) oder AEN (Adress Enable) Pin 7 - Data Bit 0 (SD0) Pin 8 - Data Bit 1 (SD1) Pin 9 - Data Bit 2 (SD2) Pin 10 - Data Bit 3 (SD3) Pin 11 - Data Bit 4 (SD4) Pin 12 - Data Bit 5 (SD5) Pin 13 - Data Bit 6 (SD6) Pin 14 - Data Bit 7 (SD7) Die Auswertung, welche Adresse der BUS gerade anspricht, übernimmt der IC nicht. Hier muß man ein Interface bauen, welches das LCD mit dem ISA-Bus verbindet. Man könnte z.B. je eine Adresse für Daten und Instruktionen vergeben. Aber, da es nicht ungefährlich (für den Computer) ist am ISA-Bus rum zu fummeln und ich einfach zu faul war mir eine Steck-Karte zu bauen habe ich das LCD mit der Parallelen Schnittstelle verbunden: Die Parallelen Schnittstelle hat allerdings nur 8Bits, da ich noch Steuer-Bits brauche, muß ich das LCD im 4-Bit-Modus betreiben. Das heißt nicht anderes, als das man nur die "hohen" 4Bit der LCD-Daten-Bits benutzt, man muß nur bedenken, das man für jedes Byte welches man überträgt zwei Schritte braucht! 4-Bit-Verbindung: l g a n r D u a C t P L u t e r t N N d e i I I e W B P P B --------------- 1 0 2 11 Data Bit 4 2 1 3 12 Data Bit 5 4 2 4 13 Data Bit 6 8 3 5 14 Data Bit 7 16 4 6 4 RS (1=Schreibe in RAM // 0=Commando) 32 5 7 6 E (Clock - Adress Enable) GND 1 GND +5V 2 +5V GND 3 Contrast GND 5 R/-W (0=Write // 1=Read) Schritte zum Beschreiben: 1 2 3 4 5 # 1: RS Bit bei bedarf setzen ---------|---|---|---|---|--- # 2: E - Steigende Flanke RS ____|###|###|###|###|___ # 3: Daten werden angelegt R/-W ____|___|___|___|___|___ # 4: E - Fallende Flanke E ____|___|###|###|___|___ # (Daten werden übernommen) Data ____|___|___|###|###|___ # 5: Daten/RS - Reset Hinweise, Tips: Also jetzt sollten ja alle ISA-Karten selber bauen können, denn die Signale kann man mit "normalen" TTL-Bausteinen etc. verarbeiten. Bevor ich allerdings mit nicht laufenden Basteleien erschlagen werde, hier einige Tips zum basteln mit ISA-Karten: Den ISA-Bus kann man nicht beliebig verlängern! Man sollte ihn nicht einmal aus dem Rechner herausleiten! Denn der Widerstand der Leitungen, die Kapazität der Leitungen und durch die hohe Frequenz können Störungen in anderen elektrischen Geräten entstehen. Kurzschlüsse unbedingt vermeiden! An jeden TTL-Ausgang sollten nur Maximal 10 Eingänge anderer TTLs angeschlossen werden! Der ISA-Bus kann nicht alles Treiben! Jede Steck-Karte enthält deshalb einen Daten-Treiber (74245) oder Buffernde Treiber, sie halten die Daten, Letch (74374). Immer die Zeit im Auge behalten! Jedes Verknüpfungsglied braucht einige Zeit, schaltet man zuviele nacheinander, überschreitet man schnell die Zulässige Zugriffszeit. Da kommen dann so komische Phänomene zu standen: Gestern ging es doch noch! Links zu Weiteren Referaten und Datenblättern auf meiner HomePage: http://www.bfe.uni-bremen.de/intlab/hofmeier/links.html#Elektrotechnik http://www.bfe.uni-bremen.de/intlab/hofmeier/ http://hofmeier.home.pages.de ISA-BUS: IOCHK* SD7 SD6 SD5 SD4 SD3 SD2 SD1 SD0 IOCHRDY AEN SA19 SA18 SA17 SA16 SA15 SA14 SA13 SA12 SA11 SA10 SA09 SA08 SA07 SA06 SA05 SA04 SA03 SA02 SA01 SA00 0V *** 0V RESET +5V IRQ9 -5V DRQ2 -12V SRDY +12V KEY SMEMW* SMEMR* IOW* IOR* DACK3* DRQ3 DACK1* DRQ1 Refresh BCLK IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 DACK2* TC BALE +5V OSC 0V 0V Parallele Schnittstelle: Pin Name Beschreibung 1* Strobe Anligenda Daten sind Gültig 2..9 Daten Daten (1Byte) 11 Busy Geräht (z.B. Drucker) nicht empfangsbereit 18-25 GND Masse