打印

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

[复制链接]
692|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 | 只看该作者
啥问题?

使用特权

评论回复
5
xxrs|  楼主 | 2020-5-19 23:46 | 只看该作者
函数中是直接设置完通道后就直接开启转换,但实际上这样是不行的

使用特权

评论回复
6
zwll| | 2020-5-19 23:49 | 只看该作者
这里需要加一个延时才可以

使用特权

评论回复
7
xxrs|  楼主 | 2020-5-19 23:53 | 只看该作者
哪怕是MCC更新的最新版也是如此,有时候还真不能太相信MCC生成的代码才行。

使用特权

评论回复
8
llljh| | 2020-5-19 23:57 | 只看该作者
要看你用的什么型号,有些型号(比如PIC18)的采样保持时间是自动的,不需要延时。

使用特权

评论回复
9
zwll| | 2020-5-20 21:14 | 只看该作者
这个其实怪也不怪,mcc无法预知外部设备的源阻抗,也就无法确定到底该延迟多久

使用特权

评论回复
10
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));
}

使用特权

评论回复
11
xxrs|  楼主 | 2020-5-20 21:22 | 只看该作者
我的是16LF1559是没有这个延时的

使用特权

评论回复
12
dingy| | 2020-5-20 21:25 | 只看该作者
用LF1559测试了一下,你说的是对的。如果ADxACQ为0的话,应该是要插入演示。

使用特权

评论回复
13
supernan| | 2020-5-20 21:28 | 只看该作者
如果这个寄存器设置一个计算后的结果,应该就可以不用加延时。

使用特权

评论回复
14
yinxiangh| | 2020-5-20 21:31 | 只看该作者
但是,MCC生成的代码,ADxACQ=0,又没有插入延时,应该是有问题的

使用特权

评论回复
15
xxrs|  楼主 | 2020-5-20 21:34 | 只看该作者

嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

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

本版积分规则

405

主题

7415

帖子

1

粉丝