[C] Průměrování 16-bitových čísel

Ahoj.
PLS poradil by někdo? Vyčítám hodnotu 16-bit AD převodníku, ale hodnota na LCD se mi pořád moc mění. Proto mě napadlo, že bych do pole uložil 16 měření a to pak zprůměroval.

Ale jsou zde asi příliš velké čísla (1 048 576), takže budu muset použít knihovnu math.h? Nebo co byste mi poradili?

[code]uint32_t suma;
uint16_t adc_value;

suma = 0;
for(uint8_t i=0; i<16; i++)
suma += get_adc();
adc_value = suma / 16;[/code]
Ale napřed bych řešil kolísání hodnoty.
Jsou všude kondy 100k ? (VCC, AVCC, AREF)
V testovacím zapojení s potenciometrem musí hodnota držet jako skála.

:smiley: Já tam nemám potenciometr, ale UV čidlo, takže ta hodnota bude kolísat. Vyházím z datasheetového zapojení. Se schematem se pochválím taky. :wink:

A jinak děkuji, hned se to trošku polepšilo. A koukám, že jsem na to šel úplně blbou cestou.

Takto pozeram ze tam mas menic napetie zaporneho… ten ti bude robit taky bordel na 12bit ze až, to bude chcet tlmivky a poriadny navrch plošaku, navyse neviem ako a cosa bude presne merat ale mozno by som te n RC cle n pred aAD prevodnikom zvecsil.

No tak u schematů jsem vycházel z Datasheetů součástek.
U toho AD převodníku je i náčrt DPSky a RC člen pochází taky z tama.

Jinak mám doma trafíčko 2*9V, tak ho zkusím místo toho ICL7660.

Tak jsem se opět vrátil k té diodě a tomu AD převodníku a při bližším zkoumání přišel na to, že když tu fotodiodu zastíním, tak mi AD převodník vrací hodnotu blízkou 65536 (2^16). Ale já bych potřeboval 0.

Neví někdo, čím je to způsobeno? A jak to odstranit? Schema přikládám.

Výpočet té sumy bych modifikoval takto. Teoreticky se to chová jako digitální dolní propust.

volatile static unsigned long suma = 0;
suma += ADC;
vysledna_AD = (suma >> stupen_digitalni_filtrace);
suma -= vysledna_AD;