bqyj 发表于 2022-6-12 16:09

左移2位不是不对了 ?

大家好,我现在用 79F082的 ,用10位的 AD ,然后我想采样得到的结果先加起来,放在一起,然后多次采样求平均,不知道这样对不对?
INT16U average ;
    EA = 0;
    EADC = 0;
   ADCON &=0XBE;               //ADCIF = go= 0

    average = ADDL + ADDH<<2
if(++g == 4)
{
   retuslt = average/4;
   average = 0;
}

4次采样求平均,不知道对不对 ,感觉ADDH是8位,左移2位不是不对了 ??

dingy 发表于 2022-6-12 16:38

不推荐

bqyj 发表于 2022-6-12 16:41

为什么啊

spark周 发表于 2022-6-12 16:44

当被测电压出现毛刺波动时,前后两次测量的结果会有较大波动。

bqyj 发表于 2022-6-12 16:47

有什么好的办法

wuhany 发表于 2022-6-12 16:49

冒泡排序、中间值取平均数法

pangb 发表于 2022-6-12 16:52


采集一定次数的AD数据,比如说6次,将6次数据进行排序。
   使用冒泡法进行排序,相邻的两个进行比较,第一轮是6与5、5与4、4与3、3与2、2与1,大的排在高位,小的在低位;经过第一轮后,虽然最大数无法求出,但是最小数已经得出。从第二轮开始,不需要将最小数加入比较,只需6与5、5与4、4与3、3与2即可,第二轮完成后可以得到第二小数。以此类推。。。。假设有X个数,需要比较X-1轮,每一轮比较的次数依次减少。
   完成排序后,去除最大和最小数,再将中间数据相加再求平均值。

zhenykun 发表于 2022-6-12 16:54


类堆栈法:此处说的堆栈,并非真的是使用堆栈来进行采样求值,而是说工作原理同堆栈类似。
   此方法中,使用数组来存放采集的数据,我以6个数据为一个数组来说明。首次计算,先一次性采集一定次数的AD数据,每采集1个数据就移入数组,最早采集的数据位于数组底部,而最新采集到得数据位于数组顶部。采样6次后进行第一次求平均值,这样就完成了第一次的AD去抖求稳定值了。之后每次进行AD去抖求稳定值,只需要采集一次AD值,将前一次去抖求稳定值数组中最底层的数据推出,再将新采集得到的AD值移入数组并求平均值即可。

tian111 发表于 2022-6-12 16:55

    简单的说,就是第1次计算采集6次,第2次计算采集1次,第3次计算采集1次。。。。。。第N次计算采集1次。

bqyj 发表于 2022-6-12 16:57

写了个冒泡排序,不知道对不对?
void maopao(INT8U r[],n)
{
      INT8U i,j;
         INT8U temp;

      for(i=1;i<n,i++)
                {
                      j = 7;
               for(j=j-i;j=0;j--)
                         {
                                  if(r<r)
                                 {
                              
                                        temp = r;
                                           r = r;                                       
                                           r = temp;
                              }
                        
               }
               
   
            }


}

对INT8U r的6个数据排序,正确吗 ??

dengdc 发表于 2022-6-12 16:59

非常规做法啊。呵呵

bqyj 发表于 2022-6-12 17:01


average = ADDL + ADDH<<2

另外ADDH是8位的,左移2位 感觉不对 ??

bqyj 发表于 2022-6-12 17:08


adl=ADDL&0x03;
               adh=ADDH*4;
               adc_result1=(adh+adl);

liuzaiy 发表于 2022-6-12 17:14

这个,你在keil里面试试看就知道了。

stly 发表于 2022-6-12 17:18

我觉得不一定行。ADDH<<2好像会溢出的

bqyj 发表于 2022-6-12 17:20

结贴了,多谢大家讨论这么多哈,呵呵
页: [1]
查看完整版本: 左移2位不是不对了 ?