Forum: Mikrocontroller und Digitale Elektronik Initialisieren eines LCD


von Germo (Gast)


Lesenswert?

Hi,

ich habe da ein Problem mit einer LCD anzeige. Ich habe ein 16x2 LCD
und bekomme es nicht initialisiert. Die Routine ist ja bei allen nahezu
identisch:

min 15ms warten
0x30 an DB
min 4,1ms warten
0x30 an DB
min 100µs warten
0x30 an DB

ab hier is das busy flag gültig und man kann das LCD auf 8 oder 4 bit
stellen. Da ich gerne 8bit hätte also 0x38

Das Problem ist das es g ar nicht Reagiert. Ich seh immer nur die erste
Zeile komplett schwarz. Auch mit LCD einschalten oder löschen und
ausschalten tut sich nichts. hab ich irgendwas übersehen?

Meine Pinbelegung ist wie folgt:
1-3 sollte klar sein Spannung und Kontrast
4 (RS) -> PC1
5 (R/W) -> PC2
6 (E) -> PC3

PORTC ist als Ausgang definiert und alle Pins liegen auf 0

7-14 -> PORTA

PORTA ist auch als Ausgang und alle Pins liegen auf 0

Als µC benutze ich den ATMega8535 und C-Compiler ICCAVR. Ich hab das
Forum schon durchsucht aber wie schon erwähnt finde ich nur die obige
Initialisierung, die auch im Datenblatt zu finden ist.

Würde mich über ein paar Ratschläge sehr freuen

von TOM (Gast)


Lesenswert?

Kannst du mal deinen Vorgang beschreiben, wie du ein Byte an dein LCD
sendest? Vielleicht liegt hier schon der Fehler.

von Germo (Gast)


Lesenswert?

Also an den Ports änder ich soweit erstmal nichts
RS und R/W weiterhin als Ausgang und 0

zum warten hab ich mir ne kleine delay Funktion gebastelt die einfach
eine Variable hochzählt und dann eigentlich nur über PORTA die Befehle

also in meinem Code:

delay(15);      //15ms warten
PORTA = 0x30;   //00110000 als binarcode
delay(5);       //>4,1ms warten
PORTA = 0x30;
...

von Christian Spahn (Gast)


Lesenswert?

Und was machst Du denn in der Zeit mit dem E-Pin? Der LCD Controller
uebernimmt nur bei einer fallenden Flanke an "E" die Daten. Wie oft
Du davor dem Port einen Wert zuweist, ist dem LCD Controller egal!

Und die Daten sollte vor der E-Flanke mindestens 60ns stabil anliegen,
aber das duerfte bei Deinem Takt kein Problem sein.

von Germo (Gast)


Lesenswert?

Über den E pin hab ich nicht wirklich viel gefunden und in dem
Datenblatt was ich habe (Reichelt) steht dazu leider auch nichts drin.
Also müsste ich vor dem befehl 'PORTA = 0x30;' noch den E auf 1
setzen und anschließend wieder auf low?

Ich probiers grad mal

von Christian Spahn (Gast)


Lesenswert?

Je genau.

Das sollte aber im Datenblatt stehen, spaetestens in den
Timing-Digrammen.

von Germo (Gast)


Lesenswert?

Ah, nun scheint es zu gehen aber ich muss noch eine kleine warteschleife
einbauen damit das signal auch ne zeit schon steht wenn die E flanke
wieder abfällt.

Vielen Dank!!

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.