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!
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.
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.
Nein! enable ist dies: enable: sbi PORTD,1 ;E=1 nop nop nop cbi PORTD,1 ;E=0 nop nop nop ret
WIrd das DDRD 4-7 irgendwann wieder auf Ausgang gesetzt?
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?
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.