打印
[PIC®/AVR®/dsPIC®产品]

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

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

使用特权

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

使用特权

评论回复
6
chuxh| | 2021-10-19 22:48 | 只看该作者
这里需要加一个延时才可以

使用特权

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

使用特权

评论回复
8
zwll| | 2021-10-19 22:53 | 只看该作者
这个其实怪也不怪,mcc无法预知外部设备的源阻抗,也就无法确定到底该延迟多久

使用特权

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

使用特权

评论回复
10
xxrs|  楼主 | 2021-10-19 23:01 | 只看该作者
我的是16LF1559是没有这个延时的

使用特权

评论回复
11
dingy| | 2021-10-19 23:02 | 只看该作者
用LF1559测试了一下,你说的是对的。如果ADxACQ为0的话,应该是要插入演示。

使用特权

评论回复
12
liliang9554| | 2021-10-19 23:04 | 只看该作者
如果这个寄存器设置一个计算后的结果,应该就可以不用加延时。

使用特权

评论回复
13
jiajs| | 2021-10-19 23:06 | 只看该作者
但是,MCC生成的代码,ADxACQ=0,又没有插入延时,应该是有问题的

使用特权

评论回复
14
xxrs|  楼主 | 2021-10-19 23:10 | 只看该作者
嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

评论回复
15
AINZGOWN| | 2021-10-22 09:51 | 只看该作者
学到了

使用特权

评论回复
16
ayfalcon| | 2021-10-25 21:13 | 只看该作者
MCC用起来问题很多,我现在不太敢用了。

使用特权

评论回复
17
pzsh| | 2021-10-26 18:53 | 只看该作者
MCC的代码运行起来读取ADC有发现同样的问题吗?

使用特权

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

本版积分规则

405

主题

7415

帖子

1

粉丝