LCD-Ansteuerung Elektor Lcd-Ansteuerung.pdf · 2020. 12. 1. · IC1 = 74HCT00 IC2 = 74HCT00 A1 A1 1...

4
Elektor 1/99 Das Projekt stellt eine Peripherieschal- tung für den 80C32-BASIC-Steuercom- puter dar, den Elektor vor einem Jahr vorstellte und der sich allgemeiner Beliebtheit erfreut. Ohne spezielle Vor- kenntnisse in der Mikrocontrollerpro- grammierung lassen sich interessante Experimente mit dem MCS51-System durchführen, da die Programmierung in einem einfachen und leicht zu erler- nenden BASIC-Dialekt erfolgt. Der Einplatinencomputer besteht - ganz wie die Bezeichnung vermuten läßt - aus einer kleinen Basisplatine mit der Mikrocontroller-Minimalkonfigu- ration und einer großen Erweiterungs- platine, auf die die Basisplatine gesteckt ist. Was fehlt, ist eine einfache und direkte Anschlußmöglichkeit für ein LC-Display. Die hier vorgestellten Lösungen erlauben den Anschluß eines Standard-LCD mit 216 Zeichen. Die Ansteuerung erfolgt wahlweise über ein 4-bit-Interface der Erweiterungs- platine oder ein 8-bit-Interface. Die zweite Variante ist zweifellos besser, da nur die Minimalkonfiguration mit der LCD-Platine zusammenarbeit. Für beide Varianten enthält der Artikel je ein kurzes BASIC-Listing. 4- BIT -I NTERFACE Die meisten alphanumerischen LC-Dis- plays basieren auf einem Vertreter der HD64780-Controllerfamilie. In der Lite- ratur zu diesem Thema wird die Mög- lichkeit, den Schaltkreis auch über vier Datenleitungen zu steuern, häufig Der 80C32-BASIC- Steuercomputer, den Elektor vor einem Jahr vorstellte, erlaubt eine Vielzahl interes- santer Experimente. Was fehlte und mit diesem Beitrag end- lich realisiert wird, ist die direkte Möglich- keit, ein LC-Display anzuschließen. Die Ansteuerung erfolgt wahlweise über ein 4- bit- oder ein 8-bit- Interface. 60 Entwurf von Andreas Köhler LCD-Ansteuerung Peripherie für 8032-BASIC-EPC MIKROPROZESSOREN

Transcript of LCD-Ansteuerung Elektor Lcd-Ansteuerung.pdf · 2020. 12. 1. · IC1 = 74HCT00 IC2 = 74HCT00 A1 A1 1...

Page 1: LCD-Ansteuerung Elektor Lcd-Ansteuerung.pdf · 2020. 12. 1. · IC1 = 74HCT00 IC2 = 74HCT00 A1 A1 1 Bild 1. Die Hardware der LCD-Ansteue-rung. In der 4-bit-Version müssen nur Bit

Elektor 1/99

Das Projekt stellt eine Peripherieschal-tung für den 80C32-BASIC-Steuercom-puter dar, den Elektor vor einem Jahrvorstellte und der sich allgemeinerBeliebtheit erfreut. Ohne spezielle Vor-kenntnisse in der Mikrocontrollerpro-grammierung lassen sich interessanteExperimente mit dem MCS51-Systemdurchführen, da die Programmierungin einem einfachen und leicht zu erler-nenden BASIC-Dialekt erfolgt.Der Einplatinencomputer besteht -ganz wie die Bezeichnung vermutenläßt - aus einer kleinen Basisplatine mitder Mikrocontroller-Minimalkonfigu-ration und einer großen Erweiterungs-platine, auf die die Basisplatinegesteckt ist. Was fehlt, ist eine einfacheund direkte Anschlußmöglichkeit für

ein LC-Display. Die hier vorgestelltenLösungen erlauben den Anschluß einesStandard-LCD mit 2⋅16 Zeichen. DieAnsteuerung erfolgt wahlweise überein 4-bit-Interface der Erweiterungs-platine oder ein 8-bit-Interface. Diezweite Variante ist zweifellos besser, danur die Minimalkonfiguration mit derLCD-Platine zusammenarbeit. Fürbeide Varianten enthält der Artikel jeein kurzes BASIC-Listing.

4 - B I T- I N T E R F A C EDie meisten alphanumerischen LC-Dis-plays basieren auf einem Vertreter derHD64780-Controllerfamilie. In der Lite-ratur zu diesem Thema wird die Mög-lichkeit, den Schaltkreis auch über vierDatenleitungen zu steuern, häufig

Der 80C32-BASIC-Steuercomputer, den

Elektor vor einemJahr vorstellte, erlaubt

eine Vielzahl interes-santer Experimente.

Was fehlte und mitdiesem Beitrag end-lich realisiert wird, istdie direkte Möglich-keit, ein LC-Displayanzuschließen. Die

Ansteuerung erfolgtwahlweise über ein 4-

bit- oder ein 8-bit-Interface.

60

Entwurf von Andreas Köhler

LCD-AnsteuerungPeripherie für 8032-BASIC-EPC

MIKROPROZESSOREN

Page 2: LCD-Ansteuerung Elektor Lcd-Ansteuerung.pdf · 2020. 12. 1. · IC1 = 74HCT00 IC2 = 74HCT00 A1 A1 1 Bild 1. Die Hardware der LCD-Ansteue-rung. In der 4-bit-Version müssen nur Bit

nicht berücksichtigt. Zur Steuerungdes LCD-Moduls sind außerdem nochdrei Statusleitungen erforderlich. Wirdauf ein Rücklesen des Status derAnzeige verzichtet, ist es sogar mög-lich, mit sechs Steuerleitungen auszu-kommen. Die geringe Anzahl von Lei-tungen erlaubt es dann, das LCD-Modul über nur einen8-bit-Ausgangsport anzusteuern. Fürdiesen Zweck ist der PortanschlußD01...D08 an den Klemmen K13...K16der Peripherieplatine geeignet (D07bleibt frei). Der Ausgangs-Leistungs-treiber ULN2803 ist nicht unbedingtnotwendig, muß aber in der Softwareberücksichtigt werden, da er die Sig-nale invertiert. Dies ist in den beidenProgrammversionen in kommentiertenListings der Fall. Listing 2 arbeitet mitder Originalschaltung, bei Listing 1sind die Portleitungen des ULN2803durch Drahtbrücken ersetzt. In diesemFall machen auch die LEDs an denPortleitungen wenig Sinn.Die Programme sind ausführlich kom-mentiert, so daß sich hier eine tiefgrei-fende Erläuterung erübrigt. Bis zurZeile 170 werden die Steuerbits (Artder Anzeige, Matrixformat, Reset, Cur-sor nach oben links und so weiter)gesetzt und von der Routine 700...780zum Displaycontroller gesteuert. DieBits des Ausgangsinterface sind wiefolgt zugeordnet:

Obwohl die LC-Anzeige auf 2⋅16 Zei-chen beschränkt ist, steuert der Con-troller immer 2⋅40 Zeichen an. Da aufeinen Rückkanal vom Display zumEPC verzichtet wird, muß die Softwaredafür sorgen, daß nach der Eingabeder 2⋅16 sichtbaren Zeichen (Pro-grammzeilen 250...300) die nicht sicht-baren Speicherstellen im Anzeigecon-troller mit Dummies (zum BeispielLeerzeichen !) gefüllt werden. Diesgeschieht in den Programmzeilen 310bis 350. Die Datenbits werden schließ-lich in der Routine 400...600 zum Con-troller geschickt, und zwar zunächstdie höher-, anschließend die nieder-wertigen vier Bits.Zu beachten ist, daß sich das Busy-flagerst nach der dritten Ausgabe von 03H(Zeile 60) auswerten läßt. Auffällig sindnoch eine Reihe von Warteschleifen, diejede Art von Handshake überflüssig

61Elektor 1/99

DP1

VS

S

VD

D

R/W

2x 16

VO

RS

D0

D1

D2

10

D3

11

D4

12

D5

13

D6

14

D7

1 2 3 4 5 6

E

7 8 9

10k

P1

D0

D1

D2

D3

D4

D5

D6

D7

A0

K3

K2

A15

D2

D1

D0

A0

A14

D7

D6

D5

D4

D3

K11 2

3

IC1a&

5 4

6

IC1b&

12 13

11

IC1d&

9

108

IC1c

&1

23

IC2a

&

A0

A14

A15

RD RW

A0

D4

D5

D6

D7

DO

5

DO

6

DO

1

DO

2

DO

3

DO

4

DO

8

5V

5V

7805

IC3

C1

100n

C2

100n

C4

100µ63V

C3

10µ16V

D11N4001

K45V

IC1

14

7

IC2

14

7

C5

100n

C6

100n

4 5

6

IC2b&

9 10

8IC2c

&

12 13

11IC2d

&

980100 - 11

5V

5V

IC1 = 74HCT00IC2 = 74HCT00

A1

A1

1

Bild 1. Die Hardware der LCD-Ansteue-rung. In der 4-bit-Version müssen nurwenige Bauelemente bestückt werden.Bit des Bedeutung LCD-Anschluß

Ausgangsinterface

Bit 7 (D08) LCD Latch Enable (high aktiv) Pin 6

Bit 6 frei

Bit 5 (D06) RS (L = Befehl, H = Daten) Pin 4

Bit 4 (D05) R/W (L = Write) Pin 5

Bit 3 (D04) LCD Datenbit 7 Pin 14

Bit 2 (D03) LCD Datenbit 6 Pin 13

Bit 1 (D02) LCD Datenbit 5 Pin 12

Bit 0 (D01) LCD Datenbit 4 Pin 11

machen. Die Warteschleifen sind mehrals großzügig bemessen und könnenbei Bedarf erheblich verkürzt werden.Die Stromversorgung der LC-Anzeigeübernimmt das Netzteil des Experimen-tierboards. Auf einen Festspannungs-regler kann man also genauso ruhigenGewissens verzichten wie auf eineirgendwie geartete aktive Elektronik.Was bleibt, zeigt die erfrischend kurzeStückliste: ein Trimmpoti zur Kontra-steinstellung, zwei Entkoppelkondensa-toren und eine Diode als Verpolschutz.

8 - B I T- I N T E R F A C EWesentlich eleganter ist natürlich derAnschluß eines LC-Displays direkt anden Controller, denn schließlich besit-zen Controller- und LCD-Platine auf-einander passende Pfostenverbinder.So erhält der LCD-Controller nebenden schon erwähnten Steuersignalen

RS (Adresse A1) und R/W (Adresse A0)alle acht Datenbits parallel. Ausgehendvon der Grundadresse 0C000H ergibtsich folgende Adreßzuordnung:

0C000H Befehl schreiben0C001H Befehl lesen0C002H Daten schreiben0C003H Daten lesen

Die Adresse 0C00H (Enable-Leitung anPin 6) wird durch eine UND-Verknüp-fung von WR und RD des Mikrocon-trollers sowie der Adreßleitungen A14und A15 dekodiert. Auf diese Weise istdie LCD-Platine mehrfach adressierbar,was insbesondere dann zum Tragenkommt, wenn mehrere Peripheriebau-steine am BASIC-EPC arbeiten.Das Listing 3 zeigt deutlich, daß die 8-bit-Version deutliche Vorteile aufwei-sen kann. Keine Warteschleifen hin-dern den Ablauf des kurzen, schnör-kellosen Programms.Die Platine der LCD-Ansteuerungmuß vollständig bestückt sein. Dazugehört auch ein Festspannungsreglermit den dazugehörenden Puffer- undEntkoppelkondensatoren. Der Einpla-tinencomputer muß nun nämlich überdas LCD-Board versorgt werden.

(980100)rg

Page 3: LCD-Ansteuerung Elektor Lcd-Ansteuerung.pdf · 2020. 12. 1. · IC1 = 74HCT00 IC2 = 74HCT00 A1 A1 1 Bild 1. Die Hardware der LCD-Ansteue-rung. In der 4-bit-Version müssen nur Bit

62 Elektor 1/99

Listing I 5 REM ULN 2803 gegen Bruecken ausgetauscht10 STRING 100,20 : REM Speicher fuer String20 K = 3 : GOSUB 700 : REM Init I30 FOR Z = 1 TO 400040 NEXT Z50 K = 3 : GOSUB 700 : REM Init 260 K = 3 : GOSUB 700 : REM Init 370 K = 2 : GOSUB 700 : REM Init.480 K = 2 : GOSUB 700 : REM 4 bit Interface90 K = 8 : GOSUB 700 : REM 2 Zeilen 5*7 Matrix100 K = 0 : GOSUB 700 : REM Display loeschen110 K = 1 : GOSUB 700120 K = 0 : GOSUB 700 : REM Cursor home130 K = 2 : GOSUB 700140 K = 0 : GOSUB 700 : REM inc Zaehler, nicht

schieben150 K = 6 : GOSUB 700160 K = O : GOSUB 700 : REM Display on, Cursor

on, B1inken

170 K = 15 : GOSUB 700180 REM ——————————————————-250 PRINT “ Es duerfen maximal 36 Zeichen

eingegeben werden bis Pfeil <”260 INPUT “ Welche Zeichenkette soll ausgegeben

werden :”,$(1)270 FOR Z = 1 TO 16280 D=ASC($(1),Z) : REM Eingabezeichen einzeln290 GOSUB 400300 NEXT Z310 FOR Y = 16 TO 39 : REM Speicher ohne

Anzeigefunktion320 D = 32 : REM des LCD Controllers mit

Dummyzeichen330 GOSUB 400340 NEXT Y :REM fuellen350 GOTO 250360 REM ——————————————————-400 REM Unterprogramm zur Datenausgabe410 L = D.AND.15 : REM Daten Low-Teil

(C) ELEKTOR980100-1

Stückliste8-bit-Ansteuerung

Widerstände:P1 = 10-k-Trimmpoti

Kondensatoren:C1,C2,C5,C6 = 100 nC3 = 10 µ/16 V stehendC4 = 100 µ/63 V stehend

Halbleiter:D1 = 4001IC1,IC2 = 74HCT00IC3 = 7805

Außerdem:K1 = 1⋅20poliger Pfostenverbinder,

femaleK2,K3 = 1⋅14poliger Pfostenverbin-

der, femaleK4 = 2polige Platinenan-

schlußklemme, RM5DP1 = LCD 2⋅16 Zeichen (z.B. Sharp

LM16A211)

Stückliste4-bit-Ansteuerung

Widerstände:P1 = 10-k-Trimmpoti

Kondensatoren:C2 = 100 nC3 = 10 µ/16 V stehend

Halbleiter:D1 = 4001

Außerdem:K4 = 2polige Platinenan-

schlußklenmme, RM5K5 = LCD 2⋅16 Zeichen (z.B. Sharp

LM16A211)

Bild 2. Die einseitige Platine des LCD-Moduls. In der 8-bit-Version wird die Pla-tine auf die des EPC gesteckt, die Verbin-der passen haargenau!

(C) ELEKTOR980100-1

C1

C2

C3

C4C5

C6D1

DP1

H1 H2

H3H4

H5 H6

H7H8

IC1IC2 IC3

K1

K2 K3

K4

P1

DO

4

DO

3

DO

2

D01

DO

5

DO

6

DO

8

980100-1

+0

2

Page 4: LCD-Ansteuerung Elektor Lcd-Ansteuerung.pdf · 2020. 12. 1. · IC1 = 74HCT00 IC2 = 74HCT00 A1 A1 1 Bild 1. Die Hardware der LCD-Ansteue-rung. In der 4-bit-Version müssen nur Bit

63Elektor 1/99

420 H = D.AND.240 : REM Daten High-Teil430 H = H/16 : REM High Daten verschieben440 H = H.OR.32 : REM Daten aktivieren450 XBY(0C000H) = H460 H = H.OR.160 : REM Latch aktivieren470 XBY(0C000H) = H480 H = H.AND.127 :REM Latch deaktivieren490 XBY(0C000H) = H500 FOR U = 1 TO 100510 NEXT U520 L = L.OR.32 : REM Daten aktivieren530 XBY(0C000H) = L540 L = L.OR.160 : REM Latch aktivieren550 XBY(0C000H) = L560 L = L.AND.127 : REM Latch deaktivieren

570 XBY(0C000H)·= L580 FOR U = 1 TO 100590 NEXT U600 RETURN610 REM ——————————————————-700 REM Unterprogramm fuer Kommandoausgabe710 XBY(0C000H) = K720 K = K.OR.128 : REM Latch aktivieren730 XBY(0C000H) = K740 K = K.AND.127 : REM Latch deaktivieren750 XBY(0C000H) = K760 FOR U = 1 TO 100770 NEXT U780 RETURN

Listing 3 (8 bit Interface)

10 STRING 100,20 : REM Speicher fuer String20 XBY(0C000H)=56 : REM 8 bit Interface,

zweizeilig, 5*7 Matrix30 XBY(0C000H)=15 : REM Display an, Cursor an,

Blinken an40 XBY(0C000H)=1 : REM Display loeschen50 PRINT “ Es duerfen maximal 16 Zeichen

eingegeben werden bis Pfeil <”60 INPUT “ Welche Zeichenkette soll ausgegeben

werden :”,$(1)70 FOR Z = 1 TO 1680 A=ASC($(1),Z) : REM Eingabezeichen einzeln90 XBY(0C002H)=A : REM ausgeben100 NEXT Z110 FOR H = 16 TO 39 : REM Speicher ohne

Anzeigefunktion120 XBY(0C002H)=32 : REM des LCD Controllers

mit Dummyzeichen130 NEXT H : REM fuellen140 GOTO 50

Listing 25 REM Originalschaltung mit ULN 28037 XBY(0C000H)= 255 : REM Grundzustand da

ULN 2803 negiert10 STRING 100,20 : REM Speicher fuer String20 K = 12 : GOSUB 700 : REM Init 130 FOR Z = 1 TO 400040 NEXT Z50 K = 12 : GOSUB 700 : REM Init 260 K = 12 : GOSUB 700 : REM Init 370 K = 13 : GOSUR 700 : REM Init 480 K = 13 : GOSUB 700 : REM 4 bit Interface90 K = 7 : GOSUB 700 : REM 2 Zeilen 5*7 Matrix100 K = 15 : GOSUB 700 : REM Display loeschen110 K = 14 : GOSUB 700120 K = 15 : GOSUB 700 : REM Cursor home130 K = 13 : GOSUB 70014O K = 15 : GOSUB 700 : REM inc Zaehler,

nicht schieben150 K = 9 : GOSUB 7O0160 K = 15 : GOSUB 700 : REM Display on,

Cursor on, Blinken170 K = 0 : GOSUB 700180 REM———————————————————250 PRINT.” Es duerfen maximal 16 Zeichen

eingegeben werden bis Pfeil <”260 INPUT “ Welche Zeichenkette soll ausgegeben

werden :”,$(1)270 FOR Z = 1 TO 16280 D=ASC($(1),Z) : REM Eingabezeichen einzeln290 D = D.XOR.255 : REM ULN 2803 ist negierend300 GOSUB 400310 NEXT Z320 FOR Y = 16 TO 39 : REM Speicher ohne

Anzeigefunktion330 D = 223 : REM des LCD Controllers mit

Dummyzeichen

340 GOSUB 400350 NEXT Y : REM (negiertes Space) fuellen360 GOTO 250370 REM———————————————————400 REM Unterprogramm zur Datenausgabe410 L = D.AND.15 : REM Daten Low-Teil420 H = D.AND.240 : REM Daten High-Teil430 H = H/16 : REM High Daten verschieben440 H = H.OR.16 : REM Schreiben aktivieren450 XBY(0C000H) = H460 H = H.AND.127 : REM Latch aktivieren470 XBY(0C000H) = H480 H = H.OR.128 :REM Latch deaktivieren490 XBY(0C000H) = H500 FOR U = 1 TO 100510 NEXT U520 L = L.OR.16 : REM Schreiben aktivieren530 XBY(0C000H) = L540 L = L.AND.127 : REM Latch aktivieren550 XBY(0C000H) = L560 L = L.OR.128 : REM Latch deaktivieren570 XBY(0C000H) = L580 FOR U = 1 TO 100590 NEXT U600 RETURN610 REM———————————————————700 REM Unterprogramm fuer Kommandoausgabe710 K = K.OR.48 : REM Kommando und Schreibenaktivieren720 XBY(0C000H) = K730 K = K.AND.127 : REM Latch aktivieren740 XBY(0C000H) = K750 K = K.OR.128 : REM Latch deaktivieren760 XBY(0C000H) = K770 FOR U = 1 TO 100780 NEXT U790 RETURN