智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1212|回复: 0
打印 上一主题 下一主题

XS128的ad转换遇到一个问题自己解决不了了

[复制链接]

2

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
172
威望
100
贡献
44
兑换币
49
注册时间
2012-12-10
在线时间
14 小时
毕业学校
asda
跳转到指定楼层
1#
发表于 2014-3-23 18:59:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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();   
         
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-8 17:46 , Processed in 0.047459 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表