Forum: Mikrocontroller und Digitale Elektronik Lcd 2 zeilig initialisieren


von Jogi (Gast)


Lesenswert?

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

von Otto (Gast)


Lesenswert?

Hallo Jogi,

>Als Anhang ist der c-code, wo

ja wo denn ?

Otto

von Wolfgang (Gast)


Lesenswert?

3 mal enable am anfang vergessen ?

von Christoph (Gast)


Lesenswert?

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.

von Jogi (Gast)


Angehängte Dateien:

Lesenswert?

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

von Jogi (Gast)


Angehängte Dateien:

Lesenswert?

nochmals sorry, der letzte Quellcode war ja nur die Headerdatei...;)

von Jogi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.