Sari la conținut
ELFORUM - Forumul electronistilor

Watch dog nu lucreaza corect


Cilibiu

Postări Recomandate

Exact, ledul se stinge la reset. *)

Asta inseamna ca watchdogul functioneaza. Cum ziceam, prea bine, da reset ininte sa treaca cele 500 ms inainte de aprinderea ledului.

Trebuie sa cauti motivul pentru care timeoutul wdt e mai mic decat incerci sa programezi. Asa ca citesti in data-sheetul lui ATMega328, despre watchdog timer (capitolul 10.8, pagina 43) si ajungi la ce am citat eu in postul de mai sus. Cum ca intre "acum modificam perioada" si "nu mai merg sa modificam" ai la dispozitie 4 impulsuri de ceas. Daca din diverse motive n-apuci sa modifici perioada in cele 4 impulsuri de ceas, cum tocmai ai resetat controllerul,  perioada e 16 ms.

Modificarea mea inlocuieste functia definita de tine (sau copiata de pe internet, da' definita local), cu cea corespunzatoare din biblioteca.

In primul rand, cea din biblioteca e scrisa in asamblor, in al doilea rand, nu face operatii (cum e or-ul din functia ta).

 

Probabil nu e de la asta (in data-sheet pe post de exemplu e o functie mai complicata), da' e singura idee pe care o am.

 

*) Da' nu e bine sa te bazezi pe asta, face codul neportabil. La alte microcontrollere poate e alta regula.

 

Editat de Liviu M
Link spre comentariu
  • Răspunsuri 20
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

Ok. O sa fac si modificarea de care zici. O sa il incarc in al trei-lea arduino si il pun la treaba. Sa vedem care si dupa cat timp se blocheaza.

Doar sa mai fac rost de inca un cablu usb.

Mersi pentru elucidarea mistetului. Acum asteptam sa se confirme!

Seara faina tuturor!

 

L.E am pus la test si al trei-lea arduino.

Concurs!

Sa vedem cine castiga!

Editat de Cilibiu
Link spre comentariu
  • 4 săptămâni mai târziu...

Pînă la Watchdog eu m-aș uita la cauzele care blochează controlerul. Acesta se poate bloca atît din hardware cît și din software. Blocarea din hardware poate fi provocată dintr-o mulțime de motive, printre care: 

-alimentarea de proastă calitate (cade tensiunea la impulsuri scurte de intensitate mai mare)

-circuit de masă prea subțire

-impulsuri electrice de la instalațiile de forță propagate fie prin rețeaua de alimentare(aparate de sudură, electromotoare etc prin vecini), fie prin inducție (dacă sursa este aproape)

-pini nefolosiți lăsați flotant. Recomand cu căldură forțarea cu INPUT_PULLUP a tuturor GPIO nefolosiți.

-fire lungi între controler și senzori sau periferice

-nu se folosește decuplarea pe alimentare. Cam orice circuit în comutație trebuie dotat cu un condensator de 100uF + unul de 10nF în paralel cu alimentarea, cît mai aproape de pinii de alimentare.

-etc

-etc

 

Iar dpdv software poți avea:

-bucle care devin infinite în anumite situații (de ex. contor care nu mai îndeplinește condiția de incrementare)

-suprascrieri necontrolate de memorie (în special la lucrul cu stringuri) sau împărțiri cu zero

-generarea de date care umplu memoria

-tipuri de date folosite inadecvat care duc la comportament impredictibil (de exemplu int care poate fi atît pozitiv cît și negativ, dar noi mizăm numai pe valorile pozitive)

-etc

-etc

 

De asemenea, pentru aplicații care necesită siguranță maximă, mai sînt de luat în calcul circuite externe de tip Watchdog:

https://www.digikey.com/en/articles/a-designers-guide-to-watchdog-timers

(aici se vorbește inclusiv de radiația cosmică, cea care poate altera un bit de memorie odată la cîteva luni, în electronica de sub 28nm)

Link spre comentariu

Am vazut montaje cu WDT extern, doar ca nu am mai avut schema si nici o placa ca sa vad seria lui.

Eu am facut testul pe ARDUINO UNO, cod scris in Arduino ide si atat, fara sa setez pini pull_up sau altceva.

Pana acum nu sa blocat nici unul din cele 3 arduino, si folosesc zi de zi 2 aspiratoare diferite, masina spalat ,uscat, cuptor electric....etc.

Ce tinde sa cred este asta :"fire lungi între controler și senzori sau periferice".

Am legat la un arduino un senzor DTH22 care are firul aproape 7-10m, acum lucreaza fara WDT si nu sa blocat deloc arduino de la postarea acestui topic, cand am folosit WDT la acest montaj sa blocat dupa cateva ore.

Am inceput sa inteleg mai bine cum sta treaba cu WDT si cand voi inlocui arduino cu NodeMCU atunci voi pune WDT si il voi testa.

 

Link spre comentariu

Îți dai seama ce antenă ai făcut cu cele 2 fire de 7-10m?

 

Din experiența mea, controlerele la 5V sînt mai puțin sensibile la perturbații externe decît cele la 3,3V. Vezi că la NodeMCU ai impulsuri de 170mA, așa că îți va trebui o sursă de alimentare sănătoasă, cu decuplaje adecvate și cu traseu de masă generos.

 

Și nu cred că vei putea folosi același cod WD pe Arduino și NodeMCU.

Editat de mflorian24
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări