智能车制作

标题: 求大神帮忙看看! 给个意见 [打印本页]

作者: 只想更懂    时间: 2013-7-22 22:16
标题: 求大神帮忙看看! 给个意见
8个红外对管是不是一定就要用8个A/D通道来采集啊?最后这8个采集的信号转换成了数字信号后是单独存在8个结果寄存器ATD0DRO-8还是只存到一个寄存器啊?怎么让这个结果读出来啊?  XS128 80引脚的转换完成的标志位是用这个ATD0STAT2_CCF表示而不是ATD0STAT1_CCF吗  我看资料 XS128 80引脚的状态寄存器没有ATD0STAT2啊 只有ATD0STAT1 和ATD0STAT0,但是编程的时候用ATD0STAT1_CCF表示,显示错误,只能用ATD0STAT2_CCF啊?



作者: 只想更懂    时间: 2013-7-22 22:20
希望能有个对XS128熟悉的高手能留个QQ以方便请教   感激不尽!!!!!
作者: 理工小别    时间: 2013-7-22 22:52
哥们 你不知道什么叫比较器吗 什么叫外部中断吗
怎么可能用户8个AD去采啊
作者: 只想更懂    时间: 2013-7-23 07:42
理工小别 发表于 2013-7-22 22:52
哥们 你不知道什么叫比较器吗 什么叫外部中断吗
怎么可能用户8个AD去采啊

我知道什么叫比较器  什么叫外部中断  但是同时采集8个红外对管的信号 我的想法就是一个AD通道对应一个啊   因为不是很懂,希望大哥不吝赐教啊!具体实现的想法告诉我一下啊  
作者: 理工小别    时间: 2013-7-23 09:12
刚认真看了一下你的帖子 原来是AD的数据读不出来吧 我没在实验室 资料在那个电脑里 论坛有很多关于AD的帖子 自己研究一下吧
大家都是从小白起家的 不用不好意思问
还有 建议你用比较器去做你的东西 竟然用8个对管 可想而知你还是个新手
作者: 清晨zh    时间: 2013-7-23 17:37
都是新手过来的,没事。读取的程序很多吧!应该蛮好找的吧!
s12有16个ad端口为什么还要加锁存器呢?直接一个用一个吧!
下面是ad初始化和读取程序
void atd_init(void)
{   
  ATD0CTL1=0x00;  //8位转换精度         
  
//外部触发为AN0,8位转换精度 ETRIGCHn(n=0~3)=ETn
/*7     6      5       4        3         2        1        0
ETRIGSEL SRES1  SRES0   SMP_DIS  ET3       ET2      ET1      ET0
ETRIGSEL:外部触发选择位,默认为0。
SRES[1:0]:精度控制度,00:8位,01:10位,10:12位,11:保留
SMP_DIS:采样前放电控制位。0:采样前不放电,1:采样前放电.*/
     
  ATD0CTL2=0X60;  //affc允许
                  //stopmode转换继续
                  /*7:空
                  6位AFFC:ATD标志快速清除位。
                  5位ICLKSTP:0 STOP MODE停止
                  转换,1 STOP MODE继续转换。
                  1位ASCIE:ad中断完成使能位,0:禁止,1:允许   
                  其他位外部触发控制位不用 */  
  ATD0CTL3=0Xb0;  //右对齐,序列长度为6,非fifo模式
                  //冻结模式时依然转换
                  //13.5.16  由于转换通道个数为6个,而自己只
                  //定义5个所以一直出错弄得我一下午没心情
                  //之后晚上铺赛道时有一点空余时间随便调了下
                  //突然想到要不用少一点通道看行不行结果果然可以
                  //所以意识到是转换序列数设错了
                  //bit7JM,'1'右对齐,‘0’左对齐
                  //bit[6:3]:SnC,一个ad转换序列长度
                  /*S8C~S1C就控制每轮进行多少次转换,最多为8。
                  比如可以选择为6,那么每6次转换称为一个序列。
                  如果选择了多通道转换,那么CC、CB和CA选择首个转换的通道,
                  后面的通道按通道号排列。比如S8C~S1C选择转换数为6,
                  MULT设为1,而CD、CC、CB和CA选择通道4,那么转换开始后,
                  AD模块将按通道4、通道5、通道6、通道7、通道0、通道1的顺序
                  依次进行转换,并将转换结果依次放入6个结果寄存器
                  中。要注意并不能间隔选择通道。*/
                  //bit2:FIFO先进先出模式选择位
                  //            
  ATD0CTL4=0X01; //采样时间为4个ad周期
                 //ad总线频率为40/4mhz
                 /*SMP[7:5]:采样时间选择位        
                 000:4,   011:10,   110:20,
                 001:6,   100:12,   111:24.
                 010:8,   101:16,
                 PRS[4:0]:ad时钟预分频因子位
                 F atdclk=F busclk/(2*(PRS+1)) */
  ATD0CTL5=0X30; //连续多通道模式转换
                 //第一个转换通道为AN0
                                        /*7:空,SC6:特殊通道使能位。1使能,0禁止  
                 SCAN5:连续转换序列模式位。1连续,0不连续  
                 MULT4:多通道采样模式位。1多通道,0单通道
                 CD~CA[3:0]:模拟输入通道选择位。0000~1111=AN0~AN15*/      
  ATD0DIEN=0x00; //数字触发禁止
}
/**************ad数据处理************************
*************************************************
*************************************************
*************************************************/

/***************读取ad转换值函数****************/
void adget(char i)
{
  for(;i<16;i++)
  {
    while(!ATD0STAT2L_CCF0); //读取数据
      atdget0[i]=ATD0DR0L;
    while(!ATD0STAT2L_CCF1);
      atdget1[i]=ATD0DR1L;
    while(!ATD0STAT2L_CCF2);
      atdget2[i]=ATD0DR2L;
    while(!ATD0STAT2L_CCF3);
      atdget3[i]=ATD0DR3L;
   
  }
}
作者: 只想更懂    时间: 2013-7-23 19:06
清晨zh 发表于 2013-7-23 17:37
都是新手过来的,没事。读取的程序很多吧!应该蛮好找的吧!
s12有16个ad端口为什么还要加锁存器呢?直接一 ...

一个通道对应一个CCF 然后对应一个结果寄存器
8个对管就是CCF0-8 对应8个结果寄存器吗





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2