Sdílejte chiptron.cz na sociálních sítích



RSS feeds

Arduino a funkce millis. Proč nikdy neuvidíte číslo 42.Tisk



Zajímavé téma ohledně funkce millis() pro vývojové kity Arduino Uno, Nano, prostě desky založené na Atmega328 zveřejnil Michal Dudka.
Zjistil, že po spuštění časovače právě s ATmega328 se nikdy nedočkáte 42 milisekundy a jejich násobků. Zároveň přidal i vysvětlení.

Upřímně, proč časovač v ATMega328 vynechá každou 42 milisekundu mě nikdy nenapadlo a navíc bych ani nečekal, že něco takového bude mikrokontrolér dělat. Ale důvod je ve finále naprosto logický.

Cituji Michala:
Nedávno při nějaké diskuzi mě zaujalo jak je na Aruino (UNO, nano, micro, prostě s Atmega328) řešená funkce millis(). Má zajímavou vlastnost, přibližně každou 42 druhou milisekundu v řadě "vynechává". Takže když sestavíte primitivní program který bude stále dokola číst hodnotu millis tak se čísla 42 nedočkáte, a nedočkáte se ani 85, 127, 170 ... atd. Je to dáno tím, že millis ve skutečnosti počítá s periodou 1.024ms (daň za to že použitý timer nepřijde o jeden PWM kanál) a když celková chyba přesáhne 1ms (nasbírá cca 42 chyb po 0.024ms) tak prostě "poskočí" o 2ms aby se nerozcházela (zjednodušeně řečeno) - podobně jako když v přestupném roce přidáváme v únoru jeden den abychom ošetřili fakt že rok netrvá přesně 365 dní.

Michal Dudka je velmi zkušený programátor a bastlíř a spravuje svůj vlastní web http://www.elektromys.eu/
Tuto zajímavost sdílel ve facebookové skupině Arduino CZ & SK

Upozornění

Administrátor těchto stránek ani autor článků neručí za správnost a funkčnost zde uvedených materiálů.
Administrátor těchto stránek se zříká jakékoli odpovědnosti za případné ublížení na zdraví či poškození nebo zničení majetku v důsledku elektrického proudu, chybnosti schémat nebo i teoretické výuky. Je zakázané používat zařízení, která jsou v rozporu s právními předpisy ČR či EU.
Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva.
Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ.
8,743,887 návštěv