Hallo zusammen,
habe gestern Abend eine komische Beobachtung gemacht die ich mir nicht erklären kann und bei der ich Hilfe gebrauchen könnte.
Habe versucht ein LCD-Display DOG-M 16x3 unter BASCOM in einer GOSUB-Routine zu initialisieren. Interessanter Weise fuktioniert dann der darauf folgende Locate 2,1 : Lcd "Testtext" nicht und es wird kein Text in Zeile 2 ausgegeben.
Locate 1,1 : Lcd "Testtext" funktioniert und Locate 3,1 : Lcd "Testtest" funktioniert auch nicht. Wenn ich aber anstelle des Locate Befehls den Lowerline Befehl verwende dann wird der Testtext in Zeile 2 ausgegeben.
OK, so sieht der Code aus:
$regfile = "m128def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 40
Gosub Lcd_konfig
' Locate 1 , 1 funktioniert
Locate 2 , 1 ' funzt nicht
' aber Lowerline für 2. Zeile funktioniert
Lcd "Test Test Test !"
Wait 1
Do
' tue nix
Loop
Lcd_konfig:
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 3 , Chipset = Dogm163v5
Config Portc = Output
Config Lcdbus = 4
Initlcd
Waitms 100
Cursor Off Noblink
Cls
Return
Wenn ich stattdessen die Gosub-Routine auflöse und die Initialisierung direkt im Kopf mache dann funktioniert alles richtig, auch Locate 2,1.
$regfile = "m128def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 40
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 3 , Chipset = Dogm163v5
Config Portc = Output
Config Lcdbus = 4
Initlcd
Waitms 100
Cursor Off Noblink
Cls
Locate 1 , 1
Lcd "Test Test Test !"
Wait 1
Do
' Tue nix
Loop
Hmmmm, kann mir jemand das Verhalten erklären. Warum kann ich das LCD nicht in einer Gosub-Routine initialisierung und warum zeigt sich dort das teilweise komische Verhalten?
Grüße,
Markus
habe gestern Abend eine komische Beobachtung gemacht die ich mir nicht erklären kann und bei der ich Hilfe gebrauchen könnte.
Habe versucht ein LCD-Display DOG-M 16x3 unter BASCOM in einer GOSUB-Routine zu initialisieren. Interessanter Weise fuktioniert dann der darauf folgende Locate 2,1 : Lcd "Testtext" nicht und es wird kein Text in Zeile 2 ausgegeben.
Locate 1,1 : Lcd "Testtext" funktioniert und Locate 3,1 : Lcd "Testtest" funktioniert auch nicht. Wenn ich aber anstelle des Locate Befehls den Lowerline Befehl verwende dann wird der Testtext in Zeile 2 ausgegeben.
OK, so sieht der Code aus:
$regfile = "m128def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 40
Gosub Lcd_konfig
' Locate 1 , 1 funktioniert
Locate 2 , 1 ' funzt nicht
' aber Lowerline für 2. Zeile funktioniert
Lcd "Test Test Test !"
Wait 1
Do
' tue nix
Loop
Lcd_konfig:
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 3 , Chipset = Dogm163v5
Config Portc = Output
Config Lcdbus = 4
Initlcd
Waitms 100
Cursor Off Noblink
Cls
Return
Wenn ich stattdessen die Gosub-Routine auflöse und die Initialisierung direkt im Kopf mache dann funktioniert alles richtig, auch Locate 2,1.
$regfile = "m128def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 40
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 3 , Chipset = Dogm163v5
Config Portc = Output
Config Lcdbus = 4
Initlcd
Waitms 100
Cursor Off Noblink
Cls
Locate 1 , 1
Lcd "Test Test Test !"
Wait 1
Do
' Tue nix
Loop
Hmmmm, kann mir jemand das Verhalten erklären. Warum kann ich das LCD nicht in einer Gosub-Routine initialisierung und warum zeigt sich dort das teilweise komische Verhalten?
Grüße,
Markus