Hi Leute ich bins wieder, habe beim Senden von String ans LCD ( 2x16 ) Probleme. Problem Anzeige die Sein sollte : Test IstAnzeige: ||Test|||||||Test|| ||Test|||||||Test|| Ungefär sowas, und jenachdem wieviel buchstaben ich verwende wenns zu wenige oder zuviele sind dann rattet das gaze display dami tmeine ich die buchstaben laufen alle durcheinander sehr shcnell im Display. Quelltext im Anhang. HAbe mich versucht ans Turoial zu halten. Super wäre Natürlich wenn jemand Sowas einfachs und funktionierendes Hätte. ( 4 Bit LCD ) und (Tutorial LED-Routinen ) Danke MFg Pascal
ich denke ich weis worauf du hinaus willst. Wäre zwar einfahcer wenn dus gesagt hättest ich probiere es heute mal aus. Danke. Stimmt habe nicht bedacht das dies im Tutorial nicht beschreiben ist.
hmm, habe es gemacht doch leider hats nicht wirklich geklappt anstatt Test kommt jetzt der Text tseT und auch mit dnen schwarzen Balken :-(
Hast du da UART-Code recycled? Warum sendest du dem Display nach dem print ein CR/LF ("Byte 10"/"Byte 13")? Ein LCD-Controller druckt stattdessen nur zwei Sonderzeichen (sind das vielleicht die Zeichen nach dem "Test"? BTW: In deinem Beispielcode gibt es auch keinen String "Test", woher soll der kommen?). Ich kenne jetzt die von dir verwendeten LCD-Routinen nicht, aber üblicherweise läuft es doch bei allen LCD-Libs nach dem gleichen Schema ab (Achtung, Pseudo-Code!): lcd_init(); lcd_clear(); lcd_print("Test 1"); tu_was(); lcd_gotoxy(1,1); // Nur Cursor zurücksetzen, Display wird dabei nicht gelöscht lcd_print("Test 2"); // "Test 2" überschreibt "Test 1" Das Display muss gelöscht werden, um die Balken von der Initialisierung wegzubekommen. Dann kann man einen eigenen Text hinschreiben. Der interne Cursor des Displays steht danach am Ende deines Textes. Machst du dann nochmal "print", so schreibst du genau an dieser Stelle weiter, und die Anzeige "läuft durch". Du musst also vor Ausgabe eines neuen Textes entweder das Display erneut komplett löschen, oder zumindest den Display-Cursor auf die gewünschte Stelle setzen. PS: Habe mir gerade das Tutorial angesehen. Es gibt zumindest lcd_clear. Diese Routine müsstest du dann aufrufen, bevor du was neues schreibst. Später kannst du ja mal selbst ein "lcd_gotoxy" schreiben, der Ansatz ist ja im Tutorial erklärt.
der beschriebene schwarze balken weist auf einen Timingfehler während der initialisierung hin! besorgen Dir mal bitte ein Datenblatt, und schaue Dir ein paar Sätze zur Initialisierung an...
Stimmt, der Balken sollte nach korrekter Initialisierung automatisch verschwinden. Habe ich falsch beschrieben. Ein zusätzlicher "clear" schadet natürlich nicht. Fällt mir gerade noch ein: Die Wartezeiten im Beispielcode sind natürlich "busy waits", deren effektive Länge von der Taktfrequenz abhängen. Passt die Taktfrequenz des Controllers auch zur Taktfrequenz der Tutorial-Hardware, oder läuft er vielleicht schneller? Dann werden eventuell die Wartezeiten zwischen den Befehlen zu kurz.
> Ein zusätzlicher "clear" schadet natürlich nicht.
CLEAR ist aber einer der wenigen Befehle, der sehr lange dauert (siehe
Datenblatt des LCDs). Den sollte man daher nicht unnötig aufrufen.
Besonders wenn man das Busy des LCDs nicht abfragt und stattdessen mit
Warteschleifen oder Timer-Synchronisation arbeitet, ist CLEAR nach der
Erstinitialisierung tabu, es würde das gesamte Timing durcheinander
bringen.
Stattdessen setzt man die interne Cursorposition entsprechend (Set
DD-RAM-Adress) und überschreibt den alten Text.
...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.