完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 zqb3366 于 2015-4-22 19:41 编辑
用STC12C5A60S2进行AD采样(10位)5.0V供电,结果跳动很大,有0.05V, 和实际结果相差0.15V,怎么会这样, 以前从51一路学过来,觉得国产单片机不会太差, 所以就打算学一学STC12的AD转换部分, 结果很失望。 附上部分程序: void ADInit() { // P1=0xff; P1M1 = 0xff; P1M0 = 0xff; P1ASF=0xff; //P1.0口作为模拟功能AD使用 ADC_RES=0; //清零转换结果寄存器高8位 ADC_RESL=0; //清零转换结果寄存器低2位 ADC_CONTR=0xe0;//开启AD电源 Delay1ms(); //等待1ms,让AD电源稳定 write_com(0xc0); display(str2); } uint getAD() { ADC_CONTR=0xe8; _nop_(); _nop_(); _nop_(); _nop_();//要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR 寄存器 while(!(ADC_CONTR&0x10)); //等待转换完成 ADC_CONTR=0xe0; //关闭AD转换,ADC_FLAG位由软件清0 return(ADC_RES*4+ADC_RESL); //返回AD转换完成的10位数据(16进制) } uint getREF() { ADC_CONTR=0xe9; while(!(ADC_CONTR&0x10)); //等待转换完成 ADC_CONTR=0xe0; //关闭AD转换,ADC_FLAG位由软件清0 _nop_(); _nop_(); _nop_(); _nop_(); return(ADC_RES*4+ADC_RESL); //返回AD转换完成的10位数据(16进制) } void filter() { uchar i,j; double k; for(i=0;i for(j=i;j if(filter_data k=filter_data; filter_data=filter_data[j]; filter_data[j]=k; } } } } void voltagedisp() { uchar i; double vol=0; for(i=0;i CURRENT_AD=getAD(); CURRENT_REF=getREF(); } for(i=0;i filter_data=1.0*CURRENT_AD/CURRENT_REF; } filter(); for(i=N/2-5;i vol+=3.3*filter_data; //参考电压3.3V } disdatavol[0]=(uint)vol/10+0x30;//个位 disdatavol[1]=(uint)vol%10+0x30;//十分位 disdatavol[2]=(uint)(vol*10)%10+0x30;//百分位 disdatavol[3]=(uint)(vol*100)%10+0x30;//千分位 write_com(0xc9); write_dat(disdatavol[0]); write_com(0xca); write_dat(0x2e); //显示小数点 write_com(0xcb); write_dat(disdatavol[1]); write_com(0xcc); write_dat(disdatavol[2]); write_com(0xcd); write_dat(disdatavol[3]); write_com(0xce); write_dat('V'); } ///* void Delay1000ms() //@11.0592MHz { unsigned char i, j, k; i = 43; j = 6; k = 203; do { do { while (--k); } while (--j); } while (--i); } //*/ /********************主程序***********************************/ void main() { init_display();//初始化显示 ADInit(); while(1) { voltagedisp(); Delay1000ms(); } }
|
|
相关推荐
8个回答
|
|
楼主使用的的是两个通道对比的结果来产生所谓的滤波效果,由于两个通道都是经过ADC转换来个值,这样会造成误差的累积,最终导致结果偏差严重,因此建议尽量不要这样使用。另外建议楼主书写程序尽量简洁,规范,这样方便自己查找错误。我写的程序已经贴出来了,请对照着看吧,#include
最佳答案
|
|
|
|
|
|
shiyigehaotie!!!!!!!
|
|
|
|
好厉害,学习了
|
|
|
|
学习 学习
|
|
|
|
你好!请问在keil4里用stc12c5a60s2编译能通过,不能生成hex文件是什么原因。
|
|
|
|
你好,请问在keil4中用stc12c5a60s2芯片,能编译,不能生hex文件是什么原因?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
151 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1043 浏览 0 评论
836 浏览 0 评论
874 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
869 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11824 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 22:53 , Processed in 0.871251 second(s), Total 99, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号