Frage zur Displayinitialisierung

Gast #89930
Lesenswert?

Hallo,
ich will ja nicht eure Zeit verschwenden aber ich habe da mal eine
Frage. Und zwar zur LCD intialisierung. Ich habe daheim alles mal
aufgebaut (funktioniert auch alles). Ich kann jetzt Text am LCD
darstellen. Das Programm kann ich auch nachvollziehen. Nur eben den
Teil mit der Displayinitalisierung nicht. Irgendwie stimmen die Bits
doch mit dem LCD-Datenblatt nicht überein? Könntet ihr mir vielleicht
ein paar Kommentare an den unteren Text schreiben?


lcd_init:
           ldi  temp3,50
powerupwait:
           rcall  delay5ms
           dec  temp3
           brne  powerupwait
           ldi temp1, 0b00000011        ;muss 3mal hintereinander
gesendet  ???
        ?  out PORTD, temp1             ;werden zur Initialisierung
           rcall lcd_enable             ;1
           rcall delay5ms
           rcall lcd_enable             ;2
           rcall delay5ms
           rcall lcd_enable             ;und 3!
           rcall delay5ms
        ?  ldi temp1, 0b00000010        ;4bit-Modus einstellen
           out PORTD, temp1
           rcall lcd_enable
           rcall delay5ms
        ?  ldi temp1, 0b00101000        ;noch was einstellen...
           rcall lcd_command
        ?  ldi temp1, 0b00001100        ;...nochwas...
           rcall lcd_command
        ?  ldi temp1, 0b00000100        ;endlich fertig
           rcall lcd_command
           ret
Gast #89932
Lesenswert?

Hallo Bastian,

habe selber noch kein LCD angesteuert und weis auch nicht welcher
controller drauf ist aber so vom gefühl her

du schaltest in den 4bit mod

       > ?  ldi temp1, 0b00000010        ;4bit-Modus einstellen
       |    out PORTD, temp1
       |    rcall lcd_enable
       |    rcall delay5ms
       > ?  ldi temp1, 0b0010 ??? 1000        ;noch was einstellen...

           und dann     4bit  u. 4bit

auf welche 4bit hört dein LCD da ????
würds einfach mal tauschen die beiden einstellung!
denke einen Test ist´s wert??

Gruß Stefan
Gast #89934
Lesenswert?

Hallo Bastian,

meinte nur das du das disp nicht mit einem 8bit wort ansprechen kannst
da du es ja vorher schon in den 4bit modus hast ????
rein von der logik her

stimmt das so ?? hab selber noch nie mit einem lcd gespielt :-))

ich würde einfach diese beiden teile mal zum test tauschen im quell

                       rcall delay5ms
auf 4bit umgestellt>?  ldi temp1, 0b00000010   ;4bit-Modus einstellen

                       out PORTD, temp1
                       rcall lcd_enable
                       rcall delay5ms
8bit ausgabe >>     ?  ldi temp1, 0b00101000   ;noch was einstellen...

                       rcall lcd_command

gruß stefan
Gast #89935
Lesenswert?

Achso,
also in dem Unterprogramm LCD_command werden anhand von dem Befehl
`swap´ die beiden Nipples also die unteren und die oberen 4 Bits
einzeln nacheinander ausgegeben.

Guckst du hier:
lcd_command:
           mov temp2, temp1
           swap temp1
           andi temp1, 0b00001111
           out PORTD, temp1
           rcall lcd_enable
           andi temp2, 0b00001111
           out PORTD, temp2
           rcall lcd_enable
           rcall delay50us
           ret

Mein Problem ist, dass ich die Bits die nacheinander an das LCD
geschickt werden, anhand von dem LCD-Datenblatt nicht nachvollziehen
kann.
Gast #89936
Lesenswert?

0b00000010 = Clear Dislplay
Bei den Anderen sind schon die Parameter für 4/8 bit Modus,
Cursor, Shift links, Schriftgröße usw.

Guck mal bei displaytech
z.B. Cmd Function Set

RS = 0
RW = 0
Daten byte
0b0011NFXX

N = Anzahl Zeilen vom LCD (also 1 oder 2... 2 zeilen auch wenn es 4
sind)
F = Font 5x7 =0 Font 5x10 = 1

usw. steht eigentlich alles drin
Gast #89938
Lesenswert?

Hy Sebastian,
also Clear Display ist doch schon mal 0b00000001.
Ich hab ja auch die Instruction Tabelle vor mir liegen, aber ich wüsste
gerne was bei dem Assemblertext nacheinander passiert.
Am besten wäre es wenn mir jemand grat mal neben den A.Text die
Kommentare dazuschreiben könnte.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren