Hallo Forum. Ich versuche einen Ereigniszähler mit AVR4433 zu bauen. Wenn er fertig ist sollen die Pegeländerungen an Pin-INT0 pro Sekunde ausgegeben werden. In dem angehängten Code wird ein Sekunden-Interrupt aktiviert und ein INT0. Sekündlich wird ein Flag gesetzt dass die Ausgabe aktiviert. Im INT0 werden die Zählervariablen inkrementiert. Ich habe den Pin mit einem Pullup-Widerstand versehen und schliesse ihn dann gegen Masse kurz. Prellen würde ich also verstehen. Meistens Passiert gar nichts. Dann und wann bekomme ich unter Zwang den Zähler ein bisschen höher. Irgendwas ist mit meinem INT0-Code falsch. Meine Initialisierung sieht so aus: ldi rmp,0b01000000 ; out GIMSK,rmp ldi rmp,0b00000001 ; out MCUCR,rmp ldi rmp,0b01000000 out GIFR,rmp sei Kann mir jemand sagen was ich falsch mache?
hmmm, also ich bin mir nicht sehr sicher, hatte aber die selben probleme bis ich das SREG gesichert habe ;-) dazu könnte noch die problematik kommen das der int innerhalb des zählers mehrfach aufgerufen wird... sooft bis nix mehr geht ;-) hier mal ein kleiner auszug vonwegen struktur: INT_1: in SREG_save, SREG ; save... rcall INT1_off ; einer reicht! rcall alarm ; SMS Versand oder Anruf rcall INT2_on ; hora! manos arriva! out SREG, SREG_save ; rücksichern... reti INT1_on: _setport GIFR, 0b10000000 ; Interrupt loeschen _enableport GIMSK, 0b10000000 ; INT0 zulassen ret INT1_off: _disableport GIMSK, 0b10000000 ; Interrupts aus ret evtl. hilfsts ;-) greetx, [cmp]
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.