(→Anschlüsse:) |
K (→Mit Bascom, LCD’s ansteuern) |
||
(47 dazwischenliegende Versionen von 9 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | == Mit Bascom, | + | == Mit Bascom, LCDs ansteuern == |
− | ===LCD | + | ===LCD=== |
− | Ein 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. | 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. | Hier geht es um Text- Displays. | ||
Zeile 13: | Zeile 13: | ||
====Anschlüsse:==== | ====Anschlüsse:==== | ||
− | Die meisten Text- | + | Die meisten Text-LCDs haben einen 14 poligen bzw. einen 16 poligen Anschluss. |
− | 14 | + | 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 | + | Die Anschlüsse vom LCD: |
− | {| | + | {|{{Blauetabelle}} |
|1 | |1 | ||
|Vss | |Vss | ||
Zeile 29: | Zeile 29: | ||
|3 | |3 | ||
|Vee | |Vee | ||
− | |Kontrastspannung (0V bis 5V) | + | |Kontrastspannung (0V bis 1,5V) |
|- | |- | ||
− | 4 RS Register Select (Befehle/Daten) | + | |4 |
− | 5 RW Read/Write | + | |RS |
− | 6 E Enable | + | |Register Select (Befehle/Daten) |
− | 7 DB0 Datenbit 0 | + | |- |
− | 8 DB1 Datenbit 1 | + | |5 |
− | 9 DB2 Datenbit 2 | + | |RW |
− | 10 DB3 Datenbit 3 | + | |Read/Write |
− | 11 DB4 Datenbit 4 | + | |- |
− | 12 DB5 Datenbit 5 | + | |6 |
− | 13 DB6 Datenbit 6 | + | |E |
− | 14 DB7 Datenbit 7 | + | |Enable |
− | 15 Beleuchtung GND | + | |- |
− | 16 Beleuchtung 5V über mindestens einen 5 Ohm Widerstand anschließen) | + | |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) | ||
+ | [[Bild:LCD 16 2 Vorderseite.jpg|center]] | ||
+ | Und davon die Rückseite, mit Chip HD44100 und HD44780 | ||
+ | [[Bild:LCD_16_2_Rückseite_kleiner.jpg|center]] | ||
+ | Hier ein LCD mit 24 Zeichen in je 2 Zeilen | ||
+ | [[Bild:LCD_24_2_Vorderseite_kleiner.jpg|center]] | ||
+ | Und die Rückseite | ||
+ | [[Bild:LCD_24_2_Rückseite_kleiner.jpg|center]] | ||
+ | ==== Anschluss ==== | ||
+ | Die Stromversorgung eines LCD sieht so aus: | ||
+ | [[Bild:Stromversorgung.jpg|center]] | ||
+ | |||
+ | 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.<br> | ||
+ | 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: <br> | ||
+ | Ich erspare mir somit 4 Leitungen des AVR’s und kann sie anderweitig nutzen. | ||
+ | Der Nachteil:<br> | ||
+ | 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) | ||
+ | |||
+ | {|{{Blauetabelle}} | ||
+ | | | ||
+ | |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 === | ||
+ | <pre> | ||
+ | $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" | ||
+ | </pre> | ||
+ | Dieses Programm gibt den Text „Hallo Welt“ auf dem Display aus. | ||
+ | |||
+ | '''Erklärung:''' | ||
+ | <pre> | ||
+ | $regfile = "m8def.dat" | ||
+ | $crystal = 4000000 | ||
+ | </pre> | ||
+ | Definiert den Mega8 als Prozessor und einen 4 Mhz Quarz. | ||
+ | |||
+ | |||
+ | <pre> | ||
+ | Config Lcd = 16 * 2 | ||
+ | </pre> | ||
+ | Definiert das LCD als 16*2 Anzeige. | ||
+ | Sind somit zwei Zeilen mit jeweils 16 Zeichen.<br> | ||
+ | Folgende weitere Typen von LCD’s könnte man angeben: | ||
+ | 16*1 , 16*2 , 16*4 , 20*2 , 20*4 , 40*4 | ||
+ | |||
+ | |||
+ | <pre> | ||
+ | Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4 | ||
+ | </pre> | ||
+ | Definiert, wo das LCD an den AVR angeschlossen wird. Db4, Db5, Db6....., E , RS sind die Pins vom LCD (siehe Tabelle)<br> | ||
+ | Portd.0, Portd.1 u.s.w., sind die Ports vom Mega8 (Port D)<br> | ||
+ | Heißt also: Die Leitung Db4 vom LCD wird an den Port PD0 | ||
+ | angeschlossen (Pin 2 am Mega8)<br> | ||
+ | Mit diesem Befehl, kann man das LCD auch an andere Pins vom AVR anschließen | ||
+ | |||
+ | |||
+ | |||
+ | <pre> | ||
+ | Cls | ||
+ | Locate 1 , 1 | ||
+ | </pre> | ||
+ | Cls löscht das LCD und Locate 1,1 definiert die nächste Ausgabe mit 1.) Zeile, 1.)Position<br> | ||
+ | (Locate 2,10 wäre dann Ausgabe in Zeile 2 und an zehnter Position ) | ||
+ | |||
+ | |||
+ | <pre> | ||
+ | Lcd "Hallo Welt" | ||
+ | </pre> | ||
+ | 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 === | ||
+ | |||
+ | <pre> | ||
+ | '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 | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | ==Autor== | ||
+ | * [[Benutzer:Roberto|Roberto]] | ||
− | |||
==Siehe auch== | ==Siehe auch== | ||
* [[Avr]] | * [[Avr]] | ||
* [[Bascom]] | * [[Bascom]] | ||
+ | * [[LCD an RN-Control]] | ||
+ | |||
+ | ==Weblinks== | ||
+ | * [http://www.sprut.de/electronic/lcd/index.htm#einleitung Sprut] | ||
+ | |||
[[Kategorie:Robotikeinstieg]] | [[Kategorie:Robotikeinstieg]] | ||
[[Kategorie:Microcontroller]] | [[Kategorie:Microcontroller]] | ||
[[Kategorie:Software]] | [[Kategorie:Software]] | ||
+ | [[Kategorie:Praxis]] | ||
[[Kategorie:Quellcode Bascom]] | [[Kategorie:Quellcode Bascom]] |
Aktuelle Version vom 30. April 2012, 21:22 Uhr
Inhaltsverzeichnis
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)
Und davon die Rückseite, mit Chip HD44100 und HD44780
Hier ein LCD mit 24 Zeichen in je 2 Zeilen
Und die Rückseite
Anschluss
Die Stromversorgung eines LCD sieht so aus:
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