打印

帮忙解答ADC模数问题

[复制链接]
1666|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子write_cai|  楼主 | 2010-12-29 22:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
鄙人用的芯片是ADC0832,模拟输入是4V,输出的数字量十进制是204(二进制1100 1100). 此芯片是8位分辨率,电压精度是19.53mv, 所以我想把输入的电压采集后输出在LCD,这个之间的转换怎么做?怎么写 19.53*204的程序呢? 大家帮忙解答啊,谢谢了。

相关帖子

沙发
lovedfrien| | 2010-12-29 22:49 | 只看该作者
用C语言写,算出数据,控制液晶显示,就这么简单

使用特权

评论回复
板凳
mmax| | 2010-12-30 08:29 | 只看该作者
你应该是5V的基准。

4V = (204/256)*5V

所以AD读数为 ad_data;
用int型变量
lcd_data = (ad_data /256)*5000;
          =  (ad_data *5000)/256
结果是mV,变量要用Int型的,然后必须先乘后除。

当然你用浮点算也行,最后强制转换。



当然你要

使用特权

评论回复
地板
电子write_cai|  楼主 | 2010-12-30 21:30 | 只看该作者
输入的5V模拟量被我分压了, 为什么要先乘后除啊?
3# mmax

使用特权

评论回复
5
maychang| | 2010-12-30 21:34 | 只看该作者
4楼:
先除后乘会损失精度。

使用特权

评论回复
6
mmax| | 2010-12-31 14:36 | 只看该作者
3# mmax

想了想,用int变量也会溢出,char*5000

还是用更快、更省事的方法:
(ad_data *5000)/256
=ad_data * 19.53
=ad_data * (16+4-0.5+0.03)
=ad_data * (16+4-1/2+1/32)
=ad_data <<4 + ad_data <<2 + ad_data >>5 -  ad_data >>1;

当然ad_data应该设为unsigned int型的。

使用特权

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

本版积分规则

个人签名:只要你是拼多多新用户就可以加我微信,微信号772880135验证您是新用户后立刻微信转你20元。欢迎朋友加我微信,多年21ic用户,诚信为本!

157

主题

1534

帖子

3

粉丝