Stránka 1 z 1

Zastavení cyklování programu

Napsal: 28 kvě 2020, 21:15
od Patrik
Ahoj,

chtěl bych se zeptat jakým důvodem může být samovolné zastavení cyklování programu. Používám Arduino Mega 2560. Program cykluje bez problémů třeba 4 dny v kuse.. A někdy dojde prostě k tomu, že se cyklus zastaví a pomůže jedině restartovat napájením nebo např. znova uploudovat kód. Napadlo mě, že k zastavení mohlo dojít vlivem přehřátí... Ale nevím... Nejsou to pravidelné doby.. Někdy to jde bez problémů i týden.. Nevíte, co by mohlo být tímto problémem? Děkuji. Pokud možno tak také návrhy na řešení. Program není nikterak složitý... Vlastně se zobrazuje jen čas... A jen pokud někdo přiloží čipovou kartu, tak pak dochází k vyhodnocování různých cyklů.. Bez přiložené karty však dochází jen k přičítání sekund, minut, hodin a jejich nulování.

Děkuji

Re: Zastavení cyklování programu

Napsal: 28 kvě 2020, 21:45
od AstroMiK
To se bude hledat hodně blbě.
Může docházet k nějakému přetečení paměti (přepsání návratových adres z podprogramů), překročení povoleného rozsahu proměnné, nebo to může být i tím hardwérem....

Kdybych byl v podobné situaci a nedařilo se mi najít příčinu, tak bych do toho programu asi zavedl Watchdog:
Při každé smyčce by se občerstvoval a když by program "zběhnul" a občerstvování by ustalo, tak by se po několika sekundách provedl automatický reset Arduina.

Český návod tady:
https://pihrt.com/elektronika/224-watchdog-a-arduino
(doporučuju i kouknout na komentáře pod článkem)

Re: Zastavení cyklování programu

Napsal: 29 kvě 2020, 11:11
od pavel1tu
Asi ti nezbude než tam dát třeba SD kartu a "logovat" všechny proměnné a cykly co spouštíš jen jednou za čas nebo s podmínkou, asi bych i logoval napájecí napětí.
Jednou se mi stalo, že jsem prostě jednu věc neuhlídal a prostě mi něco "přeteklo"
Několikrát u Arduin s malou pamětí "fragmentace" paměti
Jednou - prostě se zahřál zdroj, zkolaboval a posílal šílené věci do napájení a Arduino se kouslo

Já si na to už udělal funkci a každou novou věc automaticky nechávám třeba měsíc logovat stavy jak proměnných tak napětí.

PS: Watchdog je také řešení, ale začal bych tím hledáním chyby v programu

Re: Zastavení cyklování programu

Napsal: 29 kvě 2020, 17:57
od AstroMiK
SD karta si vezme navíc několik set bajtů z RAM, takže jestli je problém s nedostatkem paměti, mohlo by se zasekávání projevit i dříve.

Re: Zastavení cyklování programu

Napsal: 29 kvě 2020, 19:42
od pavel1tu
AstroMiK píše:
29 kvě 2020, 17:57
SD karta si vezme navíc několik set bajtů z RAM, takže jestli je problém s nedostatkem paměti, mohlo by se zasekávání projevit i dříve.
To je pravda, já na toto používám https://github.com/greiman/Fat16 měla by být minimalistická co se týče nároků na pamě´t atd.

Jinak používám https://github.com/greiman/SdFat
Je to asi autor klasické knihovny pro Arduino, ale tady je skvělá dokumentace a chodí mi to se všemi čtečkami co jsem zatím testoval, což se nedá říci o klasické knihovně. Zatím si ji jen testuji, SD karty moc nevyužívám

Re: Zastavení cyklování programu

Napsal: 30 kvě 2020, 09:46
od Patrik
Pánové děkuji moc za rady. Nemyslím si, že bych měl problémy v programu, ale mohu se samozřejmě mýlit. Asi zkusím přepracovat celý program a uvidíme. Ve zdroji by problém být neměl.. Mám 12 V zdroj, který přes stabilizátor na 9 V napájí Ardurino... V případě výpadku napětí by však Ardurino začalo čerpat energii z 9 V baterie... Je zde samozřejmě hodně kondenzátorů, které dokáží Ardurino napájet i bez zdrojů pár vteřin.