 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
arksi Član

Pridružen-a: Sre 03 Sep 2008 10:19 Prispevkov: 748 Aktiv.: 3.66 Kraj: Dolenjska
|
Objavljeno: Tor Jan 22, 2013 10:17 pm Naslov sporočila: Watchdog in ATmega2560 |
|
|
Z watchdog-om se srečujem prvič, zato bi potreboval malce pomoči oz., bolje rečeno, kar malo več pomoči . Sem bolj začetnik v programiranju, zato prosim ne me preveč "napasti".
Že nekaj časa gledam datasheet od procesorja atmega2560, vendar mi nekako ne "potegne" kako bi konfiguriral watchdog.
Naj obrazložim. Spisal sem en programček za pošiljanje SMS sporočil preko GSM modema. To mi je nekako uspelo in deluje v redu. Ker bo aplikacija z atmego2560 v obratovanju 24 ur/365dni bi rad vklopil watchdog-a, da bi pazil, če se kontroler zacikla ali zablokira program v njem.
V programu so uporabljeni razni delay-i, ki skupaj s programom trajajo 4 sekunde. To pomeni, da se zanka zavrti v max 4-ih sekundah.
Torej: rad bi vklopil watchdog-a in sicer, da bi le-ta hotel resetirati mikroprocesor vsakih 8 sekund. Ko bi program tekel, bi sproti resetiral oz. brisal števec watchdog-a. V primeru zaciklanga programa, bi po preteku 8 sek. watchdog resetiral mikrokontroler. Procesor del z taktom 16MHz
Prilagam povezavo do datasheeta ATmega2560 (stran 63)
http://www.atmel.com/dyn/resources/prod_documents/doc2549.PDF
Zanima me kako naj se tega lotim v programskem jeziku C. Prosim za pomoč oz. nasvet:
1: kako kunfiguirati watchdog-a, oz. ga vklopiti, da bo imel funkcijo reseta procesorja?
2: kako vklopiti prescaler (delilnik), da bo WD trajal 8 sekund?
3: kako WD brisati oz. resetirati v programski zanki?
LP |
|
Nazaj na vrh |
|
 |
lordkreps Član


Pridružen-a: Sre 17 Okt 2007 9:49 Prispevkov: 103 Aktiv.: 0.48 Kraj: Levi žep
|
Objavljeno: Tor Jan 22, 2013 11:11 pm Naslov sporočila: |
|
|
En "quickie" nasvet.
Nastavi watchdog(wd) -> vklopi wd -> skoči v neskončno zanko in wd bo resetiral CPU.
Koda bi bila približno tako (funkcije in spremenljivke naštudiraj in dopolni sam):
Koda: |
include ... //uporabi watchdog
int main()
{
...//Nastavi wd na nekaj ciklov
...//Zaženi wd
while (1) // neskončna zanka
{
asm("wdr") // Reset watchdog
}
} |
|
|
Nazaj na vrh |
|
 |
David2204 Član


Pridružen-a: Pon 03 Nov 2008 0:01 Prispevkov: 997 Aktiv.: 4.93 Kraj: Ljubljana - Nova Gorica
|
Objavljeno: Tor Jan 22, 2013 11:14 pm Naslov sporočila: |
|
|
Na strani 67 imaš opis registra WDTCSR z opisom vseh bitov in možnih nastavitev watchdog timerja.
Števec WDT-ja resetiraš z ukazom "__watchdog_reset();". Dva primera kode za uporabo WDT-ja imaš na straneh 65 in 66. _________________ My favorite programming language is ... solder. -Bob Pease |
|
Nazaj na vrh |
|
 |
arksi Član

Pridružen-a: Sre 03 Sep 2008 10:19 Prispevkov: 748 Aktiv.: 3.66 Kraj: Dolenjska
|
Objavljeno: Sre Jan 23, 2013 1:55 pm Naslov sporočila: Re: Watchdog in ATmega2560 |
|
|
Hvala za odgovor, ampak....
arksi je napisal/a: |
Z watchdog-om se srečujem prvič, zato bi potreboval malce pomoči oz., bolje rečeno, kar malo več pomoči . Sem bolj začetnik v programiranju, zato prosim ne me preveč "napasti".......
LP |
Vendar je treba, ko človek prebere informacije iz njih tudi kaj razumeti. Če bi vsi, ki se učimo programiranja, po prebiranju datasheeta takoj vse razumeli, potem sploh ne bi potrebovali foruma niti ne šole. Vem, da je vse okoli tega in še kaj drugega napisanega v datasheetu, ampak treba je razumeti. Zato je nasvet preberi si to pa to, na tej in na tej strani brez smisla. No, vcasih je za koga tudi taka informacija dovolj.
Kar nekajkrat sem prebral primere kode v C vendar, žal, (še) ne razumem kako to skomponirati v program.
Pozabil sem še napisati, da sem ves program za pošiljanje sporočil preko GSM modema napisal v grafičnem okolju Flowcode. Omenjeni program za watchdog nima za programiranje grafičnega vmesnika, ampak se v posamezne sklope lahko doda koščke kode v C ali ASM. Tako je treba konfiguracijo watchdoga izvesti "ročno" v C ali ASM kodi.
Sem prepričan, da bo bolj podrobna razlaga koristila še marsikomu.Če bi kdo tako lepo razložil in pokomentiral kodo kot na tej strani GregorN (http://www.elektronik.si/phpBB2/viewtopic.php?t=33438&start=30) bi se človek zelo hitro učil.
No, pa pojdimo počasi po korakih.
Spodaj je koda v C iz datasheeta. Nekaj razumem, nekaj ne. Bi prosil za razlago tistega kar ne razumem oz. si narobe razlagam.
Koda: |
void WDT_off(void)//verjetno izklopimo WD?
{
__disable_interrupt(); //izklopimo prekinitve
__watchdog_reset(); //resetiramo watchdog-a
/* Clear WDRF in MCUSR */
MCUSR &= ~(1<<WDRF); //brišemo WDRF in MCUSR register
/* Write logical one to WDCE and WDE (piši logično 1 v register WDCE in WDE)*/
/* Keep old prescaler setting to prevent unintentional time-out*/
WDTCSR |= (1<<WDCE) | (1<<WDE);//Verjetno vpišemo 1 v reg. WDCE in WDE?
/* Turn off WDT*/
WDTCSR = 0x00; //Izklopi watchdog timer???
__enable_interrupt(); //vklopi prekinitve
} |
LP |
|
Nazaj na vrh |
|
 |
arksi Član

Pridružen-a: Sre 03 Sep 2008 10:19 Prispevkov: 748 Aktiv.: 3.66 Kraj: Dolenjska
|
Objavljeno: Pet Jan 25, 2013 8:03 am Naslov sporočila: |
|
|
Hmmm, očitno se v zimskem času nihče ne ukvarja s "cucki" . No, ali pa sem jaz napisal v kakšnem "čudnem" dialektu, da me ni nihče razumel....
Bom poizkusil postaviti vprašanje bolj enostavno, upam, da si kdo, ki zna, vzame nekaj sekud in mi odgovori. Kljub Googlu in datasheetu teh nastavitev okoli watchdog-a (še) ne "skapiram".
Torej:
V ATmegi2560 bi rad vklopil watchdoga, ki bi na 8 sekud resetiral mikrokontroler.
Lepo prosim za kratko razlago, kako naj to storim.?
Hvala že vnaprej. |
|
Nazaj na vrh |
|
 |
Gklemen Član


Pridružen-a: Sob 29 Nov 2008 0:06 Prispevkov: 112 Aktiv.: 0.56 Kraj: Rogatec
|
Objavljeno: Pet Jan 25, 2013 9:58 am Naslov sporočila: |
|
|
Primer za mega128:
void ResetDevice()
{
#asm("cli") //irq's off
#asm("WDR") //wachDog reset
WDTCR = 0x08; //aktiviramo WatchDog
while(1){}; //loop until watchDog reset
}
Nastavimo delovanje (poglej datasheet):
--> WDTCR = 0x08; //aktiviramo WatchDog
Resetiramo:
#asm("WDR") //wachDog reset |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Pet Jan 25, 2013 10:25 am Naslov sporočila: |
|
|
Za začetek probaj razumet samo delovanje watchdoga. Stvar je preprost števec, ki ima lasten oscilator (neodvisen od glavnega, ki poganja program). Ko ta števec doseže neko vrednost, se procesor resetira.
To v praksi pomeni, da je treba ta števec periodično resetirati, da ne doseže vrednosti, ki je potrebna za reset (ta se lahko nastavlja, dolžine period so ponavadi od nekaj ms do nekaj s). Če se program kje zacikla, bo izostalo to resetiranje števca in se bo zaradi tega procesor resetiral - kar je tudi osnovni namen WDT.
Ko boš razumel delovanje, ti tudi ne bo problem tistih par vrstic v program dodat.
Lahko se pa učiš na primerih in boš kao znal uporabljat WDT, vendar ne boš vedel, kaj v bistvu počneš. Tipična taka neumnost je recimo reset WDT v timer interuptu... _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
arksi Član

Pridružen-a: Sre 03 Sep 2008 10:19 Prispevkov: 748 Aktiv.: 3.66 Kraj: Dolenjska
|
Objavljeno: Tor Jan 29, 2013 8:34 am Naslov sporočila: |
|
|
Hvala za odgovore. Saj nekako razumem delovanje watchdoga.
Seveda, moj namen vgradnje watchdoga je ravno v tem, če se zacikla program, da ga watchdog resetira.
Kolikor sem naštudiral za ATmego2560 poganja watchdoga interni oscilator 128kHz. To frekvenco potem lahko delimo z desetimi možnostimi deljenja (2k-16ms......1024k-8s). Vrednost deljenja določimo v registru WDTCSR z vrednostjo štirih bitov WDP0, WDP1, WDP2, WDP3 (tabela12-2).
Če prav razumem Watchdoga vključimo v registru WDTCSR z postavitvijo bita (3) WDE na 1.
Watchdog lahko izvede tri različne operacije in sicer:
-prekinitev....naredi to pa to
-resetira mikrokontroler
-prekinitev in reset mikrokontrolerja
Mi lahko kdo potrdi ali okoli WD to jaz razumem prav??? |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|