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

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

Sdílejte článek:

Související články

Aktuálně: Zákon o DPH pro zásilky malé hodnoty ze zemí mimo EU podepsal prezident Od 1.

Arduino – proč se osvědčí nejen u neprofesionálů? Arduino Pro – proč bychom měli vsadit právě na toto řešení? Arduino Pro – komu je určeno? Hardwarová platforma Arduino Pro – Arduino Portenta – Arduino MKR a Arduino Pro – Arduino…

Každý elektro nadšenec přinejmenším slyšel o Arduino, které získalo obrovskou popularitu díky svým jedinečným vlastnostem.

Níže uvedený článek je článek přeložený ze stránek dfrobot.

Toto je první díl ze tří – úvodního kurzu Micropython na ESP32.