mega32 interrupt zählt doppelt

Gast #1008534
Lesenswert?

Hallo,
ich habe folgendes Problem:
Ich programmiere in Assembler einen mega32.An Int0
ligt ein Signal an,zum Testen ein Schalter.Habe soweit alles fertig,Wenn 
ich den Interrupt mit dem Schalter auslöse,springt das Programm an die 
richtige Stelle (Interruptroutine) und erhöht dort nur ein 
Register.Danach gehts zurück in den Sleep modus.Das Problem,er erhöht 
das Register immer genau
doppelt,also 1 mal auslösen registerinhalt 2 usw.
Prellen kann nicht sein,in der Interruptroutine lass ich ihn erstmal 
eine halbe sekunde nichts tun.
Also die Routine sieht so aus:
call Pause
inc Zaehler
reti

Das Register wird auch garantiert nicht noch wo anders benutzt.
Wäre schön,wenn mir das mal jemand erklären könnte.
gruss
Andy
Gast #1008552
Lesenswert?

Hallo,
ich hab schon öfters was mit Interrupts gemacht,aber auf anderen avrs.
Das Interruptflag hab ich noch nie gelöscht und die Sachen klappen 
einwandfrei.
Ist das was besonderes bei diesem avr so oder allgemein.
gruss
Andy
Persönliche Seite #1008556
Lesenswert?

Das Interuptflag wird gelöscht sobald die Interruptroutine aufgerufen 
wird.
Das ist auf jedem AVR so.
Wenn aber WÄHREND du in der interruptroutine bist der Interrupt nochmal 
auftritt wird es nochmal gesezt und die ISR nach verlassen erneut 
aufgerufen.

Ist ja normal auch okay, nur in diesem Fall produziert das prellen des 
Tasters halt eine zweiten Interrupt...

So in etwa:

Druck der Taste --> ISR wird aufgerufen --> Flag gelöscht
Taste Prellt (mehrmals) --> Flag wird wieder gesezt
warten
warten
warten
ISR verlassen
Da Flag gesezt wird die ISR ein weiteres mal aufgerufen (jezt ist das 
Prellen vorbei)--> Flag wird gelöscht
warten
warten
warten
ISR verlassen

warten auf nächsten Tastendruck.
Resultat: Variable wurde 2 mal erhöht..)
#1008558
Lesenswert?

Andy wrote:
> Hallo,
> ich hab schon öfters was mit Interrupts gemacht,aber auf anderen avrs.
> Das Interruptflag hab ich noch nie gelöscht und die Sachen klappen
> einwandfrei.
> Ist das was besonderes bei diesem avr so oder allgemein.
> gruss
Das ist bei allen AVRs so (und vermutlich nicht nur da)! Wenn das 
Interrupt-Flag sofort nach dem automatischen Löschen (durch den Aufruf 
des Interrupt Handlers) durch das Prellen wieder gesetzt wird, dann 
kannst Du ne Stunde warten und trotzdem wird sofort nach Verlassen des 
Interrupt Handlers dieser erneut aufgerufen.
Gast #1008567
Lesenswert?

Hallo,
danke für die antworten.
Und ich sitz hier den halben Sonntag und wundere mich.
Die Schaltung hägt im Moment an meinem Gaszaehler und zählt impulse.
In 2 Tagen kann ich das Programm ändern und testen.

gruss
Andy

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren