Hallo McFlay,
ich glaube das Hauptproblem ist, dass du dein komplettes Programm in die ADC ISR gepackt hast.
Der ADC triggert sich ja selber, die ISR wird also zyklisch aufgerufen. In der ADC-ISR hast du sogar eine Pause und am Ende der ISR gibtst du wieder die Interrupts global frei (SEI), bevor du die Registerinhalte vom Stack holst.
Die Wahrscheinlichkeit, dass direkt nachdem du die Interrupts global freigibst erneut die ADC ISR aufgerufen wird, ist sehr hoch (ich gehe mal von 100% aus, wenn die Pause ausreichend groß ist!). Dann kommt es zum "Absturz" deines Programms (Verschachtelte ISR)
Du kannst wahrscheinlich den "Absturz" verhindern, wenn du SEI in der ISR entfernst (RETI setzt SEI), aber wie schon geschrieben, du solltest dein Programm hauptsächlich in der Hauptschleife laufen lassen.
Grüße,
Dirk
ich glaube das Hauptproblem ist, dass du dein komplettes Programm in die ADC ISR gepackt hast.
Der ADC triggert sich ja selber, die ISR wird also zyklisch aufgerufen. In der ADC-ISR hast du sogar eine Pause und am Ende der ISR gibtst du wieder die Interrupts global frei (SEI), bevor du die Registerinhalte vom Stack holst.
Die Wahrscheinlichkeit, dass direkt nachdem du die Interrupts global freigibst erneut die ADC ISR aufgerufen wird, ist sehr hoch (ich gehe mal von 100% aus, wenn die Pause ausreichend groß ist!). Dann kommt es zum "Absturz" deines Programms (Verschachtelte ISR)
Du kannst wahrscheinlich den "Absturz" verhindern, wenn du SEI in der ISR entfernst (RETI setzt SEI), aber wie schon geschrieben, du solltest dein Programm hauptsächlich in der Hauptschleife laufen lassen.
Grüße,
Dirk