Forum: Mikrocontroller und Digitale Elektronik HD44780 busyflag auslesen in avrasm, Denkfehler?


von Attila (Gast)


Angehängte Dateien:

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!

von 44780 (Gast)


Lesenswert?

>in    temp,PORTD
PIND!

von Attila (Gast)


Lesenswert?

Danke!

von Klaus2m5 (Gast)


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.

von Attila (Gast)


Angehängte Dateien:

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.

von 44780 (Gast)


Lesenswert?

verändert enable temp?

von Attila (Gast)


Lesenswert?

Nein! enable ist dies:

enable:
  sbi    PORTD,1    ;E=1
      nop
      nop
      nop
         cbi    PORTD,1    ;E=0
      nop
      nop
      nop
      ret

von Klaus2m5 (Gast)


Lesenswert?

WIrd das DDRD 4-7 irgendwann wieder auf Ausgang gesetzt?

von Attila (Gast)


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?

von David (Gast)


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

von spess53 (Gast)


Lesenswert?

Hi

>Geht das irgendwann vorbei?

Nur wenn du aufhörst zu programmieren. Aber es geht immer schneller, bis 
man die Fehler selbst findet.

MfG Spess

von Attila (Gast)


Angehängte Dateien:

Lesenswert?

Vielen Dank für die Hilfe!

Anbei der gesammte Code der einen Text auf einem Display ausgibt. Ich 
hoffe es hilft dem Einen oder Anderen.

von Klaus2m5 (Gast)


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.

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.