Forum: Mikrocontroller und Digitale Elektronik Problem bei LCD-Anzeige im 4 Bit Mode


von roty (Gast)


Lesenswert?

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.

von Wolle (Gast)


Lesenswert?

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.

von Jens D. (jens) Benutzerseite


Lesenswert?

evtl timingprobleme?
dreh mal die frequenz am controller herunter

von Carsten S. (carsten)


Lesenswert?

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.

von Jens D. (jens) Benutzerseite


Lesenswert?

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?

von TravelRec. (Gast)


Lesenswert?

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.

von roty (Gast)


Lesenswert?

"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 ?

von Robby (Gast)


Lesenswert?

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.

von TravelRec. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.