完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
`我是用adc0804采集压力传感器的压力,得到的电压值不稳定,会在0.492V和0.512V之间跳动,在ad部分加了滤波函数,加了后,整个main.c函数运行不正常了,好像ad没采集似的,一直显示如下界面,什么都不变化。传感器输出的电压,压力是电压换算得到的。
这是我ad.c部分 ************************ #include #include #include #include "adc.h" #include "display.h" uchar recieve_volt; extern uchar data date_tab[8]; extern uint PresValue; /*******************************************************************/ /* */ /* 启动AD转换子程序 */ /*******************************************************************/ void start_ad(void) { cs=0; //允许进行A/D转换 wr=0;_nop_();wr=1; //WR由低变高时,AD开始转换 //while(intr); //查询转换结束产生INTR 信号(低电平有效) cs=1; //停止AD转换 } /*******************************************************************/ /* */ /* 读A/D数据子程序 */ /*******************************************************************/ unsigned int read_ad() { uint ad_data; ad0_7=0xff; cs=0; //允许读 rd=0; //读取转换数据结果数据结果 _nop_(); ad_data=ad0_7; //把数据存到ad_data中 rd=1;cs=1; //停止A/D读取 return(ad_data); } /*******************************************************************/ /* */ /*取平均值滤波函数 */ /*******************************************************************/ uchar ad_filter() { uchar i,U[10],min,max,R; uint sum; start_ad(); for(i=0,sum=0;i<10;i++) //测量十次,去除最大最小值后取平均值 { U=read_ad(); sum+=U; //获取ad结果 } for(i=1,min=U[0];i<=9;i++) { if(U } for(i=1,max=U[0];i<=9;i++) { if(U>max) max=U; //求最大值 } R=(sum-min-max)/8; return R; //返回计算结果 } /*******************************************************************/ /* */ /*电压采集子程序 */ /*******************************************************************/ void Volt_collect() { uint Pressure;//采集的压力值变量 recieve_volt=ad_filter(); recieve_volt=recieve_volt*201; //5.15/256*10000=201 recieve_volt=recieve_volt+100; //ad精度只能是0.0201v,加0.01v误差校准是为了显示与实际相符 date_tab[0]=recieve_volt/10000; //整数 date_tab[1]=recieve_volt%10000/1000; // 十分位 date_tab[2]=recieve_volt%1000/100; // 百分位 date_tab[3]=recieve_volt%100/10; //千分位 //Pressure=1000*date_tab[0]+100*date_tab[1]+10*date_tab[2]+date_tab[3]-170; //Pressure=Pressure/8.86/0.98; Pressure=1000*date_tab[0]+100*date_tab[1]+10*date_tab[2]+date_tab[3]-220; if(Pressure<0) { Pressure=0; } Pressure=Pressure/92.7/0.098;; //转换成cmH2O PresValue =Pressure; //传给main文件的全局变量 date_tab[4] = Pressure/1000; date_tab[5] = Pressure/100%10; date_tab[6] = Pressure/10%10; date_tab[7] = Pressure%10; } ************************ ` |
|
相关推荐
2个回答
|
|
正常情况界面是这样
|
|
|
|
A/D转换用的查询方式!没用中断方式!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
820 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第十一章 KEY实验
388 浏览 0 评论
783 浏览 0 评论
801 浏览 2 评论
飞凌嵌入式-ELFBOARD-ELF 2硬件知识分享-最小系统原理
466 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11929 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-12 11:13 , Processed in 0.615359 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号