Hallo, hatte jemand schon mal folgendes Problem (und eine Lösung dafür) bei einer zweizeiligen standard LCD-Anzeige die im 4 Bit Modus betrieben wird ? Die Anzeige zeigt nur nach jeder zweiten Initialisierung Character in der zweiten Zeile (ohne dass man die Spannung vom Display abschaltet). D.h. nur nach jeder zweiten Initialisierung kann man mit dem gleichen Programm etwas in der zweiten Zeile darstellen, sonst steht alles nur in der ersten Zeile. Ich schalte natürlich die Anzeige in der Initialisierungsphase erst auf 8 Bit bevor ich in den 4 Bit Modus schalte und arbeite bei jedem Zugriff mit den BUSY Flag. Dass das funktioniert kann ich mit dem Logicanalyzer sehen. Bei allen meiner vielen 8 Bit LCD-Anzeigeprojekte habe ich sowas noch nie gesehen. Danke für jeden sinnvollen Hinweis.
Du brauchst das LCD nur einmal - beim Einschalten - initialisieren. Das geschieht im 8-Bit-Modus. Der Rest dann im 4-Bit-Modus. Die Abfrage des Busy-Flag ist nicht unbedingt nötig, wenn du die Timings per Datenblatt einhälst.
evtl timingprobleme? dreh mal die frequenz am controller herunter
Was soll das? Der 4-Bit Modus, ist dafür da, dass man sich 4 Pins am µC sparen kann, warum sollte ich also im 4-Bit-Modus was betreiben wenn ich eine Verdrahtung für den 8-Bit-Modus habe? Das Programm wird doch dadurch größer da ich immer 2 Schreibbefehle für 8 Bit benötige.
das ist aber so minimal, wenn man es richtig propgrammiert.. es werden ja immer nur funktionen aufgerufen, die was auslesden und dann ausgeben.. 4 PINs sind ab und an eben gold wert in was steuerst du das LCD denn an?
Das Display erwacht normalerweise nach dem Power-Up im 8-Bit-Modus. Somit mußt Du es also nicht erst in diesen schalten. Voraussetzung ist, daß Deine Betriebsspannung sich in den zeitlichen Grenzen der Herstallerangaben aufbaut und so der interne Reset auch funktioniert. Nach dem Power-Up solltest Du außerdem bis zu 20 ms warten, bevor Du überhaupt etwas an das Display sendest, vorher funktioniert auch das Busy-Flag nicht! Dann setzt Du das Display (laut Herstellerangaben) in den 4-Bit Modus. Die Reihenfolge der Ini-Befehle nicht vertauschen und auch den Entry-Mode Befehl richtig (also 2-zeilig) übergeben. Dann sollte alles klappen.
"Du brauchst das LCD nur einmal - beim Einschalten - initialisieren" Irrtum 1: Wer mit Debuggern arbeitet, schaltet nicht immer die Verorgungsspannung aus beim Neustart. Oder was ist wenn man den Resetknopf am MC drückt? Das Display bekommt das nicht mit ! "Das geschieht im 8-Bit-Modus. Der Rest dann im 4-Bit-Modus" "Das Display erwacht normalerweise nach dem Power-Up im 8-Bit-Modus" Somit mußt Du es also nicht erst in diesen schalten" Das stimmt, aber nur beim Einschalten nach Power-up. Beim zweiten Einschalten ohne power-up ist das Display im 4-Bit mode. "Die Abfrage des Busy-Flag ist nicht unbedingt nötig, wenn du die Timings per Datenblatt einhälst" Irrtum 2: Das Datenblatt des (meines) Display schreibt ausdrücklich die Benutzung des Busy-Flags im 4 Bit Modus vor. Ausserdem geht es damit viel schneller. (ntürlich kann man warte, das nutzt aber in meinem Fall nix) Ob man (oder ich) 4Bit oder 8Bit für eine Anwendung braucht, darüber diskutiere ich nicht! Noch weitere sinnvolle Ideen ?
Ist zwar schon ein bisschen her, aber ich hatte das Problem auch mal. Auch im 4-Bit Modus. Hab kein Busy-Flag benutzt. Waren, wenn ich mich recht erinnere, tatsächlich irgendwelche Timingprobleme. Hab dann in meiner lcd_init irgendwo ein paar pausen eingebaut, bis es funktioniert hat. Beim schreiben gab es keine Probleme.
Wenn Du kein vollständiges Power-Up machst, macht´s natürlich auch keinen Sinn, jedes Mal das Display neu zu initialisieren. Entweder das Teil geht mit dem Prozessor aus und wieder an oder halt nicht. Letzterer Fall ist eher ungewöhnlich. Insofern erklärt sich (vielleicht) jenes merkwürdige Verhalten, daß Du ein bereits im 4-Bit-Mode befindliches Display neu initialisierst, was natürlich nicht geht, weil das Ding halt 4 Bit erwartet, der Initialisierungsbefehl aber als 8 Bit Befehl interpretiert wird. Vielleicht solltest Du den Prozessor beim Power-Up erstmal kontrollieren lassen, ob das Display arbeitet (Standardbefehl ausführen und Busy-Flag abfragen?!) und falls ja, dann eben nicht neu initialisieren.
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.