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