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 :)
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!
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
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
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 ;)
@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 ?
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.
Laut Datenblatt ist der HD44780U TTL-kompatibel (2,2V = High). Ohne Rücklesen des Busy-Bits brauchst Du also keinerlei Pegelanpassung. Peter
Hallo, vielleicht folgst du mal diesen Link, der hat mir geholfen: http://www.sprut.de/electronic/lcd/index.htm Cu
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
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.