[ZLG-MCU] MAX144AD采集为何总是跳动?

[复制链接]
2227|2
 楼主| lxr89c51 发表于 2008-9-15 21:10 | 显示全部楼层 |阅读模式
为何采集的数据总是跳动?采用数字滤波。而且输入电压非常稳定。<br /><br />实输入&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;跳变显示......<br />0通道:1V&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.24&nbsp;&nbsp;1.12&nbsp;&nbsp;1.07&nbsp;&nbsp;1.62&nbsp;&nbsp;1.73<br />1通道:1V&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.29&nbsp;&nbsp;1.90&nbsp;&nbsp;2.01&nbsp;&nbsp;1.01&nbsp;&nbsp;1.45<br /><br />0通道:1.88V&nbsp;&nbsp;&nbsp;&nbsp;1.07&nbsp;&nbsp;1.25&nbsp;&nbsp;730&nbsp;&nbsp;&nbsp;980&nbsp;&nbsp;&nbsp;773&nbsp;&nbsp;&nbsp;1.42<br />1通道:1.68V&nbsp;&nbsp;&nbsp;&nbsp;1.42&nbsp;&nbsp;1.85&nbsp;&nbsp;1.78&nbsp;&nbsp;1.38&nbsp;&nbsp;1.23&nbsp;&nbsp;1.97<br /><br />0通道:600mV&nbsp;&nbsp;&nbsp;&nbsp;489&nbsp;&nbsp;&nbsp;428&nbsp;&nbsp;&nbsp;537&nbsp;&nbsp;&nbsp;1.35&nbsp;&nbsp;915&nbsp;&nbsp;637<br />1通道:720mV&nbsp;&nbsp;&nbsp;&nbsp;1.65&nbsp;&nbsp;1.36&nbsp;&nbsp;1.42&nbsp;&nbsp;1.17&nbsp;&nbsp;1.76<br /><br />//*********************************************************<br />sbit&nbsp;Max144_CS&nbsp;&nbsp;&nbsp;&nbsp;=P2^3;<br />sbit&nbsp;Max144_Do&nbsp;&nbsp;&nbsp;&nbsp;=P1^4;<br />sbit&nbsp;Max144_Sck&nbsp;&nbsp;&nbsp;&nbsp;=P1^2;<br />//*********************************************************<br />extern&nbsp;void&nbsp;Delay10uS(unsigned&nbsp;int&nbsp;i);<br />//*****************************************************************/<br />void&nbsp;SetMax144Init(void){<br />//&nbsp;&nbsp;&nbsp;&nbsp;Max144_CS=1;&nbsp;&nbsp;&nbsp;&nbsp;//关闭内部RC震荡<br />&nbsp;&nbsp;&nbsp;&nbsp;Max144_Sck=1;&nbsp;&nbsp;&nbsp;&nbsp;//它控制1-》内部震荡&nbsp;,0-》外部<br />&nbsp;&nbsp;&nbsp;&nbsp;Max144_CS=0;&nbsp;&nbsp;&nbsp;&nbsp;//启动内部RC震荡<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay10uS(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//10uS<br />&nbsp;&nbsp;&nbsp;&nbsp;Max144_Sck=0;&nbsp;&nbsp;&nbsp;&nbsp;//启动采样!<br />}<br />//*********************************************************<br />//&nbsp;&nbsp;&nbsp;&nbsp;读取一个字节<br />unsigned&nbsp;int&nbsp;Rd_Max144(void){<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;j;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;i=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay10uS(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//10uS<br />&nbsp;&nbsp;&nbsp;&nbsp;//*******************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;//等待AD转换结束<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!Max144_Do);<br />&nbsp;&nbsp;&nbsp;&nbsp;//*******************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt16;j++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Max144_Sck=1;&nbsp;&nbsp;&nbsp;&nbsp;//输出数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&lt&lt=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Max144_Do)&nbsp;&nbsp;&nbsp;&nbsp;++i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Max144_Sck=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Max144_CS=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;Max144_Sck=1;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;i;<br />}<br />//*********************************************************<br />//计算电压值<br />float&nbsp;CountAD(unsigned&nbsp;int&nbsp;*p,unsigned&nbsp;char&nbsp;Long){<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;MAX_U&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2500&nbsp;&nbsp;&nbsp;&nbsp;//满档电压&nbsp;单位MV<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;MAX_DATA&nbsp;&nbsp;&nbsp;&nbsp;0x0fff&nbsp;&nbsp;&nbsp;&nbsp;//分数<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;m;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;m=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;i=Long;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(Long--){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;+=*p++;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;m=m/i;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;((float)m*MAX_U/MAX_DATA);&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />//**********************************************************<br />//MAX144数据处理&nbsp;采用数字滤波<br />//**********************************************************<br />void&nbsp;GetMax144AD(float&nbsp;*p){<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;MAX_AD_No&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;//平均的个数<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;unsigned&nbsp;int&nbsp;xdata&nbsp;CH0[MAX_AD_No];<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;unsigned&nbsp;int&nbsp;xdata&nbsp;CH1[MAX_AD_No];<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;unsigned&nbsp;char&nbsp;CH0_Piont=0,CH1_Piont=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;i=0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SetMax144Init();<br />&nbsp;&nbsp;&nbsp;&nbsp;i=Rd_Max144();<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((i&nbsp;&&nbsp;0x1000)==0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CH0[CH0_Piont++]=&nbsp;(i&nbsp;&&nbsp;0x0fff);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;CH0_Piont&nbsp;&gt=&nbsp;MAX_AD_No)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CH0_Piont=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[0]=CountAD(CH0,MAX_AD_No);<br />&nbsp;&nbsp;&nbsp;&nbsp;}else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CH1[CH1_Piont++]=&nbsp;(&nbsp;i&nbsp;&&nbsp;0x0fff);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;CH1_Piont&nbsp;&gt=&nbsp;MAX_AD_No)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CH1_Piont=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[1]=CountAD(CH1,MAX_AD_No);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />
wahahaabc 发表于 2008-9-16 11:33 | 显示全部楼层

Rd_Max144(void)函数错误

  
wahahaabc 发表于 2008-9-16 11:43 | 显示全部楼层

w

//*********************************************************<br />//&nbsp;&nbsp;&nbsp;&nbsp;读取一个字<br />unsigned&nbsp;int&nbsp;Rd_Max144(void){<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;j;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;i=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay10uS(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//10uS<br />&nbsp;&nbsp;&nbsp;&nbsp;//*******************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;//等待AD转换结束<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!Max144_Do);<br />&nbsp;&nbsp;&nbsp;&nbsp;//*******************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt16;j++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&lt&lt=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;读取1bit数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Max144_Do)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;|=&nbsp;1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;给出clk,以便读取下一个bit数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Max144_Sck=1;&nbsp;&nbsp;&nbsp;&nbsp;//输出数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;加入延迟操作<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Max144_Sck=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Max144_CS=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;Max144_Sck=1;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;i&0x0FFF;&nbsp;//&nbsp;屏蔽掉高4位,也可以不屏蔽<br />}<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

22

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部