Nils L. schrieb:
> Peter D. schrieb:
>> Der Taster prellt.
>
> Daran habe ich auch schon gedacht. Ich weiß nur nicht, wie ich meinen
> Code anpassen muss, damit der µC so reagiert wie er soll. Der Taster
> soll später durch einen Neigungsschalter ersetzt werden. Also wird es
> nicht zu verhindern sein, dass es prellt.
Dein Code wird beim ersten Zappeln aufwachen, einen zufälligen Wert
lesen, vermutlich oft den richtigen, aber eben nicht immer. Dann
verbringt er knapp 900ms mit "Code senden", wobei das auch als
Entprellung angesehen werden kann. In der Zeit konnte aber ein weiteres
Zappeln am Pin einen weiteren PCInt0 anfordern, d.h. das zugehörige GIFR
Bit setzen.
> Matthias S. schrieb:
>> Es lohnt sich, hier noch etwaige 'Pending' Interrupts zu löschen, bevor
>> der MC schläft.
Wenn man den Wunsch hat, daß der wegen Prellen während der Sendezeit
anstehende Interrupt sich nicht auswirkt, dann sollte man das tun.
> Wie kann ich diese löschen?
> Im Datenblatt habe ich
>
> gefunden um Interrupts zurückzusetzen. Kann ich das so in meinen Code
> einfügen, vor dem sleep_mode()?
Ja
> Oder gehört das an eine andere Stelle?
>
> Peter D. schrieb:
>> Ohne ISR erfolgt das Aufwachen durch Sprung zum Resetvector (0x0000).
>> Der Interrupt ist ja freigegeben.
>
> Ich habe ja eine ISR. Oder ist das für den externen Interrupt die
> falsche? Löse ich mit meinem Interrupt ungewollt einen Reset aus?
PCInt0_vect müßte der Richtige sein (oder nur PCInt_vect? das sagt mir
in der Regel die IDE). Der ist aber eigentlich nur dazu da, den μC
aufzuwecken und das PCIF Bit in GIFR zu löschen. Letzteres macht die HW
selbstständig.
Trotz genereller Abneigung dagegen (und Hang zur PeDa-Entprellung) wäre
hier ein RC-Tiefpaß die simpelste Lösung. Wartezeit zwischen den
Schaltvorgängen hat man mehr als genug (fast 1s) und das einzige was
erreicht werden muß, ist daß der Pegel am Pin nach dem ersten Interrupt
für einige μs konstant bleibt. Und natürlich vor dem erneuten "warten
auf Schaltvorgang" das PCIF löschen, um zwischenzeitliche Flanken zu
"überlesen".
Oder eventuell doch mal PeDa-Entprellung ausprobieren und neue
Erkenntnisse gewinnen.