Cześć,
Jest układ na Atmedze z timerem2 w trybie asynchronicznym realizującym RTC. Zależnie do stanu pinu kontrolowanego przez przerwanie INT2 układ ma albo działać normalnie, albo w uśpieniu (dokładniej na INT2 zrobioną mam detekcję zera sieci zasilającej i dodatkowo byłby to wskaźnik istnienia zasilania w ogóle). Timer2 musi pracować non-stop.
I czegoś tu nie łapię. Wprowadzam układ w stan uśpienia w tryb SLEEP_MODE_PWR_SAVE, tyle że przerwanie od Timera2 wybudza go po sekundzie (PRAWIDŁOWO) i dalej już układ działa w trybie wybudzenia. Chciałbym aby przerwanie od Timera2 spowodowało tylko wykonanie procedury jego obsługi i układ wrócił w uśpienie. Całkowite wybudzenie następowałoby po wykonaniu sleep_disable(); w obsłudze przerwania INT2.
Wydawało mi się, że wystarczy w końcu obsługi przerwania od TIMER2 wykonać sleep_mode() ale wtedy układ w ogóle nie działa (nigdzie nie mogę wyczytać, że sleep_mode() nie może być wykonane w przerwaniu).
Jest układ na Atmedze z timerem2 w trybie asynchronicznym realizującym RTC. Zależnie do stanu pinu kontrolowanego przez przerwanie INT2 układ ma albo działać normalnie, albo w uśpieniu (dokładniej na INT2 zrobioną mam detekcję zera sieci zasilającej i dodatkowo byłby to wskaźnik istnienia zasilania w ogóle). Timer2 musi pracować non-stop.
I czegoś tu nie łapię. Wprowadzam układ w stan uśpienia w tryb SLEEP_MODE_PWR_SAVE, tyle że przerwanie od Timera2 wybudza go po sekundzie (PRAWIDŁOWO) i dalej już układ działa w trybie wybudzenia. Chciałbym aby przerwanie od Timera2 spowodowało tylko wykonanie procedury jego obsługi i układ wrócił w uśpienie. Całkowite wybudzenie następowałoby po wykonaniu sleep_disable(); w obsłudze przerwania INT2.
Wydawało mi się, że wystarczy w końcu obsługi przerwania od TIMER2 wykonać sleep_mode() ale wtedy układ w ogóle nie działa (nigdzie nie mogę wyczytać, że sleep_mode() nie może być wykonane w przerwaniu).