zhouhuoyan的个人主页

http://bbs.ntpcb.com/u.php?uid=97051  [收藏] [复制]

zhouhuoyan

  • 14

    关注

  • 9

    粉丝

  • 73

    访客

  • 等级:二级逆天
  • 总积分:1503
  • 男,1988-07-24

最后登录:2020-08-03

更多资料

日志

PIC12F1822 的ADC采样问题求助

2020-07-24 00:00
#include "mcc_generated_files/mcc.h"

uint32_t u32AdcCount = 0;

static uint16_t u16AD_GetData(void)
{
    uint32_t u32Count = 0;
    uint16_t i;

    for(i=0;i<10;i++)
    {
        u32Count += ADC_GetConversion(channel_AN0);
    }

    return u32Count/10;
}

void main(void)
{
    uint16_t i,u16AD,u16Temp;

/*引脚配置*/
    LATA = 0x00;
    TRISA = 0x19;
    ANSELA = 0x17;
    WPUA = 0x00;
    OPTION_REGbits.nWPUEN = 1;
    APFCON = 0x00;

/*ADC配置*/
    ADCON0 = 0x01;
    ADCON1 = 0x10;
    ADRESL = 0x00;
    ADRESH = 0x00;

/*时钟配置*/
    OSCCON = 0x68;
    OSCTUNE = 0x00;
    BORCON = 0x00;


    while (1)
    {
        for(i=0;i<1000;i++)
        {
            u32AdcCount += u16Proximity_GetData();//对AN0通道一千次采样
        }
        u16AdcValue = u32AdcCount/1000;//取平均值
        u16AD = u16AD_GetData();//对AN3通道采样
        if(u16AD > 0xB332)
            u16AD = 0xB332;
        else
            if(u16AD < 0x5000)
            u16AD = 0x5000;
        u16Temp = (float)u16AD*1.72 - 13591;//模拟函数转换数值
        u32AdcCount = 0;
    }
}

遇到了很头疼的问题。
u16AD = u16AD_GetData();
这个函数只进行一次采样,而且采样的数据不准确,按道理进行10次采样后取平均值。
在我将这个函数内部  u32Count += ADC_GetConversion(channel_AN0);前面加了一句    ADCON0bits.ADON = 0;
也就是
static uint16_t u16AD_GetData(void)
{
    uint32_t u32Count = 0;
    uint16_t i;

    for(i=0;i<10;i++)
    {
        ADCON0bits.ADON = 0;/*加了一句这个*/
        u32Count += ADC_GetConversion(channel_AN0);
    }

    return u32Count/10;
}
,才能继续出数据。为什么要关一下再开才能出数据。。。而且数据也是不准确的。。。
0.0人类迷惑行为。
分类:默认分类|回复:0|浏览:30|全站可见|转载
 

Powered by phpwind v8.7.1 Certificate Copyright Time now is:08-05 03:37
©2003-2011 逆天PCB论坛 版权所有 Gzip disabled 粤ICP备14042835号 问题咨询 | 广告业务点这里