www.mikrocontroller.net

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


Autor: roty (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
evtl timingprobleme?
dreh mal die frequenz am controller herunter

Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: roty (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Robby (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.