[技术支持] HC89S105K8芯片 AD读取波动太大

[复制链接]
264|9
手机看帖
扫描二维码
随时随地手机跟帖
feng2260|  楼主 | 2022-6-15 09:46 | 显示全部楼层 |阅读模式
第一次使用芯圣芯片,现在在读取AD值的时候遇到了问题,使用内部参考电压3V,芯片VDD供电4V,使用ADCR寄存器读取出来的AD值根本没法看,跳动非常大,总几百到几万的跳动;使用ADCRH和ADCRL寄存器读取的AD值就只有个位跳动,但是读取出的AD值偏大了好多。不清楚是什么原因?我将我这边的程序贴出来,大家帮我分析一下:

void adc_init(void)
{
        P0M0 = P0M0&0xF0|0x03;                        //P00设置为模拟输入                CH4
        P0M0 = P0M0&0x0F|0x30;                        //P01设置为模拟输入                T
        P0M2 = P0M2&0x0F|0x30;                        //P05设置为模拟输入                VOL

//////
        ADCC0 |= 0x80;                //打开ADC转换电源
        delay_2us(10);                        //延时20us,确保ADC系统稳定
        //ADCC1 = AD_SEL_CH4;        //选择ADC通道16
//        ADCC1 = AD_SEL_VOL;        //选择ADC通道21
        ADCC1 = (ADCC1&(~0x1F))|AD_SEL_VOL;
        //ADCC2 = 0x13;                        //转换结果12位数据,高8位置于ADCRH寄存器,ADC时钟8分频
        ADCC2 = 0x0B;                        //转换结果12位数据,高8位置于ADCRH寄存器,ADC时钟8分频
        ADCC0 &=0xFB;                //选择内部Vref
        ADCC0 |=0x02;                        //ADC参考电压:内部3V
        ADCC0 &=~ 0x20;                //清除ADC中断标志位
        ADCC0 |= 0x40;                //启动ADC转换
}

主程序中读取AD值,如下:
        ADCC0 |= 0x40;                                //启动ADC转换
        while(!(ADCC0&0x20));                //等待ADC转换结束
        ADCC0 &=~ 0x20;                                //清除标志位
        //adcResult2=ADCR;
        adcResult2=ADCRH;
        adcResult2=adcResult2<<4;
        adcResult2+=(ADCRL&0x0F);

//        adcSum=adcSum+adcResult;

//        adcResult=get_adc_value();
//        adcResult=(300.0*adcResult)/4096;        // 放大100倍.
//        //vddVoltage = (uint16_t)(adcResult+adcResult);
//        vddVoltage = (uint16_t)adcResult;

        LedBuf[0]=adcResult2/1000;
        LedBuf[1]=adcResult2%1000/10;
        LedBuf[2]=adcResult2%100/10;
        LedBuf[3]=adcResult2%10;

使用特权

评论回复
gouguoccc| | 2022-6-15 18:27 | 显示全部楼层
几万的跳动?你这个太不正常了。

使用特权

评论回复
GGLOAM| | 2022-6-16 15:33 | 显示全部楼层
改改ADCC2中ADCTS的值看看

使用特权

评论回复
mickit| | 2022-6-20 15:26 | 显示全部楼层
是多路数据转换吗?  

使用特权

评论回复
xiaoyaozt| | 2022-6-20 16:12 | 显示全部楼层
AD读取波动太大跟参考电压有关系。  

使用特权

评论回复
hellosdc| | 2022-6-20 16:36 | 显示全部楼层
推荐使用数字滤波  

使用特权

评论回复
fentianyou| | 2022-6-20 17:10 | 显示全部楼层
信号之间有干扰的。   

使用特权

评论回复
plsbackup| | 2022-6-20 17:45 | 显示全部楼层
这个波动有规律吗?

使用特权

评论回复
guijial511| | 2022-6-21 08:24 | 显示全部楼层
你这个波动也太大了吧,哪里没对。

使用特权

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

本版积分规则