#include <stdio.h>
#include <stdint.h>

uint16_t  S_IIR;  //тело фильтра (максимум 14 значащих разрядов)
uint16_t  resultADC;   // результат  преобразования АЦП (10 разрядов)
uint16_t  outputResult;   // выводимый результат фильтрации (10 разрядов)

void smooth_cycle() {
	S_IIR=S_IIR-(S_IIR>>4)+resultADC; // S[t+1]=((1-β)*S[t])+A[t+1], где β=0,0625=1/16
	outputResult=(S_IIR+8)>>4;  // округление и приведение к целому
	printf("resultADC:%d outputResult:%d\n", (int)resultADC, (int)outputResult);
}

void test_adc(uint16_t x) {
	printf("set resultADC to: %d\n", (int)x);
	resultADC = x;
	for (int i = 0; i < 50; i++) smooth_cycle();
}

int main(void) {
	S_IIR = 0;
	
	test_adc(5);
	test_adc(3);
	
	return 0;
}
