Aus RN-Wissen.de
Wechseln zu: Navigation, Suche


Mit Bascom, LCDs ansteuern

LCD

Ein LCD kann man mit wenig Aufwand an einen AVR anschließen. Ein paar Leitungen, ein kleines Programm und schon hat man eine Anzeige für den AVR.

Es gibt unter den Displays zwei große Gruppen.

Die einen sind die Text-Displays (können nur Text und deren Sonderzeichen darstellen), die anderen sind die Grafik-Displays.

Hier geht es um Text- Displays.

Anschlüsse:

Die meisten Text-LCDs haben einen 14 poligen bzw. einen 16 poligen Anschluss. 14 polig ist meist ein LCD ohne Hintergrundbeleuchtung und beim 16 poligen ist meist der Pin 15 und 16 die Beleuchtung.

Die Anschlüsse vom LCD:

1 Vss GND
2 Vcc 5V
3 Vee Kontrastspannung (0V bis 1,5V)
4 RS Register Select (Befehle/Daten)
5 RW Read/Write
6 E Enable
7 DB0 Datenbit 0
8 DB1 Datenbit 1
9 DB2 Datenbit 2
10 DB3 Datenbit 3
11 DB4 Datenbit 4
12 DB5 Datenbit 5
13 DB6 Datenbit 6
14 DB7 Datenbit 7
15 Beleuchtung GND
16 Beleuchtung 5V über mindestens einen 5 Ohm Widerstand anschließen)


In den meisten Displays wird der Controllerchip HD44780 von Hitachi eingesetzt, oder auch der kompatible Bruder SED1278 von Epson. Auch in Verbindung mit dem Chip HD44100. (Auf der Rückseite vom Display nachschauen) Für alle diese trifft das obige Anschlussbild zu.

Hier ein LCD mit 16 Zeichen mal 2 Zeilen (16*2)

LCD 16 2 Vorderseite.jpg


Und davon die Rückseite, mit Chip HD44100 und HD44780

LCD 16 2 Rückseite kleiner.jpg



Hier ein LCD mit 24 Zeichen in je 2 Zeilen

LCD 24 2 Vorderseite kleiner.jpg

Und die Rückseite

LCD 24 2 Rückseite kleiner.jpg

Anschluss

Die Stromversorgung eines LCD sieht so aus:

Stromversorgung.jpg


Mit dieser Beschaltung kann man schon mal probieren, ob man durch verdrehen des Kontrast-Potie, dunkle Vierecke zu sehen bekommt. Wenn ja, ist bis hier her schon mal alles ok . Den Kontrast jetzt so einstellen, dass man gerade, diese dunklen Vierecke nicht mehr sieht.

Anschlussmöglichkeiten des Displays

Das Display besitzt neben der Stromversorgung noch die Anschlüsse: RW, RS , E und 8 Datenleitungen.

Es gibt zwei Möglichkeiten, wie man die 8 Datenleitungen des Displays an den AVR anschließen kann.
Einmal den 8-Bit Modus und einmal den 4-Bit Modus. Beim 8 Bit Modus schließt man alle 8 Datenleitungen an den AVR und kann in einem Schritt ein Zeichen (=1 Byte )in das Display übertragen. Oder man macht es im 4 Bit Modus mit nur 4 Datenleitungen und muss dafür 2*4 Bit für ein Zeichen übertragen (4 Bit = ein Nibble)

Der Vorteil:
Ich erspare mir somit 4 Leitungen des AVR’s und kann sie anderweitig nutzen.

Der Nachteil:
Ich muss für ein Zeichen nun 2*4 Bit übertragen (= langsamer)

Aber da in diesem Fall die Geschwindigkeit nicht so eine große Rolle spielt und wir lieber 4 Leitungen mehr am AVR haben möchten, schließen wird das Display im 4Bit Modus an.


Anschlussbelegung für das Display im 4-Bit Modus: (Als Beispiel am Port D)

Display Am AVR
1 Vss GND
2 Vcc 5V
3 Vee Poti (siehe oben)
4 RS PD4 am AVR
5 RW GND
6 E PD5 am AVR
7 DB0 GND
8 DB1 GND
9 DB2 GND
10 DB3 GND
11 DB4 PD0 am AVR
12 DB5 PD1 am AVR
13 DB6 PD2 am AVR
14 DB7 PD3 am AVR
15 Beleu. frei
16 Beleu. frei

Die vier Datenleitungen vom Display, die wir nicht brauchen, legen wir auf Masse. Zu den vier Datenleitungen brauchen wir noch die Leitungen RS und E. Den Anschluss RW brauchen wir nicht und legen ihn deshalb auch auf Masse.

Wir kommen somit für das Display mit 6 Datenleitungen aus, die wir alle an das Port D (vom Mega 8) anschließen.

Das Programm für das LCD

 $regfile = "m8def.dat"
 $crystal = 4000000

 Config Lcd = 16 * 2
 Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
 
 Cls
 Locate 1 , 1
 Lcd "Hallo Welt"

Dieses Programm gibt den Text „Hallo Welt“ auf dem Display aus.

Erklärung:

 $regfile = "m8def.dat"
 $crystal = 4000000

Definiert den Mega8 als Prozessor und einen 4 Mhz Quarz.


Config Lcd = 16 * 2

Definiert das LCD als 16*2 Anzeige. Sind somit zwei Zeilen mit jeweils 16 Zeichen.
Folgende weitere Typen von LCD’s könnte man angeben: 16*1 , 16*2 , 16*4 , 20*2 , 20*4 , 40*4


Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4

Definiert, wo das LCD an den AVR angeschlossen wird. Db4, Db5, Db6....., E , RS sind die Pins vom LCD (siehe Tabelle)
Portd.0, Portd.1 u.s.w., sind die Ports vom Mega8 (Port D)
Heißt also: Die Leitung Db4 vom LCD wird an den Port PD0 angeschlossen (Pin 2 am Mega8)
Mit diesem Befehl, kann man das LCD auch an andere Pins vom AVR anschließen


Cls
Locate 1 , 1

Cls löscht das LCD und Locate 1,1 definiert die nächste Ausgabe mit 1.) Zeile, 1.)Position
(Locate 2,10 wäre dann Ausgabe in Zeile 2 und an zehnter Position )


Lcd "Hallo Welt"

Mit LCD kann man nun den Text ausgeben. :-)

Sonderfall: LCDs mit mehr als 80 Zeichen

(mehr kann der Hitachi Controller nicht verarbeiten) Dieses betrifft z.B. die Module mit 4 * 27, bzw. 4 * 40 Zeichen. Um das Problem zu lösen wurde diesen Displays eine zweite E Leitung spendiert, alle anderen Leitungen des zweiten Controllers sind parallel angeschlossen. In jedem Fall ist das Datenblatt des Herstellers zu Rate zu ziehen. In Bascom wird eine zusätzliche Bibliothek geladen um solche Displays ansprechen zu können. Dadurch ist es möglich quasi 2 Displays getrennt anzusteuern, bei einem 4 Zeilen-Display sind die beiden oberen und die zwei unteren getrennt zu selektieren.

Das zusätzliche Programm für das LCD, bzw. die Änderungen

'Einbindung der LCD-Bibliothek für ein 2-Prozessor-Display
 $lib "lcd4e2.lbx"

'Bascom kennt keine Display mit 27 * 4 Zeichen, daher 40 * 4 verwenden
 Config Lcd = 40 * 4

'man achte auf die Ergänzung E2
 Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , E2 = Portd.6 ,Rs = Portd.4

' Systemvariable der LCD-Bibliothek (wichtig, bloß nicht ändern)
   Dim ___lcde As Byte

' wählt die beiden oberen Zeilen aus
 ___lcde = 0 

' löscht die beiden oberen Zeilen
   Cls
' wählt die obere Zeile aus
   Upperline
' schreibt in die erste Zeile an Position 3
   Locate 1 , 3
' den Text in Anführungszeichen
   Lcd "Zeile 1"
' wählt die zweite Zeile aus
   Lowerline
' schreibt in die zweite Zeile an Position 2
   Locate 2 , 2
' in diesem Fall den Inhalt der Variablem mit dem Namen Variable
   Lcd Variable
' unterdrückt den Cursor
   Cursor Off

' wählt die beiden unteren Zeilen aus
   ___lcde = 1
   Waitms 100
   Cls
   Thirdline
   Locate 1 , 1
   Lcd "Zeile 3"
   Fourthline
   Locate 2 , 1
   Lcd "Zeile 4"
   Cursor Off

Autor


Siehe auch

Weblinks