HD44780 busyflag auslesen in avrasm, Denkfehler?

Gast #1967555
Lesenswert?

Hallo!

Ich versuche das busyflag eines LCD controllers auszulesen indem ich nur 
das obere nibble "betrachte" und das untere ignoriere. Das Display 
funktionert ansonsten, mit delay und ohne busyflag abfrage!
Denke ich falsch? Also habe ich den falschen Ansatz? Es sieht zu einfach 
aus und geht natürlich nicht.

Schaut doch bitte mal in den code-Ausschnitt!
Angehängte Dateien:
Gast #1967603
Lesenswert?

und...

>busy:    ldi   temp, 0b00001111  ;Datenleitungen 4-7 als Eingang
>      out    DDRD,temp

>      sbrc  temp,3        ;da temp oderes nibble enthält entspricht 3=7

Der Eingang liegt auf Bit 4-7 - also erstes nibble 7=7, zweites nibble 
währe dann 7=3!. Außerdem glaube ich nicht, dass Du das Enable für das 
zweite Nibble einfach weglassen kannst.
Gast #1967708
Lesenswert?

Klaus!

Du hast natürlich 100% recht. Bit 7 = 7!
Das untere nibble enable ich ja mit der enable Routine. Ich lese es nur 
nicht ein. Anbei der geänderte Code der leider immer noch nicht 
funktioniert.

Die busy routine plaziere ich hinter dem Schreibvorgang. Dort habe ich 
bisher ein delay und alles funktioniert einwandfrei. Ersetze ich das 
delay durch die busy routine passiert nichts.
Angehängte Dateien:
Gast #1967873
Lesenswert?

Klaus!

Vielen Dank! Das wars und es läuft! 2 Fragen:

1) Soll ich den code hier nochmal korrigiert einstellen für andere user?
2) Die insgesamt 3 Fehler die ich gemacht habe, sind das typische 
Anfängerfehler? Geht das irgendwann vorbei?
Gast #1967896
Lesenswert?

PORTD und PIND vertauschen ist ein typischer Anfängerfehler, der Rest 
könnten auch Flüchtigkeitsfehler gewesen sein. Was ähnliches wird man 
immer wieder mal suchen müssen, wobei man mit der Erfahrung besser und 
schneller beim Bugsuchen wird.

Code reinstellen hilft evtl. anderen Usern die diesen Thread finden.

Gruß
David
Gast #1967968
Lesenswert?

Attila schrieb:
> Klaus!
>
> Vielen Dank! Das wars und es läuft! 2 Fragen:
>
> 1) Soll ich den code hier nochmal korrigiert einstellen für andere user?
> 2) Die insgesamt 3 Fehler die ich gemacht habe, sind das typische
> Anfängerfehler? Geht das irgendwann vorbei?

Den korrigierten Code brauchst Du nicht zu posten, denn dafür ist dieser 
Code-Schnipsel eigentlich zu trivial.

PORT und PIN verwechselt - Bit3 statt Bit7 (logischer Fehler) - Davor 
ist keiner sicher. Es hilft, wenn man vorher die Benutzung der Ports 
separat dokumentiert. Am Besten auch eigene Definitionen anstelle der 
Standardnamen, z. B.
.EQU  LCD_IN =PIND  ;auch für DDR & PORT definieren
;LCD Bits 0-3 control - 4-7 data
.EQU  BUSY   =7     ;auch für control (R/W, RS, ENA)

DDRD - Ausgangszustand wieder herstellen - Systematik. Alles, was man 
nach Initialisierung verändert, muss auch wieder in den 
Initialisierungszustand gebracht werden. Wird irgendwann mal so 
selbstverständlich, wie PUSH und POP.

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