Hi Es gibt mal wieder eine Frage zum initialisieren von einem LCD Display. Erstmal Hardware: Atmega 8535 mit 20MHZ Quarz LCD161A von Reichelt Ich habe es so angeschlossen wie im Tutorial hier. (4bit Mode). Es klappt auch alles ganz gut, auch mit der Ausgabe auf dem Display, aber ich kriege es einfach nicht hin die 2. Hälfte des Displays (1x16) zu beschreiben, nur die ersten 8 Zeichen gehen. Ich vermute das die initialisieren Sache nicht richtig klappt, denn wenn ich den Kontrast so stark mache, dass ich nur noch schwarze Vierecke sehe, dann sehe ich diese auch nur bei den ersten 8 Zeichen. Als Anhang ist der c-code, wo auch die Initialisierungsfunktion enthalten ist, wo ja der Fehler sein sollte. Kann sich den jnd. mal anachauen? Ich weiß einfach nicht weiter. PS: Nehmt die Kommentare nicht zu ernst, ich habe den Code teilweise kopiert (zB Tutorial) und dann verändert ohne die Kommentare zu ändern. Danke im Vorraus Jogi
Hi, ich hab hier ein 1*16 Zeichen LCD rumliegen das wie ein 2*8 LCD angesteuert werden will. D.h. nach den ersten 8 Zeichen musst du an einer anderen Speicheradresse weiterschreiben. Klingt so, als wäre das bei deinem genauso. Wenn du die ersten 8 Zeichen korrekt benutzen kannst sollte mit der Initialisierung eigentlich alles in Ordnung sein.
so, hier nochmal der c-code, weiß auch net warum es beim ersten mal nicht wollte. 3mal enable hab ich, das eigentliche initialisieren klappt ja, denn ich bekomme ja über den 4bit Modus eine gescheite Ausgabe hin. Das mit de Adressensprung hab ich auch schon wo gelesen, hat bei mir aber auch nichts gebracht (lcd_command(0xA8);). Meine vermutung ist immer noch das bei der initialisierung was falsch läuft (wegen der Kontrast Sache, siehe erster Post), evtl. ein Timing Problem? Das hier steht im Datasheet: Power On | Wait for more than 15ms after VDD rises to 4.5V | RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 1 * * BF cannot be checked before this instruction. Function Set | Wait for more than 4.1ms | RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 1 * * BF cannot be checked before this instruction. Function Set | Wait for more than 100ms | RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 1 * * BF cannot be checked before this instruction. Function Set | | | | | BF can be checked after following instruction. When BF is not checked, the waiting time between instructions is longer than execution instruction time. | RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 1 N F Function Set (Specify the number of display lines and character font.) The number of display lines and character font cannot be changed afterwards. 0 0 0 0 0 0 1 0 0 0 Display Off 0 0 0 0 0 0 0 0 0 1 Display Clear 0 0 0 0 0 0 0 1 I/D S Entry Mode Set | | â Initialization ends Nach den ersten 3 "0011" kann ich ja aber nur erstmal "0010" an die Ports legen, um in den 4bit Modus zu schalten. Ist es dann evtl. schon zu spät wegen:"The number of display lines and character font cannot bechanged afterwards"?? Aber dann könnte man ja garnicht mit meiner Beschaltung in den 2.zeiligen Modus wechseln. Greez
nochmals sorry, der letzte Quellcode war ja nur die Headerdatei...;)
Ok, ich habs. War wohl ein Timingfehler, hab jetzt einfach 3mal hintereinander das Kommando für 4bit, 2zeilig geschickt. Jetzt gehts. Thx
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.