Zatížení arduina a generování času

daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: Zatížení arduina a generování času

Příspěvek od daton »

Zdravím tak toto je velmi zajímavé moc děkuji za vysvětlení. Pokud jsem to dobře pochopil tak lépe než používat funkci millis a počítání času v hlavní smyčce je dát ji jako jedinou do přerušenín Timer1. S přerušením jsem již dělal a mám instalovanou knihovnu TimerOne.h doufám že je to ta se kterou je možné spustit až ty tři přerušení, mě budou stačit dvě. Prvním bych tedy načítal čas, druhým pak kod stránky aby nebylo odesílání na net přerušeno ničím a v hlavní smyčce bych měl sběr hodnot ze senzorů a výpočty. Bylo by to vlastně uplně obráceně než to mám nyní. Dejte mi prosím vědět zda jsem to pochopil správně. S tím zatížením už to asi chápu, díval jsem se na to špatně.
pgerla
Příspěvky: 400
Registrován: 11 dub 2013, 00:17

Re: Zatížení arduina a generování času

Příspěvek od pgerla »

(omlouvám se za zdržení) pochopil jste to dobře, funkce millis() vrací hodnotu čítače který se nuluje RESETEM Arduina a vy zbytečně testujete v IF podmínce jestli uplynulo 1000 milisekund, nebo neuplynulo. Je to promrhaný čas funkce Loop(). Tím že to přesunete na 16 bitový Timer1, se procesor sám postará o přičítání 1s (či jiné vhodné konstanty) k uplynulému času na základě HW čítače. Nehrozí, že by po 50 dnech budete porovnávat hodnotu 999 > 4 294 967 295, která bude neplatná a vy tak ztratíte 1 vteřinu + další milisekundy zbytečně jen tím, že je to přeci jen jednou za měsíc a půl a nemá smysl to řešit. Záludnost použití Timer 0/1/2 je v tom, že dopředu nevíte jestli ho nebude používat nějaká knihovna. Takže obecně se měnění nastavení Timer0 nedoporučuje, tu už má vyhrazeno Arduino pro delay().

Timer1 je 16 bitový a dá se sním lehce dosáhnout času 1 vteřiny,
Timer2 je 8 bitový a tak se hodí pro frekvence v kilo Herzcích (38 kHz IR, 40 kHz ultrazvuk).
Jen technická poznámka, pokud měníte nějaký výstup pinu LOG 0/1 tak bez PWM je potřeba počítat s 2-násobkem frekvence. (Sám na to občas zapomenu a blbě se to pak hledá).
Odpovědět