Forum: Mikrocontroller und Digitale Elektronik Problem mit LCD Initialisierung


von Sven L. (d-bracket)


Lesenswert?

Hi,

ich versuche zur Zeit mein LCD 162 von Displaytech (Datenblatt im 
Anhang) zu programmieren. Ich verwende einen ATMEGA8535 und programmiere 
in Assembler. Nun habe ich das Problem, dass sobald ich bei der 
Initialisierung die Daten für den Set_Function schicken möchte, das LCD 
mir überhaupt nichts mehr anzeigt. Wenn ich kein Set_Function übertrage 
sondern nur Display_on, dann kann ich mir Buchstaben und Zahlen darauf 
anzeigen lassen. Jedoch leider nur in der 1. Zeile. Weiss vielleicht 
jemand warum mein LCD nichts mehr anzeigt, wenn ich die Daten für den 
Set_Function schicke? Wäre echt wenn ihr mir da weiterhelfen könntet.

Gruss
Sven

von Benedikt K. (benedikt)


Lesenswert?

Du machst irgendwas vorher bei der Initialisierung falsch.

von Das Kleinkind (Gast)


Lesenswert?

Ja, doch das Datenblatt ist sehr informativ.

von Sven L. (d-bracket)


Lesenswert?

Hier könnt ihr noch meine Initialisierung sehen. Habe mich dabei genau 
an das Datenblatt gehalten. Das Unterprogramm MS15T ist eine 
Zeitschleife mit 15 ms Verzögerung.

rcall MS15T    ;Wecken - Anfang
ldi A, 0x30    ;DB4 + DB5 auf High
out PortC, A
sbi PORTA, 3    ;Enable High
cbi PORTA, 3    ;Enable Low

rcall MS15T
ldi A, 0x30    ;DB4 + DB5 auf High
out PortC, A
sbi PORTA, 3    ;Enable High
cbi PORTA, 3    ;Enable Low

rcall MS15T
ldi A, 0x30    ;DB4 + DB5 auf High
out PortC, A
sbi PORTA, 3    ;Enable High
cbi PORTA, 3    ;Enable Low

;Set Function
rcall MS15T
ldi A, 0x38    ;Funktion: Alle 8 Bit werden auf einmal übertragen, 2. 
Zeile des Displays aktiviert, 5x7 Dots pro Zeichen
out PORTC, A
sbi PORTA, 3    ;Enable High
cbi PORTA, 3    ;Enable Low

;Display löschen
rcall MS15T
ldi A, 0x01
out PortC, A    ;Funktion: Display löschen
sbi PORTA, 3    ;Enable High
cbi PORTA, 3    ;Enable Low

;Entry Mode Set
rcall MS15T
ldi A, 0x06    ;Funktion: Cursor wird nach dem Ausgeben eines 
Buchstabens nach rechts geschoben
out PORTC, A
sbi PORTA, 3    ;Enable High
cbi PORTA, 3    ;Enable Low

;Display On/Off
rcall MS15T
ldi A, 0x0C    ;Funktion: Display an, Cursor aus, Cursor blinkt nicht
out PORTC, A
sbi PORTA, 3    ;Enable High
cbi PORTA, 3    ;Enable Low

von Benedikt K. (benedikt)


Lesenswert?

Mach den Enable Impuls mal etwas länger, die sind etwas kurz (1-2 nops 
dazwischen) und die Wartezeit vor dem ersten Befehl größer (mind. 
50-100ms) falls du die BOD nicht aktiviert und auf >=4,0V gestellt hast. 
Wenn RS und RW passen, dann sieht der Code ansonsten OK aus.

von Sven L. (d-bracket)


Lesenswert?

Ich habe gerade ein paar Nops eingefügt. Hat leider nichts geändert. RS 
und RW habe ich während der ganzen Initialisierung auf Low liegen. 
Müsste also auch passen. Keine Ahnung was ich noch machen soll.

von Sven L. (d-bracket)


Angehängte Dateien:

Lesenswert?

Oh ich merk gerade das ich das Datenblatt gar nicht im Anhang hatte :D

von Sven L. (d-bracket)


Lesenswert?

Hi,
mittlerweile funkitoniert die Initialisierung. Hast doch recht gehabt 
Benedikt. Ich habe am Anfang zwischen der Enable High-Low Flanke zwei 
Nops reingesetzt.

sbi PORTA, 3    ;Enable High
nop
nop
cbi PORTA, 3    ;Enable Low

Das hat leider nichts gebracht. Anschließend habe ich Enable über ein 
Register gesetzt bzw. gezurückzusetzt.

ldi A, 0x08
out PortA, A
ldi A, 0x00
out PortA, A

Ich denke das es nun funktioniert weil das Display nun zwischen den 
Flanken genug Zeit hat um den Befehl zu bearbeiten. Nochmals Danke.

Gruss Sven

von Benedikt K. (benedikt)


Lesenswert?

Was ist denn noch an PortA angeschlossen?
Das klingt sehr danach, als wenn irgendein anderer Pin falsch wäre und 
durch das Beschreiben von PortA richtig auf Low gesetzt wird (z.B. RS 
oder RW). Denn deine zweite Lösung ist schneller als die sbi/cbi 
Version.

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.