Waldkauz schrieb:
> setbit(PORTD, 7);
> _delay_ms(50);
> clearbit(PORTD, 7);
> _delay_ms(50);
Du kannst nicht ganze 100ms (eine ganze zehntel Sekunde) in der ISR()
mit Nichtstun vertrödeln. Bis dahin tritt ja schon wieder der nächste
Interrupt auf. Oder drehst Du den Propeller in Ultra-Zeitlupe? Delays in
ISRs gehen zu 99% in die Hose.
Setze lediglich ein Flag in der ISR, toggle das Bit PD7 in der
Hauptschleife. Am besten letzteres über einen Timer, denn auch das
Warten einer ganzen zehntel Sekunde in der Hauptschleife hat meist
weitere unerwünschte Nebeneffekte.
Merke:
Vermeide Delays. delay_ms() kann man ja mal für kleine Tests verwenden,
wenn man weiß, was man tut. Praxistauglich ist es meistens nicht.
delay_us() kann man in seltenen Fällen durchgehen lassen, wenn es sich
um sehr kleine Zeitspannen handelt, wo man sowieso nichts zwischendurch
zu tun hat. Aber sonst sind Flags und Timer die richtige Wahl. Dafür
sind sie da.