Forum: Mikrocontroller und Digitale Elektronik LCD funktioniert nur sporadisch


von al3ko (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich brauche noch mal eure Hilfe. Dieses Mal geht es um ein LCD Display, 
das ich verwende. Ich habe mich an folgender Seite (inklusive 
Pinbelegung) orientiert:
http://www.jennaron.com.au/avr/lcd.html

Da der C Code schon etwas älter ist, habe ich ihn auf die neue WINAVR 
Version angepasst (sbi(), cbi() etc. umgeschrieben). Auch habe ich die 
eigene Delay Funktion durch _delay_ms() ersetzt. Meinen kompletten 
Ordner findet ihr im Anhang. Den originalen Code habe ich auskommentiert 
in den Files drinnen stehen, damit man besser verfolgen kann, was ich 
wie geändert habe.

Folgende Situation/Problem:
Möchte ich nun meinen uC flashen und Zeichen auf dem Display ausgeben, 
funktioniert das nur manchmal. Das heißt, dass manchmal gar nichts 
passiert. Manchmal werden aber auch nur schwarze Balken angezeigt. 
Meistens (ca. 70% der Fälle) gibt das LCD den richtigen Wert aus.

Ich frage mich jetzt, woran das liegen könnte bzw. ob ich irgendwelche 
Timings/Wartezeiten nicht eingehalten habe.

Ich verwende einen Atmega8 mit internem RC Osc. 1MHz und die 
Taktfrequenz ist auch auf 1MHz in den Projekteinstellungen festgelegt.

Wäre nett, wenn jemand eine Idee dazu hätte. Die main Funktion ist in 
LCD1.c definiert, die Funktionen zur Initialisierung etc. sind in 
lcd16.c definiert.


Danke und Gruß

von al3ko (Gast)


Lesenswert?

Hi,

ich habe eben die LCD Routinen vom AVR-GCC Tutorial geladen. Hier 
funktioniert alles wunderbar.

Was mich sehr wundert, ist, dass bei den Routinen auf dieser Seite 
wesentlich weniger Speicher im uC verwendet wird. Zum Vergleich:
Die Routinen aus dem Ursprungspost belegten knapp 30% meines Speichers. 
Die Routinen vom AVR-GCC Tutorial belegen weniger als 8%.

Was ist an den Routinen im Ursprungspost so schlecht bzw. 
speicherintensiv?

Gruß

von Andreas B. (bitverdreher)


Lesenswert?

Hallo,
er verwendet float.
Wozu man das bei einer LCD Ansteuerung braucht, entzieht sich meiner 
Kenntnis. Ich habe mir das dann auch nicht mehr weiter angeschaut.

Gruß
Andreas

Edit: Gerade gesehen, dass er das nur zum Testen verwendet. Falls Du 
also dieses Testprogramm verwendest, ist der Speicherverbrauch klar..

von al3ko (Gast)


Lesenswert?

Hi,
Andreas B. schrieb:
> Hallo,
> er verwendet float.
> Wozu man das bei einer LCD Ansteuerung braucht, entzieht sich meiner
> Kenntnis. Ich habe mir das dann auch nicht mehr weiter angeschaut.

>
> Edit: Gerade gesehen, dass er das nur zum Testen verwendet. Falls Du
> also dieses Testprogramm verwendest, ist der Speicherverbrauch klar..


Danke fürs Drückergucken. Dann werde ich die LCD Routinen vom AVR-GCC 
Tutorial verwenden und mich dort mal hineinfuchsen.

Gruß

von Peter D. (peda)


Lesenswert?

al3ko schrieb:
> Möchte ich nun meinen uC flashen und Zeichen auf dem Display ausgeben,
> funktioniert das nur manchmal.

Kein Wunder, die Init ist fast nur ein riesen NOP. Nirgends wird das 
E-Bit getriggert, also ins LCD geschrieben.
Ein Schreiben erfolgt erst bei "SendCommand(0x28);"

Die meisten LCD-Fehler beruhen darauf, daß man das Init so 
fehlerträchtig wie möglich machen will.
Es werden die kühnsten Bitverzwirbelungen gemacht, anstatt einfach die 
Send-Nibble Funktion zu benutzen, die man ja später fürs Byte-Senden 
verwendet.
Damit hätte man die Fehlerquellen auf nur eine einzige Funktion 
reduziert.


Peter

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.