Moin, ich habe ein LCD mit ST7066U-Controller. Entweder nach dem Programmieren oder aber nach dem Einschalten der Versorgungsspannung wird das Display initialisiert und "Hello World!" erscheint. Alles gut und auch reproduzierbar. Das Timing entspricht den Angaben im Dateblatt wobei ich immer etwas größere Wartezeiten verwende. Also anstelle von 37 us sind es 50 us und anstelle von 1.52 ms sind es 2 ms. Durch Zufall habe ich folgenden Effekt entdeckt. Drücke ich Reset, dann erscheinen nur noch irgendwelche Symbole anstelle meines Textes. Drücke ich noch einmal Reset, dann erscheint wieder "Hello World!". Das Spiel kann man so weitertreiben. Hat eventuell jemand eine andere bulletproof-Initialisierungssequenz? Holger
Au jahaaa fein, ein Ratespielchen! Ich rate mal: Display wird im 4-Bit-Modus angesprochen? Wenn ja, sende ganz zu Anfang dreimal das Kommando zum Initialisieren im 8-Bit-Modus, danach einmal zum Initialisieren im 4-Bit-Modus.
Holger schrieb: > Hat eventuell jemand eine andere bulletproof-Initialisierungssequenz? Oft twird geflissentlich übersehen dass ein LCD eine beachtliche Zeit beim Power-Up braucht bis es ansprechbar ist (diese Zeit steht im Datenblatt...). Wird nun während dieser Zeit die Initialisierungs- Sequenz geschickt (während dessen keine Statusabfrage, also kein Handshake mit Read/Write möglich ist) läuft diese ins Leere. Ein Poer-Up Reset ist nun mal aus der Sicht des LCDs anders als ein User-Reset .... Bei mir steht am Anfang jeder Init:
1 | _delay_ms (100); /* 40 ms needed for Vcc = 2.7 V */ |
Your mileage may vary (alter Spruch eines weisen Franzosen).
Moin, nach der entsprechenden Initialisierung drr Portpins wartet das Programm 500 ms, bevor es in doe LCD-Init-Routine geht. Es ist richtig, dass der 4-Bit-Modus verwendet wird. Ein mehrmaliges senden von 3h bringt nichts. Das steht ja auch nicht im Datenblatt so drin. Dann funktiniert das Display auch nicht mehr beim anlegen der Betriebsspannung. @Frickelfritze Du hast schon gesehen, dass es ein Üroblem beim Prozessor-Reset gibt und nicht beim anlegen der Betriebsspannung? Es sieht wohl so aus, dass ein bereits initialisiertes Display bei einer erneuten Initialisierung Probleme macht. Holger
Hallo, das Problem hatte ich auch schon mit einigen Displays. Ursache ist, daß das Problem ja im 4Bit-Mode ist und auch bleibt. Es gibt da keinen offiziellen Rückweg. Damit läuft die normale Initialisierung gegen die Wand, weil die Kommandos ja bereits als 4Bit-Kommandos interpretiert werden. Einige Hersteller auch des HD44780 hatten mal eine Soft-Rest Angabe in ihren Datenblättern, die ging manchmal auch mit anderen Kontrollern, ich finde das aber gerade nicht mehr und in meinem Datenblatt des ST7066U steht dazu auch nichts. Gruß aus Berlin Michael
:
Bearbeitet durch User
Holger schrieb: > Ein mehrmaliges senden von 3h bringt nichts. > Das steht ja auch nicht im Datenblatt so drin. Du hast Recht. Von mehrmaigen Senden einer 0x3 steht nichts drin. Vom dreimaligen Senden einer 0x3 aber schon. Siehe auch Flussdiagramm aus dem Datenblatt des HD44780.
Hallo, @Frickelfritze: genau dieser Ablauf gilt aber nur nach PowerOn, wenn das Display im 8Bit-Mode ist. Sein Display ist aber bei einem Rest des AVR bereits im 4Bit-Mode und interpretiert das damit einfach falsch. Aus den ersten beiden 0x3 werden vermutlich 4Bit 0x33 und dann bleibt ein unvollständiger 4Bit-Zugriff mit 0x3 übrig. Vermutlich deshalb sortiert es sich nach dem 2. Reset dann auch wieder. Vielleicht könnte man den ST0066 vor der 0x3 Initialisierung einfach einmal gleich FunctionSet auf 8Bit senden, wenn er noch nicht initialisiert wurde dürfte er das ignorieren und wenn doch dann schaltet er zurück auf 8Bit und die normale Sequenz dürfte greifen. Gruß aus Berlin Michael
:
Bearbeitet durch User
Moin, dann könnte ich ja einfach mal zum Programmstart die Spannungsversorgung des LCD unterbrechen. Dann müsste ja alles wieder einwandfrei funktionieren. Ich habe übrigens mal die HD44870-Standardroutinen probiert. Damit läuft das Display überhaupt nicht! Holger
Michael U. schrieb: > @Frickelfritze: genau dieser Ablauf gilt aber nur nach PowerOn, wenn das > Display im 8Bit-Mode ist. Nein, er funktioniert immer. Wenn ich mein Display einmal gestartet habe kann ich die Initialisierungs-Sequenz unverändert immer wieder (z.B. nach einem Prozesor-Reset) ausführen ohne dass das Display zickt. Ist auch daran erkennbar dass das Kommando-Byte 0011xxxx sonst nicht im Befehlssatz vorkommt. Man beachte C/D. Es wäre auch Schwachsinn wenn die Initialsierung einer Hardware daran hängt ob ich gerade eingeschaltet habe oder später was mache.
Hallo, Du hast recht. Bleibt also wohl nur, daß er die Wartezeiten in der Resetsequenz nicht einhält. Gruß aus Berlin Michael
Holger schrieb: > Ich habe übrigens mal die HD44870-Standardroutinen probiert. Damit läuft > das Display überhaupt nicht! Dann musst du wohl deine Hard- und Software noch mal etwas genauer anschauen. Das Display selbst wohl eher weniger.
Michael U. schrieb: > Einige Hersteller auch des HD44780 hatten mal eine Soft-Rest Angabe in > ihren Datenblättern, die ging manchmal auch mit anderen Kontrollern, ich > finde das aber gerade nicht mehr und in meinem Datenblatt des ST7066U > steht dazu auch nichts. Wenn ich mich recht erinnere ging das etwa so: Das Kommando, um das Display auf 8 Bit zu setzen, ist Hex 3x (ich hoffe die 3 stimmt). Wichtig ist aber eigentlich, daß nur das obere Nibble signifikant ist. Man könnte also auch 33 senden, beide Nibble also gleich machen. Ich versuche mal das zu skitzieren. Da nur 4 Bit angeschlossen sind ist hier jeder Transfer auch 4 Bit. Zuerst der Fall, daß das Display ein unteres Nibble erwartet
1 | 3 komplettiert den angefangenen vorigen Transfer. Erzeugt vermutlich |
2 | Unsinn
|
3 | 3 oberes Nibble von "set to 8 Bit" |
4 | 3 unteres Nibble. Das Display ist jetzt im 8 Bit Mode und kann gezielt |
5 | auf 4 Bit geschaltet werden |
Jetzt der Fall, daß ein oberes Nibble erwartet wird
1 | 3 oberes Nibble von "set to 8 Bit" |
2 | 3 unteres Nibble. Das Display ist jetzt im 8 Bit Mode |
3 | 3 "set to 8 Bit", das untere Nibble kommt von den unbenutzten unteren |
4 | Datenleitungen, ist aber nicht signifikant. Das Display ist immer |
5 | noch im 8 Bit Mode und kann gezielt auf 4 Bit geschaltet werden |
Schickt man also 3 mal hintereinander eine 0x3, sollte das Display danach immer im 8 Bit Mode sein. Danach kann man dann den 4 Bit Mode einschalten. MfG Klaus
Klaus schrieb: > Schickt man also 3 mal hintereinander eine 0x3, sollte das Display > danach immer im 8 Bit Mode sein. Du erfindest das Rad neu bzw trägst Eulen nach Athen. Das was du schreibst macht genau die im Datenblat vorgeschriebene Initialisierung.
Frickelfritze schrieb: > Du erfindest das Rad neu bzw trägst Eulen nach Athen. Und ich war so stolz, daß ich verstanden habe, warum das so gemacht wird :( MfG Klaus
Moin, hier ist die Lösung: 1. Nach einem Reset ist ja ein AVR-Portpin als Eingangspin geschaltet. Ich verwende PD2 und schalte den dann als Ausgang. Dort sind die +Ub des LCD angeschlossen. Den schalte ich dann auf High und dann wartet mein Programm 50 ms. Dann LCD-Init. Den Hinweis habe ich in einem anderen Forum gefunden: Im Datenblatt steht, dass als erstes DB5 und DB4 high sein müssen. Im Forum stand, dass dies ein Fehler sei und nur DB5 auf High stehen soll. Ich habe meine Init-Routine angepasst und nun läuft es wie es soll! Das Display soll HD44870-Kompatibel sein. Die Init-Routine ist aber völlig anders. Holger
Holger schrieb: > Durch Zufall habe ich folgenden Effekt entdeckt. Drücke ich Reset, dann > erscheinen nur noch irgendwelche Symbole anstelle meines Textes. > > Drücke ich noch einmal Reset, dann erscheint wieder "Hello World!". Das > Spiel kann man so weitertreiben. Initialisierung macht kein 'Clear Screen'! Du siehst (teilweise) dass wass da war bevor der Reset. Und bevor der zweite reset könnte ein 'Clear Screen' gewesen sein. Bedenke bei 'Reset' dass zwei selbststaändige Geräte im Spiel sind: Mikro und LCD.
:
Bearbeitet durch User
Geert H. schrieb: > Bedenke bei 'Reset' dass zwei selbststaändige Geräte im Spiel sind: > Mikro und LCD. Moin, dass hat sich ja nun durch meinen vorherigen Beitrag egalisiert. Holger
Michael U. schrieb: > Hallo, > > das Problem hatte ich auch schon mit einigen Displays. Ursache ist, daß > das Problem ja im 4Bit-Mode ist und auch bleibt. Es gibt da keinen > offiziellen Rückweg. > Damit läuft die normale Initialisierung gegen die Wand, weil die > Kommandos ja bereits als 4Bit-Kommandos interpretiert werden. > > Einige Hersteller auch des HD44780 hatten mal eine Soft-Rest Angabe in > ihren Datenblättern, die ging manchmal auch mit anderen Kontrollern, ich > finde das aber gerade nicht mehr und in meinem Datenblatt des ST7066U > steht dazu auch nichts. > > Gruß aus Berlin > Michael Stimmt. Ein zweites Software-Init funkzioniert nicht / nicht immer, und kann schwere Fehler machen. http://mcselec.com/index2.php?option=com_forum&Itemid=59&page=viewtopic&t=13185&highlight=initlcd&sid=3ba841e1ce6a5c83aeff8bdc992cecf3
:
Bearbeitet durch User
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.