www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Watchdog in ATmega2560

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
arksi
Član
Član



Pridružen-a: Sre 03 Sep 2008 10:19
Prispevkov: 748
Aktiv.: 3.66
Kraj: Dolenjska

PrispevekObjavljeno: Tor Jan 22, 2013 10:17 pm    Naslov sporočila:  Watchdog in ATmega2560 Odgovori s citatom

Z watchdog-om se srečujem prvič, zato bi potreboval malce pomoči oz., bolje rečeno, kar malo več pomoči Wink . 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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
lordkreps
Član
Član



Pridružen-a: Sre 17 Okt 2007 9:49
Prispevkov: 103
Aktiv.: 0.48
Kraj: Levi žep

PrispevekObjavljeno: Tor Jan 22, 2013 11:11 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
David2204
Član
Član



Pridružen-a: Pon 03 Nov 2008 0:01
Prispevkov: 997
Aktiv.: 4.93
Kraj: Ljubljana - Nova Gorica

PrispevekObjavljeno: Tor Jan 22, 2013 11:14 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
arksi
Član
Član



Pridružen-a: Sre 03 Sep 2008 10:19
Prispevkov: 748
Aktiv.: 3.66
Kraj: Dolenjska

PrispevekObjavljeno: Sre Jan 23, 2013 1:55 pm    Naslov sporočila:  Re: Watchdog in ATmega2560 Odgovori s citatom

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 Wink . 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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
arksi
Član
Član



Pridružen-a: Sre 03 Sep 2008 10:19
Prispevkov: 748
Aktiv.: 3.66
Kraj: Dolenjska

PrispevekObjavljeno: Pet Jan 25, 2013 8:03 am    Naslov sporočila:   Odgovori s citatom

Hmmm, očitno se v zimskem času nihče ne ukvarja s "cucki" Wink . 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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Gklemen
Član
Član



Pridružen-a: Sob 29 Nov 2008 0:06
Prispevkov: 112
Aktiv.: 0.56
Kraj: Rogatec

PrispevekObjavljeno: Pet Jan 25, 2013 9:58 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.41

PrispevekObjavljeno: Pet Jan 25, 2013 10:25 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
arksi
Član
Član



Pridružen-a: Sre 03 Sep 2008 10:19
Prispevkov: 748
Aktiv.: 3.66
Kraj: Dolenjska

PrispevekObjavljeno: Tor Jan 29, 2013 8:34 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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