PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD immer "voll"



krtv_stsc
03.10.2007, 20:52
Hi!

Nachdem ich mein LCD (HD44780) endlich zum Laufen bekommen habe, habe ich nun ein Problem. Wenn ich Controller (Mega32) und Display einschalte, steht der programmierte Text auch wunderbar da. Resette ich den Controller, sind alle Pixel des Displays an (es leuchten also alle Kästchen). Eine Lösung hier im Fourm war, ein "initlcd" einzufüge, das führte aber nicht zum gewünschten Erfolg. Packe ich den Displaytext in eine Schleife mit "waitms 500", dann kann ich den Text problemlos lesen...


$regfile = "m32def.dat"
$crystal = 8000000

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 Lcdbus = 4

Initlcd
Cursor Off

Cls
Locate 1 , 1
Lcd "Hallo Sven"

Mit diesem Quelltext ist das Display spätestens nach einem Reset immer schwarz...
Ich hoffe, mit kann einer helfen...

Spion
03.10.2007, 21:03
Hallo

Was passiert wenn du nach Cursor Off ein Wait einfügst?

mfg Luca

krtv_stsc
03.10.2007, 21:38
Mh... Ich sage mal ganz vorsichtig es funktioniert. Ganz vorsichtig weil: während der Wait-Befehl ausgeführt wird ist alles wunderbar, danach erscheinen aber beliebige Zeichen, der Text wird verschoben oder sonstiges, und dann habe ich das Gefühl die Schleife startet von vorn (obwohl kein Loop drin ist, ist aber ein regelmäßiger Ablauf erkennbar. Nehme ich wait 10 ist der Text für 10 Sekunden da, dann kurz irgendwelche Zeichen und dann wieder der Text für 10 Sekunden).

Gento
03.10.2007, 21:40
$regfile = "m32def.dat"
$crystal = 8000000

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 Lcdbus = 4

Waitms 100
Initlcd
Cursor Off

Cls
Locate 1 , 1
Lcd "Hallo Sven"

do
Loop
----------------------------------------------
Gento

Skragan
05.10.2007, 07:55
Hi,

wie hast Du denn das LCD angeschlossen ? 4 Datenleitungen wie ich sehe.

Config Lcdbus = 4

kommt mir komisch vor, meines initialisiere ich nur mit

Config Lcdmode = Port

wobei das bei mir vermutlich ein Mischmasch mit den compilersettings ist. Nutzt man config lcdbus=4, muss man auch $LCD = [&H]address mitbenutzen, so steht es zumindest in der help.
Und fehlt nicht das end ? :) Was macht Dein Programm, wenn es in der letzten Zeile ankommt ? Es geht doch wohl nicht in einen undefinierten Zustand ? Deswegen wird es bei Gento´s Code laufen, weil der Proz anbleibt. Anstelle des Do Loop geht halt auch ein end. Später in der Software übrigens nicht immer im Polling das Display schreiben, Du willst doch keine Beschäftigungstherapie für Dein Displaymodul machen, ausserdem schmiert dann gerne das Display ab, weil Du viel zu schnell hintereinander schreibst. Bau einen Interrupt oder einen einfachen Zähler und lasse das Display nur aktualisieren, wenn die entsprechende Zeit rum ist. Ich mache das mit einem "Anzeige aktualisieren"-Merker, also nur dann, wenn sich etwas an der Anzeige geändert hat.

Das Initlcd braucht man soviel ich weiß nicht, da das lcd sofort beim ersten lcd-bezogenen befehl automatisch initialisiert wird.

Christopher1
05.10.2007, 14:51
wie hast Du denn das LCD angeschlossen ? 4 Datenleitungen wie ich sehe.
Config Lcdbus = 4
kommt mir komisch vor, meines initialisiere ich nur mit
Config Lcdmode = Port

Ich nehme auch Config Lcdbus = 4 und es geht auch ohne Lcd adress.
Aber das End fehlt ;-)

krtv_stsc
07.10.2007, 21:54
Alles klar! Lag an dem fehlenden "End"...
Was solche Kleinigkeiten die man übersieht doch nicht alles bewirken...

DANKE!!!