打印

两种AD转换程序的区别??

[复制链接]
2020|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wdliming|  楼主 | 2012-12-11 16:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,下面是两个pic16f877a的ad转换的C程序:
void STACKC()   //  current sampling
{
    int stackc_i=6;
    ADCON0=0x81;
    for(; stackc_i>0; --(stackc_i))
    {
        ;
    }
    ADGO=1;
    while(ADGO==1)
    {
        ;
    }

    STACK_CO=STACK_C;
    STACK_C=ADRESH;
    if(STACK_CO==0)STACK_C= STACK_C;
    else  STACK_C= STACK_C*0.25+ STACK_CO*0.75;
}


void STACKC()
{
    unsigned char i=0;
    int temp_stackc[10],min=0,max=0,SUM=0;
    while(i<10)
    {
        ADCON0=0x81;

        delay30us() ;
        ADGO=1;
        while(ADGO==1)
        {
            ;
        }
        temp_stackc[i]= ADRESH;
        if(i==0)
        {
            min=temp_stackc[0];
            max=temp_stackc[0];
            SUM=temp_stackc[0];
        }
        else
        {
            min=(temp_stackc[i]<min ?temp_stackc[i]:min);
            max=(temp_stackc[i]>max ?temp_stackc[i]:max);
            SUM=SUM+temp_stackc[i];
        }
        i++;
    }
    STACK_C =(SUM-max-min)/8;
}

请问这两个函数有啥区别吗?是不是第二个有了一个滤波的,第一个没有滤波??谢谢!!
沙发
yewuyi| | 2012-12-11 21:30 | 只看该作者
这两个函数都做了一定的软件滤波处理算法,但实际能否达到有效的滤波效果则不得而知,这需要根据你自己的要求去确定。

使用特权

评论回复
板凳
wdliming|  楼主 | 2012-12-12 11:29 | 只看该作者
yewuyi 发表于 2012-12-11 21:30
这两个函数都做了一定的软件滤波处理算法,但实际能否达到有效的滤波效果则不得而知,这需要根据你自己的要 ...

哦,谢谢!!

使用特权

评论回复
地板
XIEYUANBIN| | 2012-12-12 19:31 | 只看该作者
ADGO=1;
    while(ADGO==1)
    {
        ;
    }

题外话:不建议这样死等,可以先做点别的事再去判断么。

使用特权

评论回复
5
wdliming|  楼主 | 2012-12-12 20:10 | 只看该作者
XIEYUANBIN 发表于 2012-12-12 19:31
ADGO=1;
    while(ADGO==1)
    {

这是公司的前一个工程师写的。。。难道要在中断里实现啊??

使用特权

评论回复
6
wdliming|  楼主 | 2012-12-13 09:03 | 只看该作者
还有个问题,pic16f877是10位的AD,为什么在程序里没有见到ADRESL位的数据呢?难道强制采用ADRESH用作8位的了??求解~谢谢!!

使用特权

评论回复
7
谈的元| | 2012-12-14 00:33 | 只看该作者
10位的取高字节作为8位用

使用特权

评论回复
8
wdliming|  楼主 | 2012-12-14 08:23 | 只看该作者
谈的元 发表于 2012-12-14 00:33
10位的取高字节作为8位用

哦~谢谢

使用特权

评论回复
9
XIEYUANBIN| | 2012-12-15 18:13 | 只看该作者
wdliming 发表于 2012-12-12 20:10
这是公司的前一个工程师写的。。。难道要在中断里实现啊??

不需要中断啊,你可以做些别的什么事,比如说,调用一个函数,回头再过来等,这样就可以节省一些时间,可以处理一些事情了呀。

使用特权

评论回复
10
XIEYUANBIN| | 2012-12-15 18:14 | 只看该作者
做一个AD需要10几,几十微秒时间,这个浪费了太可惜。

使用特权

评论回复
11
wdliming|  楼主 | 2012-12-15 18:18 | 只看该作者
XIEYUANBIN 发表于 2012-12-15 18:14
做一个AD需要10几,几十微秒时间,这个浪费了太可惜。

谢谢版主指点。。不过现在暂时还用这个,公司里有测试过的。不过以后会采用版主的思想,很先进!~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我的未来不是梦

76

主题

913

帖子

4

粉丝