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

ATmega8A - Sleep Mode pobór prądu, gdzie wrzucić sleep_mode(); i dlaczego?

bartibv 12 Lip 2015 18:48 963 5
REKLAMA
  • #1 14842946
    bartibv
    Poziom 15  
    Dodaję do swojego kodu funkcję sleep w trybie ADC Noise Reduction.

    Gdy uśpię uC w funkcji main, pobór prądu jest taki sam jak bez włączenia sleepa. Dopiero gdy uśpię go w pętli głównej, to wtedy prąd spada. Dlaczego? Nie wystarczy jednorazowo uśpić uC i niech sobie robi co chce w przerwaniach? Po co go usypiać przy każdym powtórzeniu kodu? No i dlaczego bez każdorazowego usypiania nie usypia się?:p

    Dopiero zaczynam swoją przygodę z AtmelStudio i programowaniem w C, więc proszę o wyrozumiałość :)

    Kod z sleepem w main:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    i w pętli głównej (jedyna różnica)

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #2 14843056
    excray
    Poziom 41  
    Uśpienie procesora to jest jednorazowa akcja. Po wybudzeniu procesor będzie już pracować normalnie i tak ma być. To że Ty migasz diodą w przerwaniu i tylko w przerwaniu nie znaczy że każdy tak chce. Często po wybudzeniu procesor musi jeszcze zrobić wiele rzeczy poza przerwaniem w pętli głównej dlatego takie rozwiązanie jak jest jest optymalne. A jeśli Ty nie potrzebujesz nic robić w pętli głównej to po prostu umieść tam sleep() i procesor po powrocie do niej natychmiast znowu się uśpi. To jest tylko jeden jednotaktowy rozkaz więc nie ma o co "kruszyć kopii".
  • REKLAMA
  • #3 14843119
    bartibv
    Poziom 15  
    Rozumiem:) nie rozumiem tylko samej idei, tj dlaczego, skoro jednorazowo usypiam uC i nie budzę go w żadnym rozkazie, to on nie chce spać i musze go usypiać w pętli głównej kilka razy?:p czy przerwanie generuje wybudzenie?
  • REKLAMA
  • Pomocny post
    #4 14843142
    EuroGenio
    Poziom 18  
    W manualu od uC masz tabelkę opisującą które przerwania (od czego) wybudzają procesor zależnie od głębokości uśpienia - to Ci powinno wszystko wyjaśnić.
  • REKLAMA
  • Pomocny post
    #5 14843194
    excray
    Poziom 41  
    Tak jak kolega wyżej napisał. Po uśpieniu procesor już nic nie robi i nie wykonuje żadnych rozkazów. Są jednak zdarzenia opisane we wspomnianej tabelce (Table 14) które ten procesor mogą wybudzić. W Twoim przypadku po prostu nastąpiło takie zdarzenie - przerwanie od zegara T2, które nastąpiło ułamek sekundy po tym jak procesor uśpiłeś i go wybudziło dlatego nawet nie zauważyłeś że był uśpiony. Powinieneś się zapoznać z rozdziałem o usypianiu procesora bo zapewne wydaje Ci się że to normalne że procesor reaguje na przerwanie a tak nie jest. Nie każde przerwanie wybudzi procesor. W niektórych trybach pewne peryferia takie jak zegar w ogóle nie będą działać.
  • #6 14843300
    bartibv
    Poziom 15  
    Aaa to o to chodziło!:) dzieki za pomoc, idę doczytać :)
REKLAMA