RE: Mereni napeti baterie pomoci AVR

Pavel Hudeček edizon na seznam.cz
Středa Leden 5 13:06:41 CET 2011


Možností je poměrně mnoho, např. pro měření je nejlepší využít přímo přerušení od převodníku. Velmi často to ale kombinuji, např. takto: Převodník měří, hodnoty se v přerušení přičítají do nějakého longu (obvykle pole pro více kanálů) a inkrementuje se čítací proměnná. No a třeba 1 za sekundu se v přerušení od timeru (které mám obvykle po 1 ms) nastaví synchronizační proměnná a v čekací funkci (volané z hlavní smyčky) se na základě toho provedou různé časově náročnější věci, mj. i floatový výpočet průměru změřených hodnot. Ten je ovšem ještě podmíněn nastavenou synchronizací od projití všech kanálů převodníku.

Ještě k čekání: Osvědčilo se mi používat funkci, která si vynuluje proměnnou ms (jenž je přerušením od timeru každou ms inkrementována) a pak provádí while, dokud ms nedosáhne zadaného času. V rámci toho whilu se pak děje spousta různých věcí, které se mají dělat tak nějak trvale, ale nejsou časově kritické. Napřed se provedou zcela obecné věci, pak ty, které jsou synchronizovány na něco rychlejšího (třeba ADC), ... a obvykle nakonec věci, které se mají dít např. 1 za minutu. Každá taková sekce vždy začíná ifem, který vyvolá nový cyklus, není-li splněna jeho synchronizační podmínka. Pokud splněna je, tak se nejprve vynuluje daná synchronizační proměnná.

PH 

> Od: Michal Grunt <michal.grunt na vynet.cz>
> Jeste se v teto souvislosti zeptam. Kdybych chtel merit (nebo v podstate delat
> cokoliv) jednou za x jednotek casu (radove vteriny ci desitky vterin), to se
> dela pomoci preruseni? Abych nejakou smyckou delay nezablokoval cely program. A
> dela se to tak, ze nastavim ze se bude preruseni generovat kazdych x jednotek
> casu (placnu, preruseni jeste nastudovane nemam, treba jednou za 100ms) ja budu
> v hlavni smycce programu testovat zda se preruseni neprovedlo xy krat a pokud
> ano provedu pozadovany ukon?
> ________________________________________
> Pavel Hudeček [edizon na seznam.cz]
> Ano, takto. Hodnoty skoro jakékoli od 1k do 1M, rozumná střední cesta je něco
> kolem 100k. Nebo kdybyste chtěl přejít z vypínače na tlačítko, tak i nad 1M, ale
> možná s tím bude víc práce, neb při velkých hodnotách můžete na některých
> vstupech dojít k různým kalibračním konstantám pro různé režimy činnosti MCU.
> 
> Pak je ještě jedna alternativní možnost, zcela bez ext. součástek: Jako
> referenci zvolíte napájení (předpokládám, že je natvrdo připojené ke článku) a
> multiplexer přepnete na pomocnou referenci (má asi 1,23 V), změříte její napětí
> v jednotkách odvozených z napájecího. Pak napájecí napětí vypočítáte opačným
> postupem, než obvykle :-)


Další informace o konferenci Hw-list