unsigned invar;  int setic;
  unsigned DigFil(unsigned invar, int setic)
{
    float sumnum=0.0, sumden=0.0, newin=0.0; int i=0, j=0;
    static float states[2][2] = {
        {0.0,0.0},
        {0.0,0.0}
    };
    static float znum[2] = {-1.0,0.0};
    static float zden[2][2] = {
        {.9915,-1.977},
        {.9908,-1.974}
    };
    if (setic==1){
        for (j=0;j<2;j++) states[0][j] = 2.674e-03*invar;
        for (j=0;j<2;j++) states[1][j] = 0.0;
        return 0.0;
    }
    else{
        newin = invar*3.913e-05;
        for (i=0;i<2;i++){
            sumnum = sumden = 0.0;
            for (j=0;j<2;j++){
                sumden += states[i][j]*zden[i][j];
                sumnum += states[i][j]*znum[j];
                if (j<1) states[i][j] = states[i][j+1];
            }
            states[i][1] = (newin-sumden);
            sumnum += states[i][1];
            newin = sumnum;
            if(newin>2045)  newin=2045 ;
            if(newin<-2045)  newin=-2045 ;
        }
        return newin;
    }
}

 void Timer2_interrupt() iv IVT_INT_TIM2 {
  TIM2_SR.UIF = 0;
   invar = ADC1_Read(6);
   GPIOB_ODR = 2045 + DigFil( invar,0);
}

void main() {
  GPIO_Digital_Output(&GPIOB_BASE, _GPIO_PINMASK_ALL );
AFIOEN_bit=1;
SWJ_CFG0_bit=0;
SWJ_CFG1_bit=1;
SWJ_CFG2_bit=0;
  ADC1_Init();
  ADC_Set_Input_Channel(6);
  EnableInterrupts();
 RCC_APB1ENR.TIM2EN = 1;
  TIM2_CR1.CEN = 0;
  TIM2_PSC = 0;
  TIM2_ARR = 7199;
  NVIC_IntEnable(IVT_INT_TIM2);
  TIM2_DIER.UIE = 1;
  TIM2_CR1.CEN = 1;
}