Forum: Mikrocontroller und Digitale Elektronik KS0073 und 4 Zeilen LCD


von Anne O. (anne)


Angehängte Dateien:

Lesenswert?

Hallo,

ich weiß das es dieses Thema schon mehrfach gab, aber ich habe leider 
keine Lösung gefunden. Es geht um einen ASM-Code für einen AT89C51CC03.

Mein Display macht was es will. Mal macht es die Init richtig und der 
Cursor blinkt an der richtigen Stelle. Aber nach Einschalten oder Reset, 
geht es mal und mal nicht. Wenn es den Text ausgibt, gibt es zwischen 
den Zeichen immer 2 Leerzeichen aus.

Gibt es beim Ks0073 auch so ein 3maliges Power On, wie beim HD44780?

Vielen Dank schon mal!

Grüße Anne

von Anne O. (anne)


Lesenswert?

Hallo nochmal,

kann denn jemand mal kurz zusammenfassen, was die Unterschiede zwischen 
den beiden Controllern sind?

Bisher habe ich nur die Unterschiedlichen Befehle bei der Init gesehen 
und die  max. Dauer der fallenden Flanke des Enable-Bits.

Grüße Anne

von gast (Gast)


Angehängte Dateien:

Lesenswert?

hallo

soweit ich weiß soll ks0070/73 der nachfolger sein für den HD44780 habe 
mal son bisschen umherexperementiert und zwar du hast nach der wartezeit 
von 18ms(einwenig höher setzen 100ms) schreibst du #030h, muss der wert 
auf #003h geändert werden sollte dann funktionieren siehe anhang du 
schreibst in cisc???

init_1:  lcall  delay18ms  ; Zeitverzögerung von 18ms                mov 
P0, #030h  ; Datenwert für POWER-ON an P1 egen
  lcall   enable    ; Daten in LCD übernehmen
  djnz  R7, init_1      ; LCD empfangsbereit
  lcall  busy        ; Abfrage des Busy-Flags
  mov  A, #034h
  lcall  write_instr
  mov  A, #009h
  lcall  write_instr
  mov  A, #030h
  lcall  write_instr
  mov  A, #00Fh
  lcall  write_instr  ; Anweisung an LCD ausgeben
  mov  A, #001h    ; Display wird gelöscht              lcall 
write_instr    ; Anweisung an LCD ausgeben
  mov  A, #006h    ; Cursor automatisch inkrementieren
  lcall  write_instr      ; Anweisung an LCD ausgeben
  ret


lcd_init:
    ldi  temp0,$64    ;20ms warten
    rcall  waitxms
    ldi  temp1,0b00000011  ;???
    out  portB,temp1
    rcall  lcd_enable    ;enablen
    rcall  lcd_enable    ;enablen
    rcall  lcd_enable    ;enablen
    ldi  temp1,0b00000010  ;4bit mod einstellen
    out  portB,temp1
    rcall  lcd_enable
    ldi  temp1,0b00101000  ;funktionset
    rcall  lcd_command
    ldi  temp1,0b00001100  ;display on
    rcall  lcd_command
    ldi  temp1,0b00000110  ;entry mod set
    rcall  lcd_command
    ret

von Anne O. (anne)


Lesenswert?

Hallo,

vielen Dank für Deine Antwort! Ich habe eben im ASM für einen 8051er 
Controller geschrieben.

Ich werde den Wert mal auf 03h ändern und schauen was dann passiert. Und 
diese 03h werden nur 1 mal ans LCD geschickt? Nicht 3 mal wie beim 
HD44780 der Power-On-Befehl?!

Wieso rufst Du in deinem Programm 3 mal das Enable auf?

Viele Grüße Anne

von gast (Gast)


Lesenswert?

naja habe mal in der ausbildung 8051 und avr programmiert
mmhh diese 03hex musst du 3mal enablen i hab im net versucht was zu 
finden warum grade 03hex weil beim ks0070 musst du auch (laut 
datenblatt) 30hex schreiben aber dann spinnt mein lcd nach jeden reset 
kann aber auch der return home befehl sein
achso lcd ist 8bitmode?? mit der abfrage busy habe ich leider keine 
erfahrung wie du sehen kannst ist meine routine zeitabhängig

von Anne O. (anne)


Lesenswert?

Okay, ich werde es heute Abend gleich so testen und mich dann nochmal 
melden!

Vielen Dank erstmal für deine Antwort!

Viele Grüße Anne

von Anne Otto (Gast)


Lesenswert?

Hallo,

nachdem ich es nun auf 03h geändert habe, geht es leider immer noch 
nicht :-(

Hat jemand eine Lösung?

Grüße Anne

von gast (Gast)


Lesenswert?

moin

habe mir mal dein code angeschaut wenn du schon im 4bit-mode bist, muss 
2mal ein halbbyte geschickt werden soll heissen bei 
writ_instr/write_data muss du das obere highbyte schicken dann das 
lowbyte schicken

von Anne O. (anne)


Lesenswert?

Nein nein, dass LCD ist im 8-Bit-Mode initialisiert. Evtl stimmen die 
Kommentare nicht ganz!

von jack (Gast)


Lesenswert?

Leg mal R/W auf Masse, also nur schreiben.

Power-on-Reset des LCDs abwarten (ca. 100ms)

Dann folgende Hex-Befehle (RS=0) schicken:

34, 09, 30, 0F, 01, 06

Zwischen den Befehlen 2ms warten, Enable braucht keine Wartezeit,
einfach setb und clr Enable.

Jetzt kannst Du Daten senden.

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.