Jump to content
ELFORUM - Forumul electronistilor
Cilibiu

Watch dog nu lucreaza corect

Recommended Posts

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.

 

Edited by Liviu M
Link to post
Share on other sites

Posted (edited)

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!

Edited by Cilibiu
Link to post
Share on other sites

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 to post
Share on other sites

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 to post
Share on other sites

Îț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.

Edited by mflorian24
Link to post
Share on other sites

Din documentatie am vazut ca pot programa tot in arduino ide, probabil ca sunt alte librari pentru NodeMCU. La nodeMCU folosesc alimentare de 5V nu de 3.3V.

Va fi alimentat dintr-o mini sursa din 240-5V 700mA compacta.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines