注册会员
- 积分
- 172
- 威望
- 100
- 贡献
- 44
- 兑换币
- 49
- 注册时间
- 2012-12-10
- 在线时间
- 14 小时
- 毕业学校
- asda
|
#define Num 8 //采样次数
#define sennors 4 //传感器数量
传感器数量超过3就采集不到数据了不知道怎么回事,请大神帮我看看,是不是初始化有问题啊
/*********************************************/
/* 滤波部分 */
/*********************************************/
unsigned int AD_value0[Num],AD_value1[Num],AD_value2[Num],
AD_value3[Num];//AD_value4[Num],AD_value5[Num],AD_value6[Num]; //未滤波各个传感器的值
unsigned int AD_value[sennors]; //滤波后每个传感器的值
unsigned char line[sennors];
/*************************************************/
/* AD模块初始化 */
/*************************************************/
void INIT_ATD(void)
{
ATD0CTL1=0x10; //分辨率10位,采样前内部采样电容放电
ATD0CTL2=0x40; //使能ATD启用快速清零方式 禁止外部触发,禁止中断
ATD0CTL3=0x98; //右对齐 转换序列产度为8 ------------------------10100000是4 ---------------------------------------
ATD0CTL4=0x0f; //4倍采样周期 PRS=15 AD时钟1MHz F atd=Fbus/(2x(PRS+1))
ATD0CTL5=0x30; // 连续多通道转换 从通道0开始
ATD0DIEN=0x00; //禁止数字输入
}
/*************************************************/
/* 获得AD采样值 */
/*************************************************/
void Get_AD_Value(void)
{
unsigned char i;
for(i=0;i<Num;i++)
{
while(!ATD0STAT2_CCF0);
AD_value0[i] =ATD0DR0L;
while(!ATD0STAT2_CCF1);
AD_value1[i] =ATD0DR1L;
while(!ATD0STAT2_CCF2);
AD_value2[i] =ATD0DR2L;
while(!ATD0STAT2_CCF3);
AD_value3[i] =ATD0DR3L;
//while(!ATD0STAT2_CCF4);
// AD_value4[i] =ATD0DR4L;
//while(!ATD0STAT2_CCF5);
// AD_value5[i] =ATD0DR5L;
//while(!ATD0STAT2_CCF6);
// AD_value6[i] =ATD0DR6L;
}
}
/*********************************************/
/* 滤波函数 */
/*********************************************/
word filter(unsigned int x[],unsigned int n)
{
word ave_i,average_ave;
unsigned long sum=0;
for(ave_i=0;ave_i<n;ave_i++)
{
sum=sum+x[ave_i];
}
average_ave=(word)sum/n;
return(average_ave);
}
/*********************************************/
/* 二值化 */
/*********************************************/
void Line(void)
{
unsigned char i;
for(i=0;i<sennors;i++)
{
if(AD_value[1]>140)
line[1]=1;
else line[1]=0;
if(AD_value[2]>140)
line[2]=1;
else line[2]=0;
if(AD_value[0]>140)
line[0]=1;
else line[0]=0;
if(AD_value[3]>140)
line[3]=1;
else line[3]=0;
}
}
////////////////////AD采样/////////////////////////////////////
void adCaiY(void) {
Get_AD_Value();
AD_value[0]=filter(AD_value0,Num);
AD_value[1]=filter(AD_value1,Num);
AD_value[2]=filter(AD_value2,Num);
AD_value[3]=filter(AD_value3,Num);
// AD_value[4]=filter(AD_value4,Num);
//AD_value[5]=filter(AD_value5,Num);
// AD_value[6]=filter(AD_value6,Num);
Line();
} |
|