繁体   English   中英

ADC中断中使用位移和数组进行平均

[英]average using bit shift and array in ADC interrupt

我有一个ADC中断,我想对通道(ADCBUF0)采样8次,然后取采样的平均值。 我的代码利用标志来跳出if语句。 代码会编译,而我的变量会在其他地方初始化。 有人可以告诉我为什么我没有收到SpeedADC的价值吗???

///////Global////////////
int SpeedADCcount=0;
/////////////////////////

SpeedADCflag=1;
    if(SpeedADCflag==1)     //The following is meant to take a an average of the incoming ADC voltages
    {
        SpeedADCcount++;
        for(i = SpeedADCcount; i < 16; i++)
        {
            while(!ADCON1bits.SAMP);    //Sample Done?          
            ADCON1bits.SAMP=0;          //Start Converting
            while(!ADCON1bits.DONE);    //Conversion Done? Should be on next Tcy cycle
            SpeedADCarray[i] = ADCBUF0;
            SpeedADCflag=0;
        }
    }
    if(SpeedADCcount==15)
    {

        SpeedADC=SpeedADCarray[i]>>4;
        SpeedADCcount=0;
        // Re-enable the motor if it was turned off previous
        if((SpeedADC>246) && Flags.RunMotor==0){RunMotor();}

        /*Go through another stage of "filtering" for any analog input voltage below 1.25volts

您需要获得正确的降档量(以避免除法),例如8-> 3、16-> 4等。对于8个样本,您只需降档3(3位)。

并且您需要将所有值求和成一个值,而不是将它们放在单独的数组条目中。

SpeedADCarray += ADCBUF0;  /* accumulate in a single integer, not an array */

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM