29. februarja, 2012

Watchdog timer pri AVR mikrokontrolerjih

Revija 195 195 41 - Watchdog timer pri AVR mikrokontrolerjih

Revija 195 195 41a - 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.

Revija 195 195 41b - Watchdog timer pri AVR mikrokontrolerjih

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.

AT90S2313

Revija 195 195 41e - Watchdog timer pri AVR mikrokontrolerjih

Ta predstavnik starejše generacije AVR-jev nudi samo osnovno funkcionalnost WDT-ja. 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

Revija 195 195 41c - Watchdog timer pri AVR mikrokontrolerjih

Revija 195 195 41d - Watchdog timer pri AVR mikrokontrolerjih

Reset 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

Ogled celotnega članka je možna le z nakupom letnika v PDF obliki.

Nakup literature Programirajmo z Bascom AVR

Avtor: mag. Vladimir Mitrović
2012_SE195_41

Tags: