Forum: Mikrocontroller und Digitale Elektronik LCD wird nur halb initialisiert


von Stefan (Gast)


Lesenswert?

Hallo,

ich habe eine mehrere gleiche (gedruckte) Schaltungen aufgebaut 
(ATMega64 @ 16 MHz) an denen jeweils ein 4-zeiliges Standard-LCD hängt. 
Es kommt oft vor dass beim Einschalten nur die erste und dritte Zeile 
des LCD initialisiert wird. Das LCD ist im 4-Bit Modus am µC 
angeschlossen, DB0-DB3 liegen auf GND. Angesprochen wird das LCD mit der 
Lib von Peter Fleury.
Kennt jemand dieses Phänomen?

Gruß
Stefan

von John B. (johnbauer)


Lesenswert?

Hallo Stefan,
nach dem Einschalten benötigt ein LCD eine gewisse Zeit bis es bereit 
ist, Daten zu empfangen.
Wartet Dein Programm eine bestimmte Zeit, bevor es das LCD 
initialisiert? Wenn nein: Warteschleife einfügen. Wenn ja: mal eine 
längere Wartezeit versuchen.

Gruß
John

von Stefan (Gast)


Lesenswert?

Hallo,

ich warte im Moment 500 ms, das sollte eigentlich genug sein. Die 500 ms 
Delay werden auch tatsächlich gewartet (wie ich an den beiden 
funktionierenden Zeilen sehen kann)

Stefan

von Klaus D. (kolisson)


Lesenswert?

Stefan schrieb:
> DB0-DB3 liegen auf GND.

Das ist ja nicht zwingend gut, hat aber wohl mit dem Problem nichts zu 
tun.
Die gehören nicht auf GND da diese Bidirektional arbeiten.
Wenn du die GNDen willst dann bitte über Pulldowns.

Gruss klaus de Lisson

von holger (Gast)


Lesenswert?

>Delay werden auch tatsächlich gewartet (wie ich an den beiden
>funktionierenden Zeilen sehen kann)

Das Display muss in den 4 Zeilen Modus umgeschaltet werden.
Sonst zeigt es nur zwei Zeilen an. Gibt es da kein
#define für KS0073 in der Fleury Lib?

von John B. (johnbauer)


Lesenswert?

Stefan schrieb:
> Es kommt oft vor dass beim Einschalten nur die erste und dritte Zeile
> des LCD initialisiert wird.

Es wird nicht jede Zeile einzeln initialisiert. Nach dem Einschalten 
befindet sich der Displaycontroller vom LCD im einzeiligen Betrieb (-> 
von der Ansteuerung behandelt der Displaycontroller die erste und dritte 
Zeile als eine Zeile, die aber physikalische, in zwei Zeilen getrennt, 
untereinander dargestellt werden). Zum Umschalten in den zweizeiligen 
Betrieb (physikalisch vier Zeilen) benötigt man nur einen einzigen 
Befehl. Und dieser scheint nicht immer anzukommen.

Stefan schrieb:
> ich warte im Moment 500 ms, das sollte eigentlich genug sein. Die 500 ms
> Delay werden auch tatsächlich gewartet (wie ich an den beiden
> funktionierenden Zeilen sehen kann)

Die 500ms sollten reichen. Da Du das LCD im 4-bit Modus betreibst, ist 
ja der erste Befehl das Umschalten vom 8-bit Modus in den 4-bit Modus 
(nach dem Einschalten befindet sich das LCD im 8-bit Modus). Und da die 
erste und dritte Zeile korrekt angezeigt werden, funktioniert die 
Umschaltung auf 4-bit.

Was ich mir jetzt noch als Fehlerursache vorstellen kann ist, dass die 
Wartezeit zwischen den Befehlen zu kurz ist.

Stefan schrieb:
> ein 4-zeiliges Standard-LCD

Um welches LCD handelt es sich?
Welcher Displaycontroller wird verwendet?

Gruß
John

von Stefan (Gast)


Lesenswert?

Es ist dieses Display:

http://www.reichelt.de/LCD-Module-DIP-Anschluss/LCD-204BL-4-DIP/index.html?;ACTION=3;LA=444;GROUP=A523;GROUPID=3009;ARTICLE=53963;START=0;SORT=artnr;OFFSET=16;SID=33TUlgyn8AAAIAADaJBrEc77e92b02e3fe004f14a0fd3489cdeba

>Die gehören nicht auf GND da diese Bidirektional arbeiten.
Ahja, gut zu wissen! Wie ist die "amtliche" vorgehensweise wenn man nur 
4 Bit benutzt? Offen lassen? Oder muß man wirklich Pulldowns einbauen?

Habe inzwischen auch einen Fingerzeit gefunden: Meine Schaltung läuft 
mit 16 MHz. Die Fleury Lib berechnet aus der Taktangabe die nötigen 
Wartezeiten, allerdings ist der CPU Takt in dieser Lib nochmal extra 
definiert (XTAL) und steht standardmäßig auf 8 MHz, also zu kurze 
Zeiten. Leider schaut die Lib nicht ob schon (z.B. im makefile) F_CPU 
definiert ist.

Mal sehen ob es daran liegt.

Vielen Dank für die Antworten!

Stefan

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.