生成的ADC代码获取AD值总是不对

[复制链接]
1020|14
 楼主| xxrs 发表于 2020-5-19 23:31 | 显示全部楼层 |阅读模式
用MAPLAB X IDE+MCC插件生成代码时,生成的ADC代码获取AD值总是不对
huanghuac 发表于 2020-5-19 23:35 | 显示全部楼层

还有什么现象?能再详细描述下吗?
 楼主| xxrs 发表于 2020-5-19 23:40 | 显示全部楼层
最后发现是生成的获取AD值的函数时序有问题
morrisk 发表于 2020-5-19 23:43 | 显示全部楼层
啥问题?
 楼主| xxrs 发表于 2020-5-19 23:46 | 显示全部楼层
函数中是直接设置完通道后就直接开启转换,但实际上这样是不行的
zwll 发表于 2020-5-19 23:49 | 显示全部楼层
这里需要加一个延时才可以
 楼主| xxrs 发表于 2020-5-19 23:53 | 显示全部楼层
哪怕是MCC更新的最新版也是如此,有时候还真不能太相信MCC生成的代码才行。
llljh 发表于 2020-5-19 23:57 | 显示全部楼层
要看你用的什么型号,有些型号(比如PIC18)的采样保持时间是自动的,不需要延时。
zwll 发表于 2020-5-20 21:14 | 显示全部楼层
这个其实怪也不怪,mcc无法预知外部设备的源阻抗,也就无法确定到底该延迟多久
chuxh 发表于 2020-5-20 21:19 | 显示全部楼层

我看了一下16F1507的MCC生成的代码,有延时啊
adc_result_t ADC_GetConversion(adc_channel_t channel)
{
    // select the A/D channel
    ADCON0bits.CHS = channel;   
   
    // Turn on the ADC module
    ADCON0bits.ADON = 1;

    // Acquisition time delay
    __delay_us(ACQ_US_DELAY);

    // Start the conversion
    ADCON0bits.GO_nDONE = 1;

    // Wait for the conversion to finish
    while (ADCON0bits.GO_nDONE)
    {
    }

    // Conversion finished, return the result
    return ((adc_result_t)((ADRESH << 8) + ADRESL));
}
 楼主| xxrs 发表于 2020-5-20 21:22 | 显示全部楼层
我的是16LF1559是没有这个延时的
dingy 发表于 2020-5-20 21:25 | 显示全部楼层
用LF1559测试了一下,你说的是对的。如果ADxACQ为0的话,应该是要插入演示。
supernan 发表于 2020-5-20 21:28 | 显示全部楼层
如果这个寄存器设置一个计算后的结果,应该就可以不用加延时。
yinxiangh 发表于 2020-5-20 21:31 | 显示全部楼层
但是,MCC生成的代码,ADxACQ=0,又没有插入延时,应该是有问题的
 楼主| xxrs 发表于 2020-5-20 21:34 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

405

主题

7415

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部