[PIC®/AVR®/dsPIC®产品] 生成的ADC代码获取AD值总是不对

[复制链接]
3271|16
 楼主| xxrs 发表于 2021-10-19 22:39 | 显示全部楼层 |阅读模式
本帖最后由 pzsh 于 2021-10-26 18:53 编辑

用MAPLAB X IDE+MCC插件生成代码时,生成的ADC代码获取AD值总是不对
jiajs 发表于 2021-10-19 22:41 | 显示全部楼层
还有什么现象?能再详细描述下吗?
 楼主| xxrs 发表于 2021-10-19 22:42 | 显示全部楼层
最后发现是生成的获取AD值的函数时序有问题
morrisk 发表于 2021-10-19 22:44 | 显示全部楼层
啥问题?
 楼主| xxrs 发表于 2021-10-19 22:46 | 显示全部楼层
函数中是直接设置完通道后就直接开启转换,但实际上这样是不行的
chuxh 发表于 2021-10-19 22:48 | 显示全部楼层
这里需要加一个延时才可以
 楼主| xxrs 发表于 2021-10-19 22:51 | 显示全部楼层
哪怕是MCC更新的最新版也是如此,有时候还真不能太相信MCC生成的代码才行。
zwll 发表于 2021-10-19 22:53 | 显示全部楼层
这个其实怪也不怪,mcc无法预知外部设备的源阻抗,也就无法确定到底该延迟多久
chuxh 发表于 2021-10-19 22:55 | 显示全部楼层

我看了一下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 发表于 2021-10-19 23:01 | 显示全部楼层
我的是16LF1559是没有这个延时的
dingy 发表于 2021-10-19 23:02 | 显示全部楼层
用LF1559测试了一下,你说的是对的。如果ADxACQ为0的话,应该是要插入演示。
liliang9554 发表于 2021-10-19 23:04 | 显示全部楼层
如果这个寄存器设置一个计算后的结果,应该就可以不用加延时。
jiajs 发表于 2021-10-19 23:06 | 显示全部楼层
但是,MCC生成的代码,ADxACQ=0,又没有插入延时,应该是有问题的
 楼主| xxrs 发表于 2021-10-19 23:10 | 显示全部楼层
嗯,我再好好缕一缕吧,有了好消息及时通知大家
AINZGOWN 发表于 2021-10-22 09:51 | 显示全部楼层
学到了
ayfalcon 发表于 2021-10-25 21:13 | 显示全部楼层
MCC用起来问题很多,我现在不太敢用了。
pzsh 发表于 2021-10-26 18:53 | 显示全部楼层
MCC的代码运行起来读取ADC有发现同样的问题吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

405

主题

7415

帖子

1

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