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

Jak uśpić ATmega8 na 1 sekundę z kwarcem 8MHz? Wybór trybu uśpienia

dscreator 09 Kwi 2006 10:52 1208 2
REKLAMA
  • #1 2508408
    dscreator
    Poziom 10  
    Posty: 29
    Ocena: 3
    Który tryb uśpienia zastosować żeby uśpić procek na 1 sekundę? Pracuję z kwarcem 8Mhz więc konieczne chyba będzie zastosowanie licznika 16bitowego żeby uśpić procesor na 1sekundę. Czy w jakimś trybie uśpienia działają przerwania od timera1. Czy możliwe jest tylko stosowanie licznika asynchronicznego? Najlepszym rozwiązaniem byłoby użycie watchdoga, jednak w atmega8 nie ma bitu WDIE - czyli nie ma przerwania od watchdoga. Jeśli brak tego przerwania to myślę, że nie można obudzić procesora, ale mogę się mylić.
  • REKLAMA
  • Pomocny post
    #2 2508737
    ZbeeGin
    Poziom 39  
    Posty: 4329
    Pomógł: 605
    Ocena: 463
    W trybie IDLE oraz POWER SAVE można użyć Timera2. W IDLE Timer2 może być taktowany synchronicznie jak i asynchronicznie. Tryb POWER SAVE takiej możliwości nie daje bo clkI/O jest zatrzymany. Zatem w tym trybie licznik może być taktowany wyłącznie asynchronicznie. Dodatkowo występują tu pewne niuanse opisane w datasheet ATMega8L na str. 34-35.

    Możesz użyć Watchdoga do "wybudzania" procesora z letargu, nawet bez użycia jego przerwań - tam gdzie jest dostępne. Musisz pamiętać tylko o tym, że program wystartuje od początku. Można tak skonstruować program, a ściślej jego procedurę początkową, by za pomocą specjalnego wskaźnika-flagi (umieszczonego w pamięci RAM, EEPROM) wykrywać dlaczego procesor został zresetowany.
  • #3 2508777
    dscreator
    Poziom 10  
    Posty: 29
    Ocena: 3
    timer2 jest w stanie obudzić procka ale mam wątpliwości czy może zrobić to timer1. Próbowałem i timer1 nie chce budzić.

    Dodano po 12 [minuty]:

    Hmm chyba najlepszym rozwiązaniem będzie tryb power-save i budzenie przez timer2. Usypianie będzie odbywać się w pętli tak aby uzyskać czas 1s. Jak znacie lepsze rozwiązanie piszcie proszę. Dzięki za pomoc.

    Użycie watchdoga też działa ale bez rozszerzonego watchdoga jest jedna wada tego rozwiązania. Przed wprowadzeniem procka w tryb uśpienia należy zapisać wszystkie ustawienia i dodać fragment odpowiedzialny za powrót programu do właściwego miejsca.

    Jednak chyba najlepszym rozwiązaniem jest Timer2, działa pięknie nawet nie koniecznie w trybie asynchronicznym :).
REKLAMA