Pages by Andreas Hofmeier
An-H
eMail Impressum/Note
http[s]://www.abmh.de/wb/sw.wb.bs.ref.lcd.txt.html
Zu der Erkenntnis, dass Sprache wichtig ist, gelangte ich erst recht spät. Daher bitte ich um Verständnis, was einige Fehler angeht, und hoffe, dass meine alten Arbeiten trotzdem den einem oder anderen nützen.
Like to be free? ... then: Fight for Freedom

LCD / Interface / ISA-Bus


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

Anlagen:

Siehe auch:

ACHTUNG: Dieser Test unterliegt der GPL!


Pages by Andreas Hofmeier
An-H
eMail Impressum/Note
http[s]://www.abmh.de/wb/sw.wb.bs.ref.lcd.txt.html
Creative Commons License
(c) Andreas B. M. Hofmeier
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Germany License