打印

PIC16F727的AD转换试验,碰到一个小问题:

[复制链接]
2457|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hsw_21|  楼主 | 2009-11-25 14:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hsw_21 于 2009-11-25 14:30 编辑

用的是内部Vref = Vdd = 5v, 出现一个奇怪的现象:
AD 口接地的时候,转换值总是为 61, 而不是0或者比 61更小的值。
这是什么原因呢?

是不是AD口的 输入范围给限制了?
沙发
yewuyi| | 2009-11-25 16:22 | 只看该作者
你有点搞笑了把,自己检查一下代码,转换正确是不可能的事情。

使用特权

评论回复
板凳
hsw_21|  楼主 | 2009-11-25 17:09 | 只看该作者

晕,让叶公见笑了。。。

本帖最后由 hsw_21 于 2009-11-25 17:12 编辑

的确是这样啊,我读取AD值用的是中断方式, 用icd2仿真的结果是:
在输入0v的情况下, ADRES = 61.

换了其他AD通道0v的情况下也是61.

嗯,我再仔细检查一下代码。。。

使用特权

评论回复
地板
兰天白云| | 2009-11-25 18:01 | 只看该作者
代码问题,输入1V试试

使用特权

评论回复
5
hsw_21|  楼主 | 2009-11-26 10:54 | 只看该作者
查明原因,的确是软件问题。
ADON = 1
GODONE = 1;
改成:

ADON = 1;
Delay_us(20);   // delay 20us
GODONE  = 1;

就可以了,谢谢叶公,蓝天白云。

使用特权

评论回复
6
yewuyi| | 2009-11-26 13:37 | 只看该作者
在initsys的时候,就把ADON打开,AD模块上电后需要一定的时间才能稳定工作的。

当然,如果是那些对功耗要求特别低的系统,需要在SLEEP的状态下关闭ADON,天亮起床后再打开ADON,这个时候可以把第一次的转换值放弃,在下一个周期重新AD转换一次,从第二个值开始使用。

使用特权

评论回复
7
hsw_21|  楼主 | 2009-11-26 16:38 | 只看该作者
嗯,OK,叶公,谢谢!  :)

使用特权

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

本版积分规则

418

主题

2675

帖子

1

粉丝