Forum: Mikrocontroller und Digitale Elektronik LCD timing Probleme


von De Harry (Gast)


Lesenswert?

Hallöle,

ich sitze hier mit meinem ATmega8 und habe ein wundervolles LCD Dot 
matrix Modul 20x4. Dieses hat als Controller den HD44780A.
Ich betreibe nun im 4 Bit modus über den PortB des Megas das LCD. R/W 
und Enable liegen auf PB4 und PB5.
Das Programm, welches mit einem 16 MHZ Quarz läuft, macht aber Probleme. 
Ich schreibe den Text "Party" in Assembler auf das LCD. Es kommt aber 
nur "Pat"...oder "Pty" am LCD an. Das Initialisieren funktioniert auch 
nur alle paar mal. Also strom aus, Strom an...Schwarze Blaken...kein 
text...STrom aus, Strom an...Schwarze Balken und halber Text. Ich habe 
alle delay Schleifen auf die 16 MHZ angepasst. Ich hab mal ganz am 
Anfang des Programm ne Sekunde nichts tun eingefügt, um dem LCD zeit für 
den eigen Reset zu lassen. Doch die Initialisierung und die ANzeige des 
textes wurden nicht zuverlässiger. Ich habe vor den High werden des 
Enable ein paar "nop"´s eingefügt, was auch nicht die gewünschte 
zuverlässigkeit gebracht hat.
Ich programmiere in Assembler.
 Ich stehe am Schlauch und weis nichtmehr, wo ich noch ne Pause einfügen 
soll. Der Code für das LCD kommt hier von Mikrocontroller.net. Hab die 
"lcd-routines" eingebunden.

von Hubert G. (hubertg)


Lesenswert?

Du hast wahrscheinlich RS und Enable angeschaltet, wenn du R/W auch hast 
dann brauchst du keine delay-Schleifen.

von Peter D. (peda)


Lesenswert?

Die Timings aus dem Datenblatt funktionieren.
Du wirst warscheinlich falsche Timings haben.

Versuche nicht, tonnenweise kryptische Hexwerte in Deinem Code fest zu 
verdrahten, daß geht schief.

Definiere einmal am Anfang die Quarzfrequenz und dann laß den 
Präprozessor die Anzahl der Loops richtig berechnen. Der macht dann 
keine Schusselfehler.

Der Präprozessor kann 32Bit Berechnungen durchführen, einfach nur die 
Formeln hinschreiben.
Am besten Du definierst Dir ein Delay-Macro mit der Delayzeit als 
Parameter.


Peter

P.S.:
Bei Problemen mit Code, den als Anhang (*.asm-File) posten.

von MandA K. (Firma: MAMIMO STudios) (bastlomat)


Angehängte Dateien:

Lesenswert?

Die Delay Zeiten hab ich mit "AVR delay loop" berechnen lassen. Da wird 
auf die Quarzfrequenz rücksicht genommen. Aber ich währe sehr Dankbar, 
wenn du mir die Variante des Präprozessors posten könntest. Anbei ist 
der Benutzte ASM File. Die Include Datei für das LCD Poste ich gleich.

Die Zeiten für die Delays finde ich im Datenblatt vom HD44780?...ich 
guck mal nach

von MandA K. (Firma: MAMIMO STudios) (bastlomat)


Angehängte Dateien:

Lesenswert?

so der Code für´s LCD

von Peter D. (peda)


Lesenswert?

Der Code scheint o.k. zu sein.

Nur der Enable-Puls scheint mir für 16MHz etwas kurz.
Erhöhe mal die beiden NOP-Reihen auf 16 NOPs (1µs).


Peter

von MandA K. (Firma: MAMIMO STudios) (bastlomat)


Lesenswert?

Hui ich hatte die Erleuchtung. Alles geht alles ist palletti. Ich habe 
einfach die Sache mit dem Preprozessor eingefügt. Vielen Dank!

von Martin (Gast)


Lesenswert?

Hallo,

ich versuche auch ein LCD an laufen zu bekommen aber klapp irgenwie 
nicht, Code ist wie im Tutorial.
Mein Problem ist ich sehe im Display NICHTS ! es ist ein 4x20 mit 
Hintergrund Beleuchtung, ich habe wie im Tutorial angesschlosen, 
Hintergrund beleuchtung funktioniert bzw er leuchtet aber das mit dem 
Poti für kontrast geht nicht bzw ich sehe garnichts, ich habe langsam 
von 0 V bis etwa 3.8V mit dem Poti an Pin 3 die Vee angegeben aber 
pasiert nichts

danke für die Hilfe
Gruß
Martin

von MandA K. (Firma: MAMIMO STudios) (bastlomat)


Lesenswert?

Hallo,

bei mir ist die Kontrastspannung auf GND also 0V. Welche Tackfrequenz 
benutzt du denn? Wird in deinem Programm das LCD Initialisiert? Kommen 
beim anlegen der Spannung schwarze Balken? Benutzt du 4 bit oder 8bit 
als übertragung? was auch immer gern genommen wird, ist enable und R/W 
zu vertauschen. Hat das LCD auch den HD44708 als Controller? Bist du dir 
sicher, dass du keine kalte Lötstelle hast?

von Ulrich P. (uprinz)


Lesenswert?

@Martin
Wenn das Display nicht einmal leicht grau schattierte Felder zeigt, dann 
hast Du vermutlich ein Industrial Display. Dieses braucht zwingend eine 
negative LCD-Spannung (Vee). Wenn Du auf deiner Schaltung einen MAX232 
hast, dann kannst Du Dir helfen, in dem Du diese mit einem Poti gegen 
Masse vom V- Pin des MAX abgreifst. Der Schleifer des Potis kommt an 
Vee. Bitte Poti zuerst auf 0V stellen und langsam gegen V- drehen, da 
Vee irgendwo -7V nicht unterschreiten sollte, der MAX auf V- aber 
zwischen -9V..-12V liefert.

Man kann Vee später auch aus einem Inverter aufgebaut aus einer Diode 
und einem oder zwei Kondensatoren an einem der PWM Ausgänge des AVRs 
aufbauen.
Dann kann man den Kontrast auch per Software einstellen.

Gruß, Astralix

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.