www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Initialisieren eines LCD


Autor: Germo (Gast)
Datum:

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

Autor: TOM (Gast)
Datum:

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

Autor: Germo (Gast)
Datum:

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

Autor: Christian Spahn (Gast)
Datum:

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

Autor: Germo (Gast)
Datum:

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

Autor: Christian Spahn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Je genau.

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

Autor: Germo (Gast)
Datum:

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

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.