PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD 40*4 zeigt nur in 3. Zeile ein Block



CapSob
11.04.2011, 14:41
Hallo Leute!

Hatte an meinem atmega8 ein 16*2 lcd hängen und bin nun seit heute auf eine 40*4 lcd umgestiegen. Das LCD ist ein Displaytech 404B und ist im 4-Bit-Modus angeschlossen.

Mit der nachfolgenden Programmierung blinkt nur in Zeile 3 an der 16. Stelle ein Block mit optisch Cursor on.

Irgendwas sinnvolles anzeigen geht gar nicht. Liegt es an der Programmierung oder am Aufbau? Wenn ihr bitte mal über den Code schauen könntet, dass ich den evetuell ausschließen könnte.

Danke im voraus!


' =================== CONTROLLER-KONFIG ===================
$regfile = "m8def.dat"
$framesize = 24
$swstack = 8
$hwstack = 32
$crystal = 16000000 ' 16 MHz

' =================== PORT-KONFIG ===================
Config Portb.0 = Output ' LCD: DB7
Config Portb.1 = Output ' LCD: DB6
Config Portb.2 = Output ' LCD: DB5
Config Portb.3 = Output ' LCD: DB4
Config Portb.4 = Output ' LCD: E
Config Portb.5 = Output ' LCD: E2
Config Portd.5 = Output ' LCD: RS
Config Portd.6 = Output ' LED2

' =================== LCD ===================
$lib "lcd4e2_rb.lib" ' Einbindung der LCD-Bibliothek für ein 2-Prozessor-Display (_rb = Kopie der Originalen mit angepassten Pins)
Dim ___lcde As Byte ' Systemvariable der LCD-Bibliothek (wichtig, bloß nicht ändern)
Config Lcd = 40 * 4
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , E2 = Portb.5 Rs = Portd.5
' Config Lcdbus = 4
Cursor Off

' =================== STARTUP-ROUTINE ===================
Gosub Lcdinit ' LCD initialisieren

' =================== HAUPTSCHLEIFE ===================
Do
' NIX
Loop

' =================== LCDINIT ===================
Lcdinit:
Cls
___lcde = 0
Locate 1 , 1
Lcd "Zeile 1"
Locate 2 , 1
Lcd "Zeile 2"

___lcde = 1
Locate 3 , 1
Lcd "Zeile 3"
Locate 4 , 1
Lcd "Zeile 4"
Wait 2 ' 2 Sekunden warten
Return

End

dussel07
11.04.2011, 15:13
Schau mal HIER (http://www.rn-wissen.de/index.php/Bascom_und_LCD%27s)
Da steht im Beispielprogramm nichts von:
Config Lcdbus = 4
Hast Du Dir die Bibliothek
$lib "Lcd4e2.lbx"
runtergeladen und in Bascom eingebunden (bzw. ist sie im richtigem Verzeichnis?)?

CapSob
11.04.2011, 16:48
Ich habe jetzt testweiße die Zeile mit "Config Lcdbus = 4" auskommentiert.
Und: $lib "lcd4e2_rb.lib" genommen. lib ist im richtigen ordner und die ports in der lib sind nun wie die im Programmcode (Kopie von der Originalen, deswegen "_rb").

Fazit: Selber Fehler wie zuvor...

Könnte es Programm-technisch noch etwas sein?

Edit: Habe gerade mal versucht, die "lcd4e2_rb.lib" zu kompilieren.. Kam Fehlermeldung mit Errors found... wie müsste den die "lcd4e2.lib" aussehen, dass ich mein LCD mit der obigen Pin-Konfig betreiben kann?

Michael
11.04.2011, 18:16
Hallo CapSob,

Config Lcdbus = 4 ist natürlich Quatsch bei einem AVR ohne Speicherbus.
Ein Lib wird auch nicht benötigt.
Da das Display aber eigentlich aus 2 parallelen "Displays" besteht, muß jedes für sich initialisiert werden:
___lcdno = 0
Initlcd
___lcdno = 1
Initlcd

Gruß, Michael

CapSob
11.04.2011, 20:04
Hab jetzt nachfolgenden Code (auch aus einem Beispiel im Bezug auf Michaels Post).

Beim Code komplilieren komt nun folgende Fehlermeldung:


Error 31 / Line 43 / Invalid Datatype [[0011] 0]
Error 93 / Line 43 / Variable not dimensioned [0 -> 0]
Error 31 / Line 43 / Invalid Datatype [[0011] 0]
Error 93 / Line 43 / Variable not dimensioned [0 -> 0]-> Line 43 wäre "End"... kP ?!?


$regfile = "m8def.dat"
$framesize = 24
$swstack = 8
$hwstack = 32
$crystal = 16000000 ' 16 MHz

Config Portb.0 = Output ' LCD: DB7
Config Portb.1 = Output ' LCD: DB6
Config Portb.2 = Output ' LCD: DB5
Config Portb.3 = Output ' LCD: DB4
Config Portb.4 = Output ' LCD: E
Config Portb.5 = Output ' LCD: E2
Config Portd.5 = Output ' LCD: RS

Config Lcd = 40 * 4
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , E2 = Portb.5 , Rs = Portd.5

Dim ___lcdno As Byte

___lcdno = 0
Initlcd
Cursor Off
Cls
___lcdno = 1
Initlcd
Cursor Off
Cls

___lcdno = 0
Cls
Locate 1 , 1
Lcd "Zeile 1"
Locate 2 , 1
Lcd "Zeile 2"

___lcdno = 1
Cls
Locate 1 , 1
Lcd "Zeile 3"
Locate 2 , 1
Lcd "Zeile 4"

End

for_ro
11.04.2011, 20:20
Mach mal ein Komma vor
Rs = PortD.5

CapSob
11.04.2011, 20:45
Mach mal ein Komma vor
Rs = PortD.5

lool.. Danke. Das wars. ;)

Wie heißts so schön: Manchmal sieht man vor lauter Bäumen den Wald nicht... :p