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

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.

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.