logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega8 - Mikrokontroler nie chce wyjść z uśpienia

XavarisOSW 24 Sie 2014 18:41 951 4
REKLAMA
  • #1 13904049
    XavarisOSW
    Poziom 2  
    Witam
    pisałem program który miał po pewnym czasie zmuszać mikrokontroler do przejścia w stan uśpienia po czym wybudzanie miało następować w reakcji na zewnętrzne przerwanie na linii PD2. Mikrokontroler wchodzi w uśpienie po zadanym czasie jednak nie chce się potem wybudzić w reakcji na zewnętrzne przerwanie. Byłbym wdzięczny gdyby ktoś rzucił okiem na mój kod i powiedział mi w czym tkwi błąd. Próbowałem zlokalizować problem samodzielnie jednak nigdzie nie mogę się go dopatrzeć.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • REKLAMA
  • #3 13904141
    XavarisOSW
    Poziom 2  
    dodałem volatile jednak mikrokontroler nadal nie chce wyjść z uśpienia mimo że wchodzi do przerwania i ustawia wartość zmiennej licznik na 20 przy naciśnięciu przycisku wywołującego przerwanie int0.
  • REKLAMA
  • Pomocny post
    #4 13904346
    robiw
    Poziom 26  
    Nie pamiętam, jak działa makro sleep_mode(); ale przecież przechodzisz do trybu uśpienia w przerwaniu od timera a jak wiadomo wejście w dowolną procedurę obsługi przerwania blokuje globalne zezwolenie na obsługę przerwań, wiec prawdopodobnie w chwili uśpienia skutecznie blokujesz także przerwanie zewnętrzne, przez co nie możesz później wzbudzić procesora z tego stanu. robiw
  • #5 13905131
    XavarisOSW
    Poziom 2  
    Faktycznie, zapomniałem że w czasie trwania jednego przerwania pozostałe są zablokowane. Przeniosłem procedurę uśpienia z przerwania timera do pętli głównej programu i teraz wszystko śmiga. Dzięki za pomoc :)
REKLAMA