HD44780 busyflag auslesen in avrasm, Denkfehler?

Gast #1967555
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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.