Witam,
Ostatnio bawiłem się RC5 + przerwanie INT0 + Attiny13. Dekowanie RC5 zrealizowane nie używając timera, a jedynie "delaya" i INT0, uruchamiane stanem niskim. Dekodowanie i rozpoznanie kodu przyciska z pilota działa poprawnie.
Następnie postanowiłem dodatkowo wprowadzić tryb power mode down. Wszytko fajnie działa tzn uC usypia się i wybudza, ale ... tylko dla komendy z pilota, która nie wprowadza dodatkowego opóźnienia za pomocą f. _delay_ms().
Poniżej kod ... będzie mi łatwiej wytłumaczyć.
Jeśli wcisnę przycisk z kodem 0x0C, procesor wybudzi się zdekoduje kod, wejdzie do sekcji i wykona krótki delay. Następnie wyjdzie z sekcji if(). Niestety uC nie wejdzie już w tryb uśpienia.
W przypadku innego kodu, delay nie zostanie wykonany i procesor poprawnie wejdzie w tryb uśpienia.
Oczywiście jak usunę delay z if()-a to wszytko będzie cacy i procesor będzie usypiany poprawnie.
Czy ktoś spotkał się z podobnym problemem?
Próbowałem rożnych kombinacji inicjacji trybu uśpienia, samego usypiania jak i wyłączania przerwania. Zawsze ten sam efekt, procesor nie wejdzie ponownie w stan uśpienia. Dopiero jak wcisnę kolejny iny przycisk pilota (zaraz po przycisku 0x0C), procesor wejdzie w stan uśpienia poprawnie.
....................
Witam ponownie,
Pozwolę odpowiedzieć sobie samemu .. może inni skorzystają z rozwiązania, dość banalnego.
Po pierwsze: aby prawidłowo przetestować sleep moda należy odłączyć programator od płytki testowej (ja akurat używam stk200).
Po drugie: zastąpiłem funkcje biblioteczne inicjujące i włączające sleep moda na własne ustawienie bitów:
Spełnienie obu warunków spowodowało każdorazowe poprawne uśpienie uC.
To tyle w temacie.
Ostatnio bawiłem się RC5 + przerwanie INT0 + Attiny13. Dekowanie RC5 zrealizowane nie używając timera, a jedynie "delaya" i INT0, uruchamiane stanem niskim. Dekodowanie i rozpoznanie kodu przyciska z pilota działa poprawnie.
Następnie postanowiłem dodatkowo wprowadzić tryb power mode down. Wszytko fajnie działa tzn uC usypia się i wybudza, ale ... tylko dla komendy z pilota, która nie wprowadza dodatkowego opóźnienia za pomocą f. _delay_ms().
Poniżej kod ... będzie mi łatwiej wytłumaczyć.
Kod: text
Jeśli wcisnę przycisk z kodem 0x0C, procesor wybudzi się zdekoduje kod, wejdzie do sekcji
Kod: text
W przypadku innego kodu, delay nie zostanie wykonany i procesor poprawnie wejdzie w tryb uśpienia.
Oczywiście jak usunę delay z if()-a to wszytko będzie cacy i procesor będzie usypiany poprawnie.
Czy ktoś spotkał się z podobnym problemem?
Próbowałem rożnych kombinacji inicjacji trybu uśpienia, samego usypiania jak i wyłączania przerwania. Zawsze ten sam efekt, procesor nie wejdzie ponownie w stan uśpienia. Dopiero jak wcisnę kolejny iny przycisk pilota (zaraz po przycisku 0x0C), procesor wejdzie w stan uśpienia poprawnie.
....................
Witam ponownie,
Pozwolę odpowiedzieć sobie samemu .. może inni skorzystają z rozwiązania, dość banalnego.
Po pierwsze: aby prawidłowo przetestować sleep moda należy odłączyć programator od płytki testowej (ja akurat używam stk200).
Po drugie: zastąpiłem funkcje biblioteczne inicjujące i włączające sleep moda na własne ustawienie bitów:
Kod: C / C++
Spełnienie obu warunków spowodowało każdorazowe poprawne uśpienie uC.
To tyle w temacie.