Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Attiny13][C] - Wpływ opóźnienia na ponowne uśpienie mikrokontrolera

wladziu22 13 Sty 2013 14:12 726 0
  • #1 13 Sty 2013 14:12
    wladziu22
    Poziom 17  

    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ć.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Jeśli wcisnę przycisk z kodem 0x0C, procesor wybudzi się zdekoduje kod, wejdzie do sekcji
    Kod: cpp
    Zaloguj się, aby zobaczyć kod
    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:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Spełnienie obu warunków spowodowało każdorazowe poprawne uśpienie uC.
    To tyle w temacie.

    0 0