微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ADC0809电压表 数据采集与处理方法

ADC0809电压表 数据采集与处理方法

时间:11-28 来源:互联网 点击:
使用ADC0809制作5V电压表时,遇到新的知识——模数转换,赶紧记下自己的心得以供以后参考。

ADC0809数据8位输出OUT1~OUT8,与单片机硬件连接时最好为整个8位PX(P0、P1、P2、P3)口,下面为数据采集与处理参考程序分析:

假设使用void ADC(unsigned char ad_dat)函数来进行转换,那么在main中调用时可以直接写ADC(PX);将整个PX口的数据以unsigned char(uchar)类型读取进来。在ADC函数里这样写(此处只写出对已收到的数据处理,省略了芯片的启动电平和是否完成转换判别等等):

float temp;//浮点保留小数点后面六位,最后一位四舍五入

uchar val_int;//用于存储整数位

uint val_decimal;//存小数位

temp = ad_dat * (5/255);//主要是这个地方的原理比较重要:首先输出数据的8个口,能够表示的无符号整数范围是0~255。而测量电压的范围是0~5V(以参考电压连接决定),所以接收到的整数与想要得到的电压值存在 5/255 的数量关系。为了保持精度,所以temp用的是float类型。

val_int = (uchar) temp;//强制转换,保留temp的整数部分,注意,这里并不会改变temp的数据

val_decimal = (uint) ((temp - val_int) * 100);//把整数部分减去为0之后。把想要保留的小数提上来,这样数码管显示的时候当做整数来处理。

虽然程序没仿真过,目前也还没出成品,不过这个新的知识,感觉挺理论的,不能忘了

更正错误:temp = ad_dat * (5/255);这条语句中,(5/255)必须用算出值0.0196078。原句改为:temp = ad_dat * 0.0196078; 否则转换值全是0。原因还未探明,相信与数据类型有关系。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top