K (→Autor) |
K (→Mit Bascom, LCD’s ansteuern) |
||
(13 dazwischenliegende Versionen von 8 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}} | {|{{Blauetabelle}} | ||
Zeile 29: | Zeile 29: | ||
|3 | |3 | ||
|Vee | |Vee | ||
− | |Kontrastspannung (0V bis 5V) | + | |Kontrastspannung (0V bis 1,5V) |
|- | |- | ||
|4 | |4 | ||
Zeile 86: | Zeile 86: | ||
− | 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 | + | 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) | Hier ein LCD mit 16 Zeichen mal 2 Zeilen (16*2) | ||
Zeile 113: | Zeile 113: | ||
Den Kontrast jetzt so einstellen, dass man gerade, diese dunklen Vierecke nicht mehr sieht. | Den Kontrast jetzt so einstellen, dass man gerade, diese dunklen Vierecke nicht mehr sieht. | ||
− | ==== Anschlussmöglichkeiten des | + | ==== Anschlussmöglichkeiten des Displays ==== |
Das Display besitzt neben der Stromversorgung noch die Anschlüsse: RW, RS , E und 8 Datenleitungen. | Das Display besitzt neben der Stromversorgung noch die Anschlüsse: RW, RS , E und 8 Datenleitungen. | ||
Zeile 119: | Zeile 119: | ||
Es gibt zwei Möglichkeiten, wie man die 8 Datenleitungen des Displays an den AVR anschließen kann.<br> | 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. | Einmal den 8-Bit Modus und einmal den 4-Bit Modus. | ||
− | Beim 8 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 | + | 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> | Der Vorteil: <br> | ||
Zeile 128: | Zeile 128: | ||
Ich muss für ein Zeichen nun 2*4 Bit übertragen (= langsamer) | Ich muss für ein Zeichen nun 2*4 Bit übertragen (= langsamer) | ||
− | Aber | + | 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. |
Zeile 205: | Zeile 205: | ||
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. | 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 | + | 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 === | === Das Programm für das LCD === | ||
Zeile 214: | Zeile 214: | ||
Config Lcd = 16 * 2 | 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 | Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4 | ||
− | |||
Cls | Cls | ||
Zeile 233: | Zeile 232: | ||
Config Lcd = 16 * 2 | Config Lcd = 16 * 2 | ||
</pre> | </pre> | ||
− | Definiert das LCD | + | Definiert das LCD als 16*2 Anzeige. |
Sind somit zwei Zeilen mit jeweils 16 Zeichen.<br> | Sind somit zwei Zeilen mit jeweils 16 Zeichen.<br> | ||
Folgende weitere Typen von LCD’s könnte man angeben: | Folgende weitere Typen von LCD’s könnte man angeben: | ||
Zeile 242: | Zeile 241: | ||
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4 | Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4 | ||
</pre> | </pre> | ||
− | Definiert, wo das | + | 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 | + | 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 | Heißt also: Die Leitung Db4 vom LCD wird an den Port PD0 | ||
angeschlossen (Pin 2 am Mega8)<br> | angeschlossen (Pin 2 am Mega8)<br> | ||
Mit diesem Befehl, kann man das LCD auch an andere Pins vom AVR anschließen | Mit diesem Befehl, kann man das LCD auch an andere Pins vom AVR anschließen | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Zeile 261: | Zeile 253: | ||
Locate 1 , 1 | Locate 1 , 1 | ||
</pre> | </pre> | ||
− | Cls löscht das LCD | + | 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 | + | (Locate 2,10 wäre dann Ausgabe in Zeile 2 und an zehnter Position ) |
Zeile 270: | Zeile 262: | ||
Mit LCD kann man nun den Text ausgeben. :-) | 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== | ==Autor== | ||
* [[Benutzer:Roberto|Roberto]] | * [[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