pic16f883的AD转换时间

[复制链接]
6179|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 | 显示全部楼层
还有采用时间
 楼主| jianghehupo 发表于 2010-11-25 15:38 | 显示全部楼层
代码如下:
    LED = 1;        // 点亮LED
    ADGO = 1;     // 启动AD转换
    while(ADGO);  // 等待转换结束
    LED = 0;        // 熄灭LED
用示波器测量LED点亮的时间为45us左右。

还有,在AD转换前已经选好了转换通道并且经过了足够的采集时间。
yewuyi 发表于 2010-11-25 22:58 | 显示全部楼层
这个45US还包含了采保电容的采样时间,你所计算的时间只是转换时间+两条置位指令执行的时间。

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

具体可查阅对应型号手册中AD模块部分,请仔细阅读几次就应该明白一些了。
 楼主| jianghehupo 发表于 2010-11-26 08:18 | 显示全部楼层
谢谢yewuyi,为了测量转换时间禁止了所有中断,ADGO=1只是启动AD转换,跟采保没关系吧
XIEYUANBIN 发表于 2010-11-26 09:07 | 显示全部楼层
哦,你看看这段汇编后的代码,C编译后的代码和汇编写的代码不能相提并论,优化也需开到最高。
LED = 1;        // 点亮LED
    ADGO = 1;     // 启动AD转换
    while(ADGO);  // 等待转换结束
    LED = 0;        // 熄灭LED
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

86

帖子

1

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