打印

pic16f883的AD转换时间

[复制链接]
5457|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jianghehupo|  楼主 | 2010-11-24 22:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用20M的晶振,AD时钟选择Fosc/32,这时Tad = 1.6us
10位的分辨率需要12个Tad时间,1.6us x 12 = 19.2us
但是实际运行,一个AD转换需要45us时间,怎么会差这么多呢?
沙发
yewuyi| | 2010-11-24 23:21 | 只看该作者
请问45US你是如何测量的?!

使用特权

评论回复
板凳
yewuyi| | 2010-11-24 23:21 | 只看该作者
请问45US你是如何测量的?!

使用特权

评论回复
地板
兰天白云| | 2010-11-25 08:34 | 只看该作者
还有采用时间

使用特权

评论回复
5
jianghehupo|  楼主 | 2010-11-25 15:38 | 只看该作者
代码如下:
    LED = 1;        // 点亮LED
    ADGO = 1;     // 启动AD转换
    while(ADGO);  // 等待转换结束
    LED = 0;        // 熄灭LED
用示波器测量LED点亮的时间为45us左右。

还有,在AD转换前已经选好了转换通道并且经过了足够的采集时间。

使用特权

评论回复
6
yewuyi| | 2010-11-25 22:58 | 只看该作者
这个45US还包含了采保电容的采样时间,你所计算的时间只是转换时间+两条置位指令执行的时间。

另外,在这个转换过程中如果发生中断,也将导致AD采样时间的延迟,采保电容的采样时间和输入阻抗密切相关。

具体可查阅对应型号手册中AD模块部分,请仔细阅读几次就应该明白一些了。

使用特权

评论回复
7
jianghehupo|  楼主 | 2010-11-26 08:18 | 只看该作者
谢谢yewuyi,为了测量转换时间禁止了所有中断,ADGO=1只是启动AD转换,跟采保没关系吧

使用特权

评论回复
8
XIEYUANBIN| | 2010-11-26 09:07 | 只看该作者
哦,你看看这段汇编后的代码,C编译后的代码和汇编写的代码不能相提并论,优化也需开到最高。
LED = 1;        // 点亮LED
    ADGO = 1;     // 启动AD转换
    while(ADGO);  // 等待转换结束
    LED = 0;        // 熄灭LED

使用特权

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

本版积分规则

7

主题

86

帖子

1

粉丝