PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [gelöst] Zwei Display am AVR - geht nicht



Jon
24.11.2007, 09:26
Hallo,
nachdem ich mich länger nicht gemeldet habe, habe ich nun mal wieder ein Problem, bei dem mir kein weiterer Lösungsweg einfällt.
Deswegen hoffe ich, dass jemand von euch mir helfen kann.

Ich habe Anfang 2007 mal nachgefragt, wie ich zwei LCDs an einen AVR anschließe. Da wurde mir gesagt, ich müsste das so machen, als ob ich ein 4*40 Zeichen LCD hätte, also DB4-7 und RS an die selben µC Pins, nur E der Dispalys an verschiedene Pins. Das habe ich auch gemacht. Die Pinbelegung sieht nun so aus:
E1 = B.1
E2 = B.6
RS = B.0
DB4 = B.5
DB5 = B.4
DB6 = B.3
DB7 = B.2

Und das Programm dazu sieht so aus:

'Die üblichen Anfangsdefinitionen, ohne die es nicht geht
$regfile = "m32def.dat"
$crystal = 11059200
$baud = 19200

'LCD
$lib "lcd4e2.lbx"
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , E = Portb.1 , E2 = Portb.6 , Rs = Portb.0
Config Lcdbus = 4
Dim ___lcde As Byte
Initlcd
Cursor Off Noblink

'Main +++

___lcde = 0
Locate 1 , 1 : Lcd "Hallo"
Wait 3
___lcde = 1
Locate 1 , 1 : Lcd "Hallo"
Wait 3

End
Aber das will irgendwie nicht so, wie ich will...
Beide LCDs zeigen einfach nichts an. Wenn ich immer nur eins betreibe funktionieren beide.

Habe ich irgendetwas falsch gemacht?
Könnte es sein, dass ich die Libery bearbeiten muss, da in der Pins festgelegt werden, an die das LCD angeschlossen ist, bzw. bei mir nicht angeschlossen ist. Wie müsste ich das ändern? Da müsste mir jemand helfen, da ich kein ASM kann.

Ich hoffe, ihr könnt mir weiterhelfen!

Viele Grüße,
jon

for_ro
24.11.2007, 09:51
Hallo,
ich habe das so gemacht:


$crystal = 16000000
$regfile = "m128def.dat"

Config Lcd = 40 * 4 'configure lcd screen
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E2 = Portc.3 , E = Portc.2 , Rs = Portc.0

Dim ___lcdno As Byte 'Umschaltbyte für Anzeige :

___lcdno = 0 'auf Chip 1 schalten
Initlcd 'die beiden oberen Zeilen
Cursor = Off 'initialisieren
Cls 'die beiden oberen Zeilen löschen
___lcdno = 1 'auf Chip 2 schalten
Initlcd 'die beiden unteren Zeilen
Cursor = Off 'initialisieren
Cls 'die beiden unteren Zeilen löschen

Locate 1 , 1 : Lcd "Test 1. Zeile"
Locate 2 , 1 : Lcd "Test 2. Zeile"
___lcdno = 1 'auf Chip 2 schalten
Locate 1 , 1 : Lcd "Test 3. Zeile"
Locate 2 , 1 : Lcd "Test 4. Zeile"


Ich habe keine Lib verwendet, und die Umschaltvariable heißt dann ___lcdno.

Gruß

Rolf

Jon
24.11.2007, 11:55
Danke! So funktioniert es.

Wäre ich doch bloß früher darauf gekommen. Dann hätte ich die letzte Nacht ein paar Stunden länger geschlafen #-o

jon