www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik KS0073 und 4 Zeilen LCD


Autor: Anne O. (anne)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Anne O. (anne)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gast (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Anne O. (anne)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anne O. (anne)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anne Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anne O. (anne)
Datum:

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

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.