// ----- Listing 3
while (!(ADC1_HS & ADC_HS_COCO0)) ;               // wait for ADC
ADCval = ADC1_R0-512 ;
ADCoffset=0.9999*ADCoffset+0.0001*ADCval ;        // get DCoffset
ADCval -= ADCoffset ;                             // subtract offset
ADC1_HC0 = ADCch ;                                // trigger ADC
sum=0 ;
for(int k=0 ; k<Nmix ; k++){                      // 24 channels
  LOphaseK[k]+=LOfrequencyK[k] ;                  // DDSphase
  sum+=DDStable[ (LOphaseK[k] >> 20 ) & 0xFFF ] ; // sum LO
  }
sum *= ADCval ;                                   // mixer
out=IIRdo(lowPass1,sum) ;                         // filter output
if(out>127){ out=127 ; }                          // limit out
if(out<-127){ out=-127 ; }
analogWrite(PWMpin1, 128+out);
analogWrite(PWMpin2, 128-out);
