0,00 €

V košarici ni izdelkov.

0,00 €

V košarici ni izdelkov.

More
    DomovBaza znanjaBascom kotičekWatchdog timer pri AVR mikrokontrolerjih

    Watchdog timer pri AVR mikrokontrolerjih

    V zahtevnih programih, ki nadzirajo stanje večjega števila signalov (V/I vrat ali kontrolnih bitov v registrih mikrokontrolerja), se lahko zgodi, da se program zacikla v zanki, v kateri pričakuje kombinacijo stanj, ki se nikoli ne bo zgodila. Zaciklan program izgubi svojo funkcionalnost in naprava, ki jo krmili mikrokontroler, preneha zanesljivo delovati. Osnovni namen Watchdog timerja (WDT) je prepoznavanje takšnih stanj in vzpostavljanje normalne funkcionalnosti mikrokontrolerja.

    WDT je števec, ki šteje cikle glavnega ali večkrat tudi lastnega oscilatorja. Pri prelivu števca (ko števec prešteje do določene vrednosti – op. ur.) WDT generira prekinitev ali reset mikrokontrolerja. Med oscilatorjem in WDT-jem se nahaja binarni delilnik s približno desetimi programabilnimi faktorji deljenja, s katerimi nastavljamo čas, po katerem se bo pojavil reset mikrokontrolerja. Glede na frekvenco oscilatorja in izbrani faktor deljenja znaša reset interval od nekaj milisekund do nekaj sekund. Ko v programu konfiguriramo in zaženemo WDT, moramo WDT znotraj nastavljenega časa ciklično resetirati. V nasprotnem primeru bo WDT sam resetiral mikrokontroler. Program, v katerem uporabljamo WDT, mora biti pazljivo napisan. Dve glavni napaki sta:

    predolg »Wait« ukaz bo povzročil neželen reset mikrokontrolerja (npr. pri nastavljenem WDT času 2 sekundi bo Wait 3 bo povzročil, da bo WDT resetiral mikrokontroler);

    če se je program zavrtel v neskončni zanki, v kateri resetiramo WDT, od njega ne bo koristi.

    Slike ni

    AT90S2313

    Ta predstavnik starejše generacije AVR-jev nudi samo osnovno funkcionalnost WDT-ja (Slika 1).

    Za taktni signal WDT uporablja vgrajeni 1 MHz oscilator s faktorjem deljenja 16k, 32k, 64k, 128k, 256k, 512k, 1024k in 2048k. Faktor deljenja iz Bascoma definiramo s »Config« ukazom:

    Config Watchdog = 2048

    Vpisana vrednost približno ustreza času pred resetom v milisekundah (frekvenca WDT oscilatorja je odvisna od napajalne napetosti in temperature). Konfigurirani WDT še ni pognan; zaženemo ga z ukazom:

    Reset Watchdog
    Start Watchdog

    Slike niReset WDT-ja pred zagonom je nujen pri tej vrsti mikrokontrolerja. Z resetom začne WDT šteti od 0; v nasprotnem bi bil prvi interval krajši od nastavljenih 2 s. Ko je WDT zagnan, ga je potrebno periodično resetirati znotraj nastavljenega časovnega intervala:

    Do
         Reset Watchdog
         ...
         ...                                                   '< 2s
         ...
      Loop

    WDT lahko tudi ustavimo, če ga ne potrebujemo:

    Stop Watchdog

    Slike ni

    ATMEGA8518

    Tudi pri tem mikrokontrolerju notranji oscilator 1 MHz krmili WDT s faktorji deljenja 16k, 32k, 64k, 128k, 256k, 512k, 1024k in 2048k. Vsi ukazi navedeni pri AT90S2313 veljajo tudi pri tem z opombo, da se WDT resetira med resetom mikrokontrolerja in pri zaustavitvi. Zato ga ni potrebno resetirati neposredno pred zagonom. Obstajajo tudi druge izboljšave: s postavitvijo »varovalke« med programiranjem mikrokontrolerja izberemo tri varnostne nivoje:

    1. varnostni nivo 0: WDT je ob vklopu izključen in ga lahko po želji konfiguriramo, vključujemo in izključujemo,
    2. varnostni nivo 1: WDT je ob vklopu izključen in ga lahko po želji vključujemo, vendar moramo za konfiguriranje in izklop upoštevati posebno časovno omejeno proceduro,
    3. varnostni nivo 2: WDT je ob vklopu vključen, ni ga možno izklopiti, vendar moramo za konfiguriranje in izklop upoštevati posebno časovno omejeno proceduro.

    Prejšnji članek
    Naslednji članek