[ korak @ 18.07.2007. 12:31 ] @
Pokusao sam da nadjem nacin da WDT bude 100% pouzdan, ali nisam nasao nacin za to. Da li neko ima neku ideju ?

Pozdrav.
[ _str_ @ 18.07.2007. 15:34 ] @
Kako mislis nije 100% puzdan, na motoroli?
[ korak @ 18.07.2007. 17:57 ] @
Mislim da nije 100% siguran ni kod jednog od popularnih 8-o bitnih MCU-a.

Uvek je moguce da kada program zaluta naidje na kod koji resetuje (nezeljeno) WDT. Moze se govoriti samo o verovatnoci da se desi nezeljeno resetovanje WDT-a.

Kod idalnog MCU-a koji ima duzinu svih naredbi 1 rec, onda se moze desiti samo nekontrolisan skok u neku tablicu, a da se u njoj nadju takvi podaci koji zavrte program u petlji koja resetuje WDT. Ali takav MCU ne postoji, mada su mu blizi svi drugi osim Motorole koja ima naredbe razlicitih duzina. Situaciju malo popravljaju interrupti koji se dese na neispravan kod naredbe, ali i to je slaba pomoc jer je prva kodna stranica skoro puna, a druga je skoro prazna (bolje bi bilo da je uravnotezeno, barem sa ovog aspekta).

Kompajler uvek moze da proveri (ako je tako napravljen) da li ima potencijalno opasnih kombinacija uzastopnih kodova i da izvesti o tome programera. Sta ce tada programer uraditi zavisi od njegove snalazljivosti i mastovitosti.

Kod MC908 se resetuje WDT upisom bilo cega u neku memorijsku lokaciju (toliko prosto da je katastrofa). Da stvar bude jos gora, moduce je resetovanje WDT-a i upisom u tu lokaciju preko indeksnog registra. Tada je kompajler nemocan da napravi pomenutu proveru jer nezna sadrzaj indeksnog registra koji se menja u toku izvrsenja programa.

Kod HC11 je to bilo bolje: za reset WDT-a trebalo je uzastopce upisati na odredjenu lokaciju 0xaa, pa potom 0x55, sto smanjuje verovatnocu od nezeljenog resetovanja WDT-a.

Ima li neko ideju kako da se ovaj mehanizam ucini pouzdanijim?

Pozdrav
[ _str_ @ 18.07.2007. 18:44 ] @
Tesko mozes reci da se to odnosi na vecinu popularnih MCU-a, govorim iz ugla AVR dok za PIC nisam bas siguran.
Konkretno kod Atmelove AVR serije taj sklop je resen na sledeci nacin. WDT ima personalni oscilator koji radi na ~1MHz i registar WDTCR. Upisom odredjenog byte-a aktivira se WDT i vreme od 16mS do 2S u 8 koraka. U asembleru je dovoljno izvrsiti WDR (watchdog reset) komandu i to je to.
Na programeru je da pravilno odredi vreme i wreme za reset.

pozdrav
[ korak @ 18.07.2007. 19:23 ] @
Ma, jasno mi je.

Kod za WDR je 0x95A8, i takva rec se moze naci u tablici, ili kao adresa neke lokacije flash-a kojoj se pristupa. Kada dodje do smetnje i program pocne neregularno da se izvrsava, postoji verovatnoca da 0x95A8 procita kao kod naredbe (iako nije) i da nezeljeno resetuje WDT. Jeste za to mala verovatnoca, manja nego kod MC908, ali za zahtevanu veliku pouzdanost to nije dovoljno. Zamisli uredjaj sa AVR-om koji treba da na elektricnoj lokomotivi radi 10 god bez greske. Nije strasno ako proradi WDT, ali je opasno ako se resetuje kada ne zelimo, jer ostavlja mogucnost da se program zavrti u nekoj beskonacnoj petlji, i eto katastrofe.

Srecna okolnost kod AVR-a je da samo takva rec resetuje WDT, i uvek je moguce proveriti da li postoji neka druga takva. Ako mora da postoji u tablici, onda sve vrednosti tablice mogu biti, na primer komplementirane (pa kad se procitaju mogu da se komplementiranjem dovedu na pravu vrednost). Ako se takva vrednost nadje kao adresni parametar, onda je jedna nop naredba dovoljna da pomeri ceo kod i da zeljena adresa bude uvecana za 1. Dakle ima resenja, mada sam po sebi WDT nije 100% pouzdan.

Za MC908 moracu vise da se pomucim da bih postigao 100% pouzdanosti zastite WDT-om.

Pozdrav.

PS: bilo koji vremenski interrupt moze da posluzi kao WDT, na primer real time interrupt. U toj interrupt proceduri proveris da li je neki niz bajtova u RAM-u ono sto treba, i obrises taj niz. Ako je niz bio dobar, onda nista, ali ako nije dobar onda izazoves reset MCU-a. Resetovanje ovakvog WDT-a je postavljanje ispravnih vrednosti niza bajtova. Ovo cinis u periodama kracim od periode real time interrupt-a. Ali i ovde postoji problem: haoticno izvrsavanje programa nesme da iskljuci ovaj interrupt. Idemo dalje, sta ces.
[ Odin D. @ 18.07.2007. 21:38 ] @
Ne postoji 100% sigurnost WDT-a, niti bilo cega drugog na svijetu. Mozes samo da povecavas tu vjerovatnocu do zadovoljavajuceg nivoa. Postoje razni nacini za to, mozes malo da proucis oblast koja se naziva "Sigurnost i Pouzdanost Sistema" ako zelis nesto vise o tome da saznas. Kod iole ozbiljnijih sistema WDT ili Time-Out logika je realizovana izvan mikrokontrolera, kao zaseban dio sistema (mislim, iako vec postoji ugradjena u uC, niko se ne oslanja na njih kada se radi o sistemima kod kojih se zahtjeva visoka pouzdanost).
[ mradomir @ 18.07.2007. 23:14 ] @
Verovatnoća da se desi ista kombinacija bajtova je 1/65536,
pa još da PC upadne baš na to mesto i to u petlji... veoma mala.
Pre će WDT potpuno otkazati.
Ako postoji i mala sumnja u pouzdanost WDT-a, mislim da nije
na softveru da to reši.

Sada prave i mikrokontrolere koji služe samo u te svrhe,
na primer http://www.atmel.com/dyn/resources/prod_documents/doc4708.pdf

samo postavlja se pitanje, ko će njega kontrolisati :-)
[ korak @ 19.07.2007. 11:56 ] @
Da, sa svima vama se slazem. WDT je neupotrebljiv za apsolutno pouzdane sisteme. Naravno da pre svega treba konstruisati uredjaj da bude imun na elektromagnetne smetnje, ali standard (EMC) predvidja snagu smetnji koje deluje na vas uredjaj prilikom testiranja. Medjutim, u praksi se mogu desiti, povremeno, smetnje vece snage, i tada vam nista ne vredi EMC sertifikat koji imate. Koliko god je mala verovatnoca da zakaza WDT, to ne znaci mnogo ako MCU sa taktom na basu od 50ns napravi za 10 god. 8.9*10^14 ciklusa.

Za pravo resenje, izgleda treba da se vratimo u vreme pre pojave mikrokontrolera. Tada su koriscenji mikroprocesori i problem apsolutno pouzdanog rada se resavao tako sto je jedan prost a pouzdan oscilator resetovao stalno mikroprocesor. Ista tehnika se moze primeniti na MCU, imajuci u vidu da mnogi od njih imaju detekciju uzroka reseta. Ako je reset nastao od napajanja, onda se inicijalizuju varijable, a ako je nastao od signala na pinu za reset, onda se ne inicijalizuju varijable. Treba samo voditi racuna da MCU zavrsi jedan ciklus obrade pre nego sto dodje do novog reseta. MCU kada zavrsi ciklus udje u praznu petlju iz koje ga izbacuje sledeci reset.

Ne vidim bolje i jednostavnije resenje.

Pozdrav.

[ Odin D. @ 20.07.2007. 20:18 ] @
Malo si se presaltao sa pouzdanosti sistema na reset mikrokontrolera. To nikako nisu iste stvari, a pogotovo se ne moze govoriti o "najboljem i najjednostavnijem" rjesenju uopsteno. Kod nekih sistema taj pristup moze biti zgodan, a kod nekih apsolutno neprihvatljiv. Kod F-16 npr. postoje tri paralelna sistema upravljanja sa sve trostrukim zicama itd. Ako jedan zakaze, istog momenta sistem preuzima drugi, pa onda treci itd. u tom smislu. Ne bi bilo bas zgodno da ti se svaki cas resetuje avion dok ti npr. nisanis gdje ces da ispalis nuklearni projektil. Sa druge strane ako pravis sistem za podizanje garaznih vrata onda i to tvoje optimalno rjesenje zaista moze da bude blizu tom opisu.
Vec sam vise puta napominjao na ovom forumu da u embedded sistemima nema mnogo smisla govoriti o nekim rjesenjima ako se prica barem malo ne suzi na neku konkretnu oblast primjene.
[ korak @ 21.07.2007. 13:41 ] @
Odine D

Isorija racunarskih sistema za upravljanje ne pocinje sa MCU-ovima. Pravljeni su i sa mikroprocesorima koji su imali samo reset i spoljni interrupt i nista vise. Postojali su cipovi za ekspanziju spoljneg interrupta (skupe 8 linija, i kada se bilo koja promeni generisu interrupt, a mikroprocesor procita statusni bajt tog kola i vidi koji je to interrupt). Dakle jedino ostaje reset. Ako reset koristis da bi povecao pouzdanost sistema, onda pises softver na poseban nacin. Svaki softver za kontrolu procesa (i nisanjenja kof F-16) ima glavni petlju za koju se moze odrediti maksimalno vreme izvrsenja. Petlja, ustvari nije petlja, ona se zavrsava jednom praznom petljom u kojoj se ceka reset. Spoljne kolo resetuje periodicno sa nesto duzom periodom od najduzeg trajanja glavne petlje, recimo na 20 ms. Kada dodje do reseta, mikroprocesor ispita da li je to reset od napajanja (spoljasnje kolo za reset) ili od generatora reseta. Ako je od generatora reseta, program posle reseta skace na pocetak glavne petlje i prakticno program radi kontinualno kao i svaki drugi, samo mu je perioda petlje fiksna (sto je dobro u mnogim slucajevima). Dakle, nista nisam pobrkao jer sam to vec radio dok sam bio direktor razvoja u jednoj fabrici namenske proizvodnje koja je radila i za VTI Zarkovo (Vazduhoplovni institut JNA).

Pozdrav.
[ Odin D. @ 24.07.2007. 21:18 ] @
Dragi Korak,

malo se ti vise foliras nego sto imas kredita, (jer si ga vec odranije poceo nepromisljeno spiskavati) ali posto sam danas dobro raspolozen dacu ti samo zuti karton, ali ako nastavis sa ovakvom igrom zaradices brzo i crveni.

Takodje pozdrav.
[ mradomir @ 25.07.2007. 18:56 ] @
Samo moderator može dati crveni karton.
Slažem se da neko treba da ga dobije,
ali to nije korak.

Izvinjavam se na Offtopic-u.

Molim moderatora da obriše ovu i prethodnu poruku.

[ Odin D. @ 26.07.2007. 20:48 ] @
Molim moderatora da se ovaj predlog o brisanju poruke ne uvazi. Posoje dobri razlozi za to, ali iz dzentlmenskih razloga odgovoricu mradomiru na pp.
[ StillHere @ 26.07.2007. 22:04 ] @
Zasto se uopce gubiti u programiranju i mogucnostima hoce li WDT MCU-a izvuci mrtvaca iz groba. Evo jedan prijedlog dobrog WDT-A koji ja koristim, external WDT MAX1232... Unatoc internom WDT-u imam i eksterni WDT kojeg spajam na port mikrokontolera i na reset. To bi u c-u izgledalo ovako:


#define WDT P1_7^P1_7 \\* P1_7 je 6 bit na portu 1 na kojem generiramo eksterni WDT

static unsigned int malo_morgen;
//*****************************************
void ucini_nesto (void){
WDT;
malo_morgen=0;
}
//*****************************************

main(){
T0_inic();
bla_bla_bla();
jos_malo_bla_bla_bla();
WDT; \\ tu i tamo lupimo eksterni WDT

while(1){
if(malo_morgen>1254) ucini_nesto();
malo_morgen++:
\\*******************
WDT; \\* NE ZABORAVI NA EKSTERNI WDT
\\**********************
}
}

Svakih kad nam pukne ili ako vec hocemo ici u nekakvo preciziranje mozemo i racunati kada moramo opaliti eksterni WDT.. U slucaju da eksterni WDT ostane bez promjene stanja porta on ce resetirati MCU bez obzira na interni WDT.... Pogledaj DATASHEET MAX1232

Sto se tice sigurnosti WDT-A... meni ovo jos nije zakazalo, a prava primjena je bila kada sam s atmelom pokretao snazne trofazne motore kraj jakog frenkvecijskog odasiljaca. Bez eksternog WDT-a nista ne bi radilo jer u takvim uvjetima MCU se blokira svakih skoro.

WDT je 100 % siguran jer se u toj situaciji moze otici tako daleko da MCU salje kombinaciju bitova koju prikuplja kroz sve svoje rutine prema eksternom WDT-U.. no ako nestane struje :)
[ korak @ 01.08.2007. 11:21 ] @
Juce sam se vratio sa odmora, i vidim da ste malo skrenuli sa teme, te sam dobio zuti karton. Kada se daje zuti karton (tamo gde se stvarno daje) postoji sudija i svi vide zasto je dat. Sve sto sam napisao je apsolutno tacno i dokazivo (ako bas moram).

Inace, eksterni WDT (MAX1232) se resetuje nekom naredbom koja postavlja I/O pin na potrebnu vrednost, sto je jednako nepouzdano kao i interni WDT. Pouzdanost se moze povecati samo u hardveru WDT-a. Na primer, kada bi MAX1232 zahtevao na ulazu kratku sekvencu koja bi bila ovakva: Pad na log 0 koja traje 1us do 1.5us, skok na log 1 sa trajanjem 2us do 2.5us i ponovo pad na log 0 u trajanju od 1us do 1.5us pa skok na log 1. Na ovo bi se potrosilo najvise 5.5us, ali bi resetovanje WDTa- bilo mnogo pouzdanije. Naravno, ovo usloznjava hardver WDT-a.

U praksi, ni meni se nije desilo da WDT ne uspe da oporavi MCU. Zadnjih godina obavezno ugradjujem brojac aktiviranja WDT-a, i pratim tu pojavu na vecem brpju instaliranih uredjaja. Ako je od neke koristi da iznesem zapazanje da je aktiviranje WDT-a primetno redje kod MCU-a koji rade sa napajanjem u sirem opsegu (1.8V do 3.6V a napaja se sa 3.3V ili 2.7V do 5.5V a napaja se sa 5V) sto je logicno.

Medjutim, pitao sam se kolika je teoretska pouzdanost WDT-a, sobzirom da sam u fazi projektovanja jednog uredjaja za zeleznicu, koji kada se ugradi svi na njega zaborave, dok ne otkaze. Uredjaj se nalazi u lokomotivi i to me je nagnalo da razmisljam o teoretskoj pouzdanosti WDT-a, jer je ona granicna za pouzdanost rada uredjaja.

Pozdrav.

PS Odine D. ako ces poslati pp mradomiru, a ona se tice mene, onda je korektno da je posaljes i meni.
[ Odin D. @ 02.08.2007. 22:13 ] @
Korak,
sto je za tebe to je za tebe, sto je za mradomira to je za njega. Ja sam njemu objasnio zasto sam napisao to sto sam napisao. Nema tu nista za tebe. Ako budem imao nesto i za tebe poslacu ti.

Pozdrav.
[ korak @ 03.08.2007. 11:01 ] @
OK Odine. tvoje je pravo kome ces slati pp.

Kazes, nije za mene, uredu, ali ne kazes da li je o meni?

Pozdrav svima koji nista ne kriju.
[ _str_ @ 03.08.2007. 23:14 ] @
hm, sad bi još malo trebao da odradi WDT, pod uslovom da radi !
[ mradomir @ 04.08.2007. 01:51 ] @
Reset :-)

Tema je lično meni veoma zanimljiva,
sad da li je o pouzdanosti sistema ili
o resetu, nije mnogo bitno.
Dobro je da se rasprava vodi o stručnim
stvarima, ali kada pređe u ti ovo ja ono...
nevodi ničemu. A lepo je gore boldirano
kada se kuca poruka, do sada nisam ni
obraćao pažnju. Bilo bi dobro da svi pročitaju.

Inače (sad se malo foliram) radio sam i ja
neke uređaje za lokomotive, nešto slično
semaforu. A pouzdanost takva da kada
je majstor (pera vozač) video da mi to
stavljamo samo iskomentarisao: koji k...
su ovo smislili, jel? de se to gasi.
Toliko o pouzdanosti sitema.
Svi se sećamo one nesreće u C.G.
pre par godina kada je voz izleteo
iz šina jer nije imao kočnice.
Naravno da je bilo ne znam koliko
nezavisnih sistema, ali šta vredi
kada su svi crkli, odnosno crkavali
jedan po jedan, a niko ih nije popravljao
dok nije otkazao i zadnji.

Zanimljivo mi je kod ovog MAX-a 1232,
koliko on u stvari povećava pouzdanost?
Oko 50% jel? Ali nije potpuno pouzdan.
Šta ako rikne. Bilo bi dobro da MCU
može da kontroliše ispravnost WDT-a.
Sigurnije rešenje bi bilo dva MCU-a koji se
međusobno proveravaju, a oba imaju
mogućnost da zaustave sistem.
Naravno postavlja se pitanje šta raditi
kada se detektuje greška, nekada nije
najbolje rešenje sve gasiti (primer sa avionom).
Ima ovde dosta svari za proučavanje, a mrzi
me da o tome čitam u knjigama, pa ako
neko ima nešto pametno ... shoot.


PS

Pao mi je na pamet jedan slučaj kada je jedan kolega
popravljao neku mašinu iz Hong Konga. Stigla polovna
a tamošnji majstori su kako šta crkne prevezivali, pa
na kraju valjda nisu imali više šta pa prodali nama.
Dakle - bio je jedan taster Emergency Stop jel,
svi znamo šta znači. I radio je, jedino što je svaki
put izbijao osigurače, ali šta ćeš digneš ih i teraj.
E pa kolega uhvati jedan dan da vidi šta se to dešava
sa Emergency Stop-om, isprati žice i vidi da su
direkt vezane na fazu i nulu. E to je sto posto
pouzdanost sistema, rokneš taster i pogasiš
sve mašine u pogonu, plus rešo za kafu.
Što je sigurno, sigurno je.
[ korak @ 04.08.2007. 12:59 ] @
mradomir-e u pravu si, ne volim da odstupam od teme i da prelazim na rekla kazala.

Dakle, ja sam postavio dilemu: hardverski sve je ispravno, a uredjaj je u ambijentu sa znatnim elektromagnetnim smetnjama, i povremeno zbog njih zaluta. Kolika je verovatnoca (P) da u tom lutanju dodje do nezeljenog resetovanja WDT-a, sto prakticno WDT cini nekorisnim.

Ako se WDT resetuje jednom naredbim onda je P vece nego ako je za isto potrebno napisati 2 naredbe. Tako se kod HC11 WDT resetuje upisom u odredjenu lokaciju vrednost 0xAA, a zatim 0x55 (ili obrnuto). Vidim da postoji nesto slicno u kod nekih tipova jedne druge familije mikrokontrolera, ali ne secam se koje. Kod HC08 situacija je katastrofalna, tamo se WDT resetuje jednom naredbom upisom bilo cega u odredjenu memorijsku lokaciju. Da stvar bude jos gora, za ovaj upis nije vazno koji je adresni mod primenjen (a ima ih 8), pa se WDT moze resetovati i upisom u indirektno adresiranu lokaciju, a vrednost indeksnog registra nije poznata u vreme kompajliranja. Kada PIC koristi WDR (mislim da se tako zove naredba za reset WDT-a), onda se posle kompajliranja moze proveriti kod i videti gde se WDR kod pojavljuje a da nije navedena ta naredba. To moze biti u tablicama ili u parametru uz neku naredbu. Onda programer ima nekih mogucnosti da stvar popravi. Taj princip popravke nije moguc kod HC08 zbog mogucnosti resetovanja WDT-a koriscenjem indirektnog adresiranja. Izvinjavam se sto ovaj deo teksta ponavljam, ali to cinim da bi se vratili temi.

Spoljne WDT kolo se takodje resetuje jednom naredbom (MAX1232), pa je situacija ista, samo sto je jedan kod zamenjen drugim. Problemi ostaju isti. Resenje je da se resetovanje WDT-a ucini slozenijim, pa ce onda P da se priblizava nuli. Zamisli da se WDT resetuje upisom tacno odredjenih 8 bajtova u odredjene lokacije. Verovatnoca da se takva sekvenca koda nadje u tablici, ili bilo gde u kodu je zanemarljiva (ali i kada je verovatnoca da se nesto deci =0 to ne znaci da se nece desiti).

Ostaje kao najpouzdanije resenje periodicno resetovanje MCU-a, ali to zahteva dve stvari: 1. razlikovanje reseta od napajanja i resetovanja o kojem govorim, i 2. program mora biti pisan na poseban nacin koji uzima u obzir cinjenicu da se MCU periodicno resetuje. Na prvi pogled, cini se da je pisanje takvog softvera tesko, ali nije, jer svaki program koji upravlja nekim procesom ima glavni petlju koju automatski ponavlja. Umesto toga, glavna petlja bi se ponavljala zamo na reset (ako nije od napajanja). Problem se javlja kod interrupt procedura koje mogu biti prekinute u nekontrolisanom trenutku, to znaci da najvecu paznju treba posvetiti interrupt mehanizmima. Interrupt proceduru treba napraviti tako da se ne pravi steta ako dodje do reseta, kako to uraditi, zavisi od konkretnog slucaja.

Ja bih bio zadovoljan da se resetovanje WDT-a ucini slozenijim i mislim da bi to bilo najbolje prakticno resenje. Kako sadasnji MCU-ovi to nemaju, to je moguce samo sa spoljnim kolom WDT-a, eto ideje: napraviti spoljne kolo WDT-a koje se na malo komplikovaniji nacin resetuje.

Sada mi je pala na pamet jedna:

Uzeti MAX1232, iz nekog I/O pina gurati bitove u jedan sift registar sa paralelnim izlazom (4 ili 8 bita), sa par gejtova detektovati unapred odredjenu kombinaciju bitova na izlazu sift registra i sa time resetovati MAX1232. Ovo prilicno usloznjava resetovanje WDT-a, a upotrebljeni sift registar i gejtovi su nista manje pouzdane komponente od MCU-a ili MAX1232, sto nece umanjiti pouzdanost rada celog uredjaja.

Mozda ce neko imati bolju ideju, bas bi bilo interesantno da ih razmenimo.

Pozdrav.
[ _str_ @ 04.08.2007. 22:30 ] @
Citat:
korak:
Dakle, ja sam postavio dilemu: hardverski sve je ispravno, a uredjaj je u ambijentu sa znatnim elektromagnetnim smetnjama, i povremeno zbog njih zaluta. Kolika je verovatnoca (P) da u tom lutanju dodje do nezeljenog resetovanja WDT-a, sto prakticno WDT cini nekorisnim.



???

Ne može biti hardverski sve ispravno ako spoljni uticaji remete normalan rad kontrolera? Ako kontroler "zaluta", sasvim logično bi bilo da dobije WDR.

[ Odin D. @ 05.08.2007. 11:49 ] @
Ne vredi _str_ ,

sa nekim ljudima se nemozes objasnjavati.
Ovdje neki iznova i iznova pronalaze toplu vodu, i to na pogresan nacin, umjesto da bar jednom odu na google i otkucaju "WDT" ili npr. "topla voda" i da pokazu bar malo postovanja prema dostignucima ostatka svijeta i ostalim korisnicima ovog foruma.
[ korak @ 05.08.2007. 12:14 ] @
_str_,
procitaj malo o uticaju elektromagnetnog zracenja na elektronske uredjaje, kako indukuju smetnje na spojnim vodocima kako van MCU-a, tako i u njemu, kako uticu na oscilator sa kvarcom, koliko njihov uticaj zavisi od konstrukcije PCB-a i t. d. Ako malo razmisljas, uredjaj moze biti hardverski ispravan a da povremeno ne radi kako zelis bas zbog smetnji. Da li ti je televizor hardverski neispravan kada u jednoj sekundi naidje smetnja i ti za trenutak imas sneg na ekranu, siguran sam da tada ne pomislis da ti je televizor u kvaru. Samo to nije opasno za TV, ali je sasvim druga situacija sa mikrkontrolerskim uredjajima. Postoje preporuke kako se boriti sa spoljnim elektromagnetnim smetnjama, pa su napisani istandardi koji definisu koje uslove uredjaj mora da zadovolji (ispravan rad pod emisijom el. mag. talasa odradjene snage i frekvencije) da bi se dobio odgovarajuci sertifikat. Laboratorije za dobijenje takvog sertifikata postoje u Sloveniji i Grckoj, i ne znam gde jos na Balkanu. Ali i uredjaj sa sertifikatom moze da dozivi neku jacu smetnju koja ce naterati MCU da zaluta, i tada ga vraca WDT. Ali dok ne proradi WDT, program luta i moze u nekoj tablici podataka da naidje na kod koji resetuje WDT, sto produzava lutanje MCU-a. Ako se desi da na taj kod, u lutanju, MCU dolazi periodicno, onda WDT nece odraditi svoj posao. Nadam se da razumes sta me muci.

Kada kazes: ako je uredjaj hardverski ispravan, onda do toga ne bi trebalo da dodje. U sirem smislu si u pravu jer je ukupna konstrukcija (PCB, oklapanje, filtriranje napajanja, umasenje i t. d.) odgovorna za to koji ce nivo smetnji da poremeti rad uredjaja. Vrujem da shvatas o cemu pricam, za razliku od onih koji to nisu u stanju jer im je mozak rasplinut po internetu pa ga imaju malo za sopstvenu upotrebu.

Pozdrav.



[ mradomir @ 05.08.2007. 17:53 ] @
Da pojasnim malo oko "hardverske ispravnosti".
Uzmite recimo na primer neku novu tehnologiju,
mobilni telefon. Da li neko može da kaže da mu
se telefon nikad nije "zabunio". Ili računar.
Ja recimo napravim uređaj, odem da montiram,
a ono na pola metra dalje 20kW motor, sve sa mikro
verterom, još ga majstor đura premotavao i sve
na istom napajanju.
Mogao bih još da nabrajam.
Verujem da sve to radi savršeno kada se projektuje,
ali zbog procesa proizvodnje ili uslova eksploatacije
desi se da se uređaj "malo zabuni".
Hoću da kažem da ma koliko stručni projektanti bili
ne mogu da predvide sve gluposti koje se u praksi javljaju.

Ako je potrebna malo veća pouzdanost, interni WDT otpada.
Ako se procesor zabuni zbog neke smetnje, pa za pretpostaviti
je da može da se zabuni i WDT koji je u istom čipu.

Da odgovorim korak-u: takva opcija u kompajleru bi bila super
(provera koda da li postoji petlja koja resetuje WDT) ali u praksi
bi to jedino pomoglo recimo ako pravim kašnjenje gašenja svetla
u autu, pa i ako svetli par sekundi duže, nema veze. Gde god
postoji opasnost od neke štete, softversko rešenje ne dolazi
u obzir.

Sada šta mene zanima, ako se MCU zabuni, pa što ne bi i
eksterni watch dog?
Da li su oni otporniji na smetnje?
Dalje, ako se MCU resetuje pa nastavi da radi OK, ali šta
ako crkne, tu bi nam trebao paralelan sistem.
Da li je neko radio tako nešto i kako je izveo ulazno izlazni
interfejs?
Čitao sam drugu temu gde čovek traži elektro šemu aviona.
Tu sigurno postoje paralelni sistemi, da li neko zna kako su
to izveli. Čisto idejno.

Znam da je ovo malo skretanje teme, ali ako pričamo o WDT-u,
tu je reset, EM smetnje i gomila drugih stvari vezana za tu tematiku.





[ korak @ 06.08.2007. 13:14 ] @
mradomir-e,
potpuno se slazem sa tobom. Ali, ne razmatram slucaj kvara hardvera, vec pouzdanosti izvrsavanja softvera. Zasto, zato jer je uvek moguce predvideti mnoge uzroke koje mogu izazvati kvar uredjaja. Napravi se dobro napajanje, razne zastite u njemu, galvansko odvajanje ulaznio/izlaznih signala i t. d. Naravno ne moze se uradjej zastititi od udara groma ili nasilnog postupanja sa njim. Dakle, ne razmatram kvar uredjaja, vec pouzdanost ispravnog izvrsavanja softvera, cak dozvoljavam da smetnja poremeti isparavno izvrsenje programa, i tada me zanima koliko ce pouzdano pomoci WDT. Ako WDT odradi svoju funkciju, i to smatram ispravnim izvrsenjem programa. Znaci razmatram samo situacije u kojima WDT nije u mogucnosti da pomogne. Ni jedan proizvodjac MCU-a nije dao to razmatranje (barem ja nisam video) osim sto je Motorola dala neku brosuru sa uputstvima kako projektovati PCB da bi se povecala imunost na EM smetnje uz dosta matemeatike, i nesto malo softverskih uputstava gde sugerisu koje kodove upisati u prazan deo flash-a. Preporucuju nop instrukcije, jer je ona 1 bajt duzine a na kraju skok na pocetak programa. Druga preporuka im je swi (softverski interrupt) koji moze odmah da vrati program na pocetak izvrsavanja. To je OK ako u lutanju program ode u prazan deo flash-a, ali to ne mora da se desi.

Spoljni WDT je obicno jedan oscilator koji moze da se resetuje, i ako se resetuje na vreme on nikada ne generise impuls na izlazu. Njega smetnja ne moze da izbaci iz funkcije (da prestane da radi i slicno) vec moze da poremeti samo jedan njegov ciklus. Zamisli obican cip 555, koji resetujes tako sto impulsom iz MCU-a preko tranzistora stalno praznis njegov kondenzator. Njemu smetnja ne moze nista, osim da za trnutak ne generise nesto nezeljeno, ali ce odmah posle toga nastaviti sa normalnim radom. Ostaje problem kako da ga resetujes. To nesme biti uradjeno jednom naredbom, jer se onda problem svodi na onaj sa internim WDT-om. Izneo sam ideju da se to uradi preko sift registra, za sta je potreban niz naredbi koje na nezeljenom mestu (tablici) ne mogu da se nadju, bar je verovatnoca za to zanemarljiva. Naravno, za realizaciju ove ideje potrebna su 2 I/O pina, jedan da klokuje sift registar, a drugi da ubacuje bitove u njega.

Dakle, slazemo se da vecu pouzdanost daje spoljasnje kolo WDT-a, a mislim da se slazemo da on nesme da bude resetovano samo jednom naredbom (onda nismo nista uradili) i treba da nadjemo samo najjednostavnije i najjeftinije resenje za to.

Moj predlog zahteva NE555, NPN tranzistor male snage (ili MAX1232 umest oba) sift registar (na primer 74HC164) i 8-o bitni komparator 74HC688 ciji izlaz resetuje WDT.

Dobrodosla bi bila ideja koja ce i ovo minimizirati.

Pozdrav.
[ _str_ @ 03.09.2007. 23:42 ] @
Ako se od sistema zahteva velika pouzdanost onda ne treba ici na "jeftinija" resenja. Evo kako ja vidim neko sigurnije resenje.
Pored master MCU (A) postiji jedan (b) i rugi (c) dodatni MCU, pozeljno da budu razlicitih proizvodjaca. Prilikom ukljucenja na napajanje svaki od njih postavlja kontrolni byte ili word ili vise, na nulu. Kontroleri su tako usaglaseni da posle svake uspesne provere, po nekom algoritmu promene stanje k. reg. na neku vrednost, najprostije +1. Ukoliko se pojavi situacija A=b & b=c then OK, ili A=b & b<>c prijavi gresku na c, i na kraju A<>b & b=c onda treba resetovati A mcu.
I pored ovoga za 100% sigurnost postoji dosta prostora za greske (Bozja Volja :). NASA je poslala sondu da istrazi neku planetu ( Jupiter-Saturn) i kada je dosla na odrediste, zakazalo otvaranje glavne antene.!? A sve mislim da je nisu njakali (testirali) dok je sve bilo na zemlji.