Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Esetleg nézd meg a droidscript app-ot a play áruházban
Régebbi napelem forgatómat alakítom át,fotoelemmel működött,az árnyék néha megzavarta.
Most Nanóval időpontra forgatok,ezt viszont külső zaj zavarja néha(úgy tűnik csak az LCD-t),de szeretnék watchdog visszaállítás beletenni,de nem ismerem igazán.Nem tudom while és delay alatt mit csinál,az alábbiakban próbálkoztam,de nem látom,hogy működne,az alább próbálkoztam: #include <WatchDog.h> void setup() { // put your setup code here, to run once: } void loop() { WatchDog::setPeriod(OVF_4000MS); WatchDog::start(); while (x > y)//Lehet több órás ciklus { delay(1000); }//További programok 1 sec alatti delay lehet benne WatchDog::stop(); }
Inkább érdemes lenne néha lekötni a tápról az LCD-t, majd újrainicializálni (persze a korrekt megoldás, ha oda-vissza kommunikáció van az LCD és az AVR között). Ha az adatátvitelt bármilyen megszakítás kicsit hosszabb ideig szakítja meg, az LCD egyszerűen megáll vagy nem ad képet.
Ha watchdogot akarsz használni, ahhoz a fuse bit-et is állítanod kell, valószínűleg alapból ki van kapcsolva. Ha beállítottad (fuse bit-eknél, az AVR írásakor tudod beállítani, esetleg programból is lehetséges engedélyezni? Ebben nem vagyok biztos.) Aztán csak a főprogramban lenullázod a watchdogot, bizonyos időközönként. Ha megakad a programod, akkor a watchdog sem lesz bökdösve (nullázva), és resetel. De ha amit írtál igaz, miszerint csak az LCD fagy le, ott a watchdog nem fog segíteni, mert a programod az AVR-ben fut tovább... A hozzászólás módosítva: Márc 30, 2022
Milyen LCD-ről van szó? Próbálj az adatvezetékekre fel vagy lehúzóellenállásokat kötni, hátha ennyi is elég lesz.
Az LCD aggaszt a legkevésbé csak ezen vettem észre a zavart ,tulajdonképpen a bekalibrálás miatt van benne,vagy ha az órát állítani kell,vagy elemet cserélni.A ledjét le is tudom kapcsolni,akár ki tudom venni belőle,nem kell a vezérléshez.A táblákat 10 percenkét fordítja és minden alkalommal csinál egy resetet,ezt a problémát megoldja,de a program elszállást már nem.Ezért gondoltam a watchdogra,nem szeretném ha ezeket a nagy táblákat össze-vissza forgatná.Gondoltam,ha letöltöm a watchdog könyvtárat ,csak a funkcióit kell használnom a többit elintézi,fuse bitet nem emlegették.
Lehet, hogy megy a könyvtárral is, én régen használtam, és fuse bit-tel állítottam be, ha jól emlékszem (kb. 6 éve...).
Bolond biztos akkor lesz, ha beraksz egy második Arduinot, ami felügyeli az egész rendszert. A hozzászólás módosítva: Márc 30, 2022
Lehet kapni watchdog ic t is külön, ha nincs a bemenetén négyszögjel akkor egy idő után ad egy reset impulzust. Nekem az arduino alatt nem mindig ment a wdt lehet a bootloader miatt .
AZ <avr/wdt.h> könyvtárral több példát is lehet találni,de letölteni sehol nem tudom,talán ezzel tudna működni,nem említenek fuse-bitet.
Nem kell letölteni alapból benne van az arduino (avr) könyvtáraiban.
#include <avr/wdt.h>
A setupba beletettem a " WatchDog::init(WACHD, OVF_4000MS);" utasítást,ez 4sec múlva meghívja a benne lévő függvényt.Ebben a függvényben van egy led jelzés,ezt meg is hívja,ha letelik a 4 sec,de a programon nem látni változást megy tovább.Vajon csak az AVR-t állítja alaphelyzetbe?Viszont a függvénybe beleraktam egy szoftver resetet is ami fizikailag a nanot reseteli,így láthatóan valóban újra kezdi a programot,csak a hosszabb ciklusokba kellett beletenni watchdog resetet.Ez nekem így megfelel,csak szeretném tudni a szoft reset nélkül is működik-e watchdog?
Ennek így kellene működnie:
fut a programod, és amilyen sűrűn csak tudod, meghívod a watchdog reset függvényt, ez nulláza a watchdogot, vagyis nem fog az AVR újraindulni. Ha megáll a programod, akkor ez a reszetelés nem történik meg, az AVR-ben a watchdog órája ketyeg tovább (ez független hardware), és mikor lejárt a beállított 4mp (tehát nem reszeteltél), akkor a watchdog újraindítja az AVR-t (azt hiszem ezt elintézi magától). Ki tudod próbálni így: setup részbe rakj egy delay(10000);, hogy lásd, ha újraindult az AVR, inicializálod a watchdogot (2mp-re), a main részben meg legyen mondjuk egy sima LED villogatatás 0.5mp-ként, tehát LED be, vár 0.5mp, LED ki, vár 0.5mp, ide szúrd be a watchdog reszet függvényt, majd kezdődik az egész elölről. A watchdog akkor fog működésbe lépni, ha a LED ki- és bekapcsolás közti időt megnöveled, legalább 1mp-re. Pl. 1500ms várakozással elindítva az AVR-t ezt fogod látni: 10mp-ig semmi, majd 1.5mp-ig LED be, majd 0.5mp múlva LED ki, ekkor a program futása megszakad és reszetelődik az AVR, és 10mp múlva ismét LED be, ez pedig ismétlődik örökké. A hozzászólás módosítva: Márc 31, 2022
Oké köszi,nagyjából értem és én is csináltam bizonyos visszajelzést erre.Még 40 éve mikrogép szinten programoztam(8080,Z80),annak még mindig van hatása.Most arduinot programozok amatőr szinten,de a hardvert nem igazán ismerem.Ezért kérdeztem,hogy az AVR watchdog visszaállítása esetén az elejéről indul-e a program a nano-n.Az említett szofver/hardver esetén valóban nulláról indul.
Ha a watchdog visszaállítása alatt a watchdog resetet érted, akkor kevered a dolgokat. A watchdog egy visszaszámláló, 4mp-ről indul. Amikor reszeteled, 4mp-re áll vissza. Ha lejár, akkor avatkozik közbe, és indítja újra az AVR-t.
A hozzászólás módosítva: Márc 31, 2022
Megesik,hogy félreértem.Ezért kérdezem,ha a watchdog "avatkozik közbe, és indítja újra az AVR-t", a nano-n elejéről indul-e a program?
A 0. címről indul, vagyis a programod legelejéről. Lefut az összes definíció, változók inicializálása, stb, a setup, majd elkezdődik a main folyamatos ismétlése. Nem egyenértékű egy tápelvétellel, de majdnem.
A hozzászólás módosítva: Márc 31, 2022
Tehát nem a bootloader kezdőcíméről indul?
Igaz. A programmemória 0. címéről, ami a bootloader, utána meg a programod 0. sorától. Így korrektebb. Mondjuk ez jó kérdés! Szerintem a bootloader is lefut ilyenkor. Ha a watchdog kivált egy AVR resetet, akkor a cím, ahonnan beolvasódnak az utasítások, visszaáll 0-ra. Hogy ilyenkor lesz-e RAM törlés, azt kétlem. Elég komplex dolog ez.
A hozzászólás módosítva: Ápr 1, 2022
Tettem egy kísérletet arduino nanoval, új azaz nem old arduino nano bootloader:
A serial monitoron az értékek, a reset gomb megnyomásakor a LED 2x felvillan, innen lehet tudni hogy a bootloader futott le, a 2. sorban megnyomtam a reset gombot i = 8 értékné, LED 2x felvillan, i változó 0-ról indul, a 2. és 4. sorban a wdt reset történt, i változó 0 - ról indul viszont a LED nem villant fel így a program nem a bootloadertől (ahogy az arduino fuse bitjei vannak beállítva) hanem a 0. címről indult. Mintha lenne olyan mikrokontroller is ami elmenti egy regiszterbe hogy miért történt a reset, viszont az avr status regiszterében ilyen bit nincs ami ezt mutatná. Start 0 1 2 3 4 5 6 7 8 Start 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Start 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Start 0 1 2 3 4 5 6 7 8 9 10 A hozzászólás módosítva: Ápr 1, 2022
Az MCUSR tárolja a reset okát.
Azt is írják, hogy nem minden bootloader kezeli jól a watchdogot. de az optiboot már jó (lehet, hogy leellenőrzi az újraindulás okát, és ha watchdog okozta, átugorja a bootloader részt?).
Beszúrtam az előző programba két sort, de független honnan jött a reset mindig 0 kapok vissza.
Nem tudom, valószinűleg ilyenkor nem a bootloadertől indul mert nem villan fel a led. Ha leforditunk egy üres arduino fájlt akkor is keletkezik egy viszonylag hosszú programkód de azt pontosan nem tudom mit csinál.
Sziasztok!
Van arra lehetőség hogy kb 24 óránként újra induljon az arduino? Meglévő codba szertnék egy ilyet beilleszteni. Mert 2-3hetente valamiért lefagy. Hő különbségeket figyel és szivattyúkat indít leállít.
Szia
Van a kódba millis(); ? Az ha túlcsordul esetleg lefagyást is okozhat.
Talán még az fontos lehet hogy ne akkor reseteljen amikor egy szivattyú pont be van kapcsolva.
Bővebben: Link
Csináltam egy szép kis órát, csak az RTC modul pontatlansága miatt az időt át kellene írnom. Itt az a gond hogy nincs már meg a "virtuabotixRTC.h" Mi a megoldás ?
Én egy kamerát indítottam újra úgy, hogy kapcsoló órát tettem a tápjára. Éjszaka mikor ugyse használom, kikapcsolom negyed órára.
|
Bejelentkezés
Hirdetés |