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.

AVR MEGA644P - Power DOWN i Watchdog jak pogodzić?

Fredy 24 Sie 2012 23:12 1113 8
  • #1 24 Sie 2012 23:12
    Fredy
    Poziom 27  

    Witam;

    Chciałem uśpić procesor w trybie Power Down. Pobudkę zaplanowałem po chwili na skutek zadziałania Watchdoga. Ponieważ w MEGA644p jest przerwanie od watchdoga, więc postanowiłem z niego skorzystać .Mój tok myślenia jest nastepujacy:

    1) Uśpienie w POwer Down z włączonym wdt
    2) Watchdog się przepełnia, budzi procesor
    3) Procesor budzi się i wskakuje w procedurę przerwania i tam kasuje natychmiast watchdoga
    4) Po wykonaniu procedury przerwania od watchdoga procesor wykonuje następne polecenia programu

    i pytanie?

    Czy procesor pójdzie do dalszej części programu? Czy przepełniony watchdog nie zresetuje procesora? Czy jest tu jakiś błąd logiczny w rozumowaniu?


    pzdr

    0 8
  • #2 24 Sie 2012 23:41
    dondu
    Moderator Mikrokontrolery Projektowanie

    W tym mikrokontrolerze (tak jak piszesz) możesz ustawić Watchdog tak, że nie resetuje mikrokontrolera, tylko zgłasza przerwanie, które budzi mikrokontroler. Tak ustawiony mikrokontroler po wykonaniu przerwania Watchdoga wraca do miejsca, w którym został uśpiony i wykonuje dalej program, czyli np. pętlę główną. Aby ponownie wszedł w Power Down musisz go ponownie uśpić.

    Cytat:
     3 Operating modes
    – Interrupt
    – System Reset
    – Interrupt and System Reset


    Wybierz tryb pierwszy i resetu nie będzie.

    0
  • #3 25 Sie 2012 00:22
    Fredy
    Poziom 27  

    Dzięki, rozumiem że jeśli ustawię procesor tak aby po zadziałaniu watchdoga wchodził tylko w przerwanie, to musze koniecznie w przerwaniu skasować wdr, bo inaczej wejdzie w pętlę nieskończoną.
    Dobrze myślę?

    0
  • #5 25 Sie 2012 10:43
    Fredy
    Poziom 27  

    dondu napisał:

    Co rozumiesz przez: ... wejdzie w pętlę nieskończoną.



    Zadam inaczej pytanie, czy jeśli watchdog się przepełni i zgłosi przerwanie to zacznie liczyć od nowa, czy też licznik pozostanie przepełniony i będzie wymagał natychmiastowego wyzerowania?

    Właśnie próbuje uruchomić taki układzik i coś mi nie gra. Niby wszystko jest ok a układ mi się zwiesza po pobudce.

    0
  • #6 25 Sie 2012 11:30
    mirekk36
    Poziom 42  

    Żaden licznik nie zostanie przepełniony żeby wymagać wyzerowania, to nie tak ;) ... zerowanie Watchdoga robi się tylko po to aby nie dopuścić do jego przepełnienia i uruchomienia resetu lub przerwania, które właśnie się odbywa przy jego przepełnieniu. Więc pewnie pomyliła ci się funkcjonalność tego resetowania watchdoga.

    Dodano po 5 [minuty]:

    Zobacz sobie np jak się robi reset procka za pomocą watchdoga:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    uruchamiasz go np na najkrótszy możliwy czas i właśnie ..... nie resetujesz go .... co spowoduje że jak doliczy do ustawionego czasu to RESET ;) i po ptakach. Tyle tylko że ty możesz dać przerwanie budzące zamiast resetu ....

    a skoro ci się procek zawiesza to pewnie dlatego że po przebudzeniu nigdzie nie resetujesz tego watchdoga np w pętli głównej i wszędzie w programie w ważniejszych miejscach , przez co co chwilę procek wywołuje przerwanie - albo może się nawet resetuje jeśli coś źle ustawiłeś i może dlatego masz efekt jakby ci się coś zawieszało.

    0
  • #7 25 Sie 2012 16:53
    Fredy
    Poziom 27  

    Mirek nie zrozumiałeś mnie.
    Doskonale wiem jak działa watchdog.
    Problem dotyczy tylko sytuacji gdy wdr nie resetuje procka lecz wywołuje przerwanie.

    Pytałem, czy licznik watchdoga dolicza do maxa ,wywołuje przerwanie a potem liczy od zera, czy też licznik pozostaje przepełniony do czasu jego skasowania poprzez wdr ?
    Jeśli watchdog robi reset procka to nie ma się nad tym co zastanawiać, wiadomo wszystko wtedy zaczyna się od zera, ale w przypadku przerwania od watchodoga mam wątpliwości.

    Sprawdziłem , raczej jest tak że licznik się przepełnia i się zeruje, więc po wywołaniu przerwania nie muszę go kasować natychmiast w samym przerwaniu, lecz mam chwilę czasu.

    0
  • Pomocny post
    #8 25 Sie 2012 16:58
    mirekk36
    Poziom 42  

    No ale dlaczego miałby w przypadku przerwania się nie wyzerować? Toż polecenie ustawiające go na jakiś określony czas to tylko miejsce w którym się przepełni i będzie liczył od zera.

    A czasu masz tyle na ile ustawiłeś watchdoga.

    0
  • #9 25 Sie 2012 17:01
    Fredy
    Poziom 27  

    Też mi się tak wydaje.
    Dzięki wszystkim.

    0