Code: Select all
#include <avr/io.h>
//#include <avr/interrupt.h>
uint32_t accumulated_filter;
uint16_t filter_array[16];
uint8_t filter_count;
uint16_t sred_adc,izmjereni_adc;
uint16_t filter_value(uint16_t new_filter_value){
accumulated_filter -= filter_array[filter_count]; // Oduzmi najstariju adc vrijednost od sume
filter_array[filter_count] = new_filter_value; // Stavi najnoviju vrijednost adc u filter array(niz)
accumulated_filter += new_filter_value; // Dodaj najnoviju vrijednost adc
filter_count++; // Postavi brojac da pokazuje slijedecu lokaciju u nizu
filter_count &= 0b00001111; // brojac kada dostigne sa 0 do 16 lokacije ponistava na 0
return(accumulated_filter >>4); // Dijeli sumu sa 16 , toliko ima elemenata u nizu (array)
}
int main (void)
{
for(;;) // Loop Forever
{
sred_adc=filter_value(izmjereni_adc);
}
}