Forum: Mikrocontroller und Digitale Elektronik LCD Ansteuerung - Verständnisfrage


von Tom (Gast)


Lesenswert?

Aaaaalso ..

Ich schicke gleich mal vorweg - ja ich kenne die Fleury Bibliothek -
und nein - ich will sie nicht verwenden.
Da drin ist einfach zu viel Zeugs das ich nicht verstehe :(

Daher habe ich mir gedacht, ich konzentriere mich auf den LCD Typ, der
vor mir liegt und nicht auf alle Möglichkeiten (auch wenn die
Ansteuerung durch den HD44780 eh dieselbe ist).

Ich habe also das Datasheet vor mir, ich verwende die 4-bit Ansteuerung
mit einem Atmega8.

Nun steht im Datasheet:
PowerOn - 15ms Warten
dann soll ich ein Bitmuster auf die Datenleitungen legen, dann wieder
4,1 ms warten. Dann wieder dasselbe Bitmuster auf die Datenleitung
legen, dann 100us warten und dann wieder das Bitmuster auf die
Datenleitungen legen.
Dann erst kommt das eigentlich Function Set, indem ich den 4bit Modus
aktiviere. Dann kommen noch ein paar Dinge (Display On, Entry Mode Set,
...) und dann ist die Initialisierung abgeschlossen.

Nun meine Fragen:
* Was bringt es wenn ich warte, das Bitmuster auf die Datenleitungen
lege, dann wieder warte, ... bekommt das der HD44780 eigentlich mit?

* Ich habe die Ansteuerung von Fleury's HP übernommen:
D4-D7 vom Display an PortD 0..3
PD4 an RegSelect, PD5 an R/W, PD6 an Enable (vom Display).

Nun würde ich gerne das Busy Flag auslesen. Ich müsste dazu nun an R/W
eine 1 anlegen. NUR: Wann bekomme ich das BusyFlag dann?
Kann ich meinen Port als DDR = 0xCF definieren (also nur dort ist der
Port ein Output, wo das R/W Signal liegt). Dann an den Port
beispielsweise ein 0x20 senden (das R/W ist auf 1 gesetzt) und im
nächsten Atemzug den PORTD lesen? Oder wie muss ich das machen?

Danke für Hilfe :)

von Thomas (Gast)


Lesenswert?

Hallo Tom (Namensvetter),
"* Was bringt es wenn ich warte, das Bitmuster auf die Datenleitungen
lege, dann wieder warte, ... bekommt das der HD44780 eigentlich mit?
"

Nach jeder Pause mußt du am Enable wackeln (L,H,L), daher weiß das LCD
dass das Muster nun ein "neues" ist.

Ich habe schon verschiedene Male solche LCDs angesprochen, aber das
Busy nie ausgelesen.
Einfach die angesagte Pause abwarten, dann ist alles OK. Funktionierte
bei mir immer!

von plitzi (Gast)


Lesenswert?

Also, einfach nur "Bitmuster anlegen" reicht da natürlich nicht aus.
Das LCD hat da ja noch seinene Freigabeeingang (E H-aktiv). Und das
bedeutet nun "Bitmuster anlegen" -> E auf H-Pegel schalten -> E
wieder zurück auf L-Pegel...  Mit diesem kurzen H-Impuls wird deas
angelgte Bitmuster also vom LCD-Controller übernommen und der Befehl
ausgeführt.

Das Busy-Bit bekommst Du auf die gleiche Art: RS auf H-Pegel (Kommando)
-> RW auf H-Pegel (lesen) -> E auf H-Pegel -> Bitmuster einlesen -> E
wieder auf L-Pegel
In dem Bitmuster findest Du Dein Busy-Bit.

Wichtig bei allen diesen Aktionen ist das korrekte Timing. Also
Mindestdauer des H-Implulses des E-Signals, Vorbereitungszeit für die
Daten-, RS- und RW-Signale und die Bereitstellungzeit der Daten beim
Lesen. Steht alles im Datenblatt bei den Timing-Diagrammen.

Jörg

von martin (Gast)


Lesenswert?

Hallo Leute!

Ich habe auch eine Frage zu den LCDs.
Seit Kurzem beschäftige ich mich mit 3,3V µP, vorher waren
es welche, die mit 5V angspeist wurden.
Ich habe aber leider noch keinen Verkäufer gefunden, der ein
3,3V LCD-Display anbietet.
Gibt es das Überhaupt?
Oder wie soll man das Problem lösen?

Danke für eure Antworten.

Tschüss
Martin

von Tom (Gast)


Lesenswert?

Oooook :) tiefeinatmet

Hier im Datasheet steht: Bei der fallenden Flanke des Enable Signals
übernimmt der Controller die Daten.

Das heisst:
* Ich setze das Enable Signal erstmal auf 1.
* Lege meine Daten an den Port (in meinem Fall 0x30)
* Ich setze das Enable Signal (also halt den Port Pin) auf 0. (jetzt
müssten die Daten übernommen werden).
* Ich setze das Enable Signal wieder auf 1.
* Nächste Daten an den Port ...
* Enable wieder 0, dann wieder 1
...

Wie sieht das dann aus, wenn ich irgendwann nach der Initialisierung
mal die Daten schicke (beim 4-bit Modus).
Schicke ich dann zuerst das High Nibble, dann setze ich das Enable
Signal auf Low, wieder auf High, dann das Low Nibble, dann wieder
Enable Low/High ?

Kommt das in etwa hin ?

P.S.: Ja .. sind sogar richtige Namensvettern ;)

von Tom (Gast)


Lesenswert?

@plitzi:
Das war wahrscheinlich der Link, der mir gefehlt hat ... das Enable
Signal ist mir wohl im Wirrwarr der Datenblatt - Angaben entgangen :)
(kA wie oft ich jetzt hin und her geblättert habe)

könntest du mir evtl. noch sagen ob das was ich oben geschrieben habe
bzgl. High und Low Nibble geschrieben habe, stimmt ?

von Stephan (Gast)


Lesenswert?

Wenn Du einen 3,3V-uC hast und ein 5V-Display, kannst Du es am
einfachsten anschliessen, wenn Du die Ausgangs-Pins als Open-Drain
schaltest. Kostet Dich nur ein Widerstands-Array oder eine handvoll
einzelne Widerstände. Werte so zwischen 4,7kOhm und 15kOhm, was Du halt
in der Bastelkiste hast, gehen.

Viel Erfolg!
Stephan.

von Peter Dannegger (Gast)


Lesenswert?

Laut Datenblatt ist der HD44780U TTL-kompatibel (2,2V = High).

Ohne Rücklesen des Busy-Bits brauchst Du also keinerlei
Pegelanpassung.


Peter

von waidla (Gast)


Lesenswert?

Hallo,

vielleicht folgst du mal diesen Link, der hat mir geholfen:
http://www.sprut.de/electronic/lcd/index.htm

Cu

von plitzi (Gast)


Lesenswert?

Der beschriebene Ablauf ist an sich schon OK, aber üblicherweise wird
von einem Ausgangszustand mit L-Pegel an E ausgegangen (auch wenn das
Ganze dank Flankensteuerung ev. auch wie oben beschrieben funktionieren
würde).

>Das heisst:
>* Ich setze das Enable Signal erstmal auf 0.
>* Lege meine Daten an den Port (in meinem Fall 0x30)
>* Ich setze das Enable Signal (also halt den Port Pin) auf 1.
* kurz warten (450ns)
>* Ich setze das Enable Signal wieder auf 0. (jetzt
>müssten die Daten übernommen werden).
>* Nächste Daten an den Port ...
>* Enable wieder 1, dann wieder 0
>...

Hintergrund ist, dass bei E=0 das LCD in jedem Fall passiv ist und nur
für die Datenübernahme mit dem positiven Impuls (genauer seiner
HL-Flanke) aktiviert wird. Damit kannst Du auch in Ruhe die
Datenrichtung Deines µC-Ports zum Lesen umschalten, ohne Gefahr zu
laufen, dass 2 Ausgänge gegeneinander arbeiten.

Ich empfehle auch bei Ansteuerung durch einen AVR dem E-Signal einen
Pull-down-Widerstand zu spendieren, damit das LCD während eines RESET
auch passiv ist.

Beim 4-bit-Betrieb musst Du diese Prozedur für die Übertragung eines
Bytes/Kommandos immer 2 mal ausführen, für jedes Nibble also extra
"H-Nibble ausgeben -> H-Impuls an E -> L-Nibble ausgeben -> H-Impuls
an E". Auch beim Busy-Bit-lesen immer beide Nibble lesen, sonst kommt
der LCD-Controller durcheinander!!

Jörg

von Tom (Gast)


Lesenswert?

@waidla: Danke für den Link ... etwas weiter unten kommt eine gute
Erklärung :)

@plitzi: Ich glaube ich habs verstanden :) werde ich wohl morgen oder
übermorgen, sobald mal  wieder zeit ist, ausprobieren :)

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.