www.mikrocontroller.net

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


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

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

Autor: 44780 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>in    temp,PORTD
PIND!

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!

Autor: Klaus2m5 (Gast)
Datum:

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

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

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

Autor: 44780 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
verändert enable temp?

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein! enable ist dies:

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

Autor: Klaus2m5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
WIrd das DDRD 4-7 irgendwann wieder auf Ausgang gesetzt?

Autor: Attila (Gast)
Datum:

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

Autor: David (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

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

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

Autor: Klaus2m5 (Gast)
Datum:

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

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.