打印
[开发工具]

mcc生成的ADC转换代码Bug

[复制链接]
1605|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
明日华星|  楼主 | 2019-1-3 23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用MAPLAB X IDE+MCC插件生成代码时,生成的ADC代码获取AD值总是不对,最后发现是生成的获取AD值的函数时序有问题,函数中是直接设置完通道后就直接开启转换,但实际上这样是不行的,这里需要加一个延时才可以。哪怕是MCC更新的最新版也是如此,有时候还真不能太相信MCC生成的代码才行。
沙发
cdyyabc| | 2019-1-4 11:16 | 只看该作者
本帖最后由 cdyyabc 于 2019-1-4 11:18 编辑

要看你用的什么型号,有些型号(比如PIC18)的采样保持时间是自动的,不需要延时。

使用特权

评论回复
板凳
淘猫汤姆| | 2019-1-4 11:18 | 只看该作者
这个其实怪也不怪,mcc无法预知外部设备的源阻抗,也就无法确定到底该延迟多久

使用特权

评论回复
地板
cdyyabc| | 2019-1-4 11:22 | 只看该作者
我看了一下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));
}

使用特权

评论回复
5
明日华星|  楼主 | 2019-1-4 12:59 | 只看该作者
cdyyabc 发表于 2019-1-4 11:22
我看了一下16F1507的MCC生成的代码,有延时啊
adc_result_t ADC_GetConversion(adc_channel_t channel)
{

我的是16LF1559是没有这个延时的

使用特权

评论回复
6
cdyyabc| | 2019-1-4 14:33 | 只看该作者
明日华星 发表于 2019-1-4 12:59
我的是16LF1559是没有这个延时的

我用LF1559测试了一下,你说的是对的。如果ADxACQ为0的话,应该是要插入演示。如果这个寄存器设置一个计算后的结果,应该就可以不用加延时。
但是,MCC生成的代码,ADxACQ=0,又没有插入延时,应该是有问题的

使用特权

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

本版积分规则

1

主题

3

帖子

0

粉丝