// ----- Listing 6: Mehrkanal-Zeitdehnung
while (!(ADC1_HS & ADC_HS_COCO0)) ;        // wait for ADC
int ADCval = ADC1_R0-512 ;                 // read ADC
ADCoffset=0.9999*ADCoffset+0.0001*ADCval ; // get DC offset
ADCval -= ADCoffset ;                      // subtract DC offset
ADC1_HC0 = ADCch ;                         // trigger ADC

bufferWrite(kStore,ADCval) ;
kStore++ ;
if(kStore>=NN*MM) { kStore=0 ; }

for(int jj=0 ; jj<NN ; jj++){              // synchronize read
  if(kStore==1+MM*jj){                     // positions
    cnt[jj]=0 ;
    readPos[jj]=MM*jj ;
    }
  }
float sum=0 ;                              // sum NN Signals
for(int jj=0 ; jj<NN ; jj++){
  sum+=bufferRead(readPos[jj]) ;           // actual read position
  cnt[jj]++ ;
  if(cnt[jj]==NN){
    readPos[jj]++;
    cnt[jj]=0 ;
    }
  }
int out1=tprun(lowPass1,sum/10) ;
if(out1>127){ out1=127 ; }
if(out1<-127){ out1=-127 ; }
analogWrite(PWMpin1, 128+out1);
analogWrite(PWMpin2, 128+out1);
