Wahrscheinlich ist dir dein µC schlicht und einfach abgestürzt

Übrigens bringt es nichts, in einer INT0-ISR den INT0 zu deaktivieren, zu warten, und dann wieder zu aktivieren. Das zugehörige INT0-Flag wird dennoch gesetzt. Du kannst den INT0 einfach aktiv lassen, und am Ende der ISR das Flag löschen (durch Schreiben einer 1).

Übrigens wird dein Code besser lesbar, wenn du ihn einrückst...

Um den Wert aus einem Port zurücklesen (wie du es versuchst), liest man wieder PORTx und nicht PINx. PINx liest den Input, der dich aber gar nicht nicht interessiert in dem Beispiel...

Wenn du einen sin() durch varieren deiner Zeitbasis erhalten willst, dann müssen die Zeitstückchen nicht sinusförmig sein, sindern proportional zu C+1/sin'(x) sein, also i.w. cosec().

Zitat Zitat von izaseba
signal.h gilt als veraltet (avr 3.4.4) und wird irgendwann aus avr-gcc raufliegen, man soll nur die interrupt.h benutzen.
Momentan braucht man sie noch.
In avr/interrupt.h werden zB die Makros sei() und cli() definiert.
In avr/signal.h werden zB die Makros SIGNAL und INTERRUPT definiert.