智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1706|回复: 6
打印 上一主题 下一主题

求大神帮忙看看! 给个意见

[复制链接]

5

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
威望
105
贡献
39
兑换币
50
注册时间
2013-7-22
在线时间
62 小时
跳转到指定楼层
1#
发表于 2013-7-22 22:16:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
8个红外对管是不是一定就要用8个A/D通道来采集啊?最后这8个采集的信号转换成了数字信号后是单独存在8个结果寄存器ATD0DRO-8还是只存到一个寄存器啊?怎么让这个结果读出来啊?  XS128 80引脚的转换完成的标志位是用这个ATD0STAT2_CCF表示而不是ATD0STAT1_CCF吗  我看资料 XS128 80引脚的状态寄存器没有ATD0STAT2啊 只有ATD0STAT1 和ATD0STAT0,但是编程的时候用ATD0STAT1_CCF表示,显示错误,只能用ATD0STAT2_CCF啊?


5

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
威望
105
贡献
39
兑换币
50
注册时间
2013-7-22
在线时间
62 小时
2#
 楼主| 发表于 2013-7-22 22:20:15 | 只看该作者
希望能有个对XS128熟悉的高手能留个QQ以方便请教   感激不尽!!!!!
回复 支持 反对

使用道具 举报

11

主题

390

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1698
QQ
威望
835
贡献
433
兑换币
324
注册时间
2011-8-20
在线时间
215 小时
3#
发表于 2013-7-22 22:52:06 | 只看该作者
哥们 你不知道什么叫比较器吗 什么叫外部中断吗
怎么可能用户8个AD去采啊
回复 支持 反对

使用道具 举报

5

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
威望
105
贡献
39
兑换币
50
注册时间
2013-7-22
在线时间
62 小时
4#
 楼主| 发表于 2013-7-23 07:42:01 | 只看该作者
理工小别 发表于 2013-7-22 22:52
哥们 你不知道什么叫比较器吗 什么叫外部中断吗
怎么可能用户8个AD去采啊

我知道什么叫比较器  什么叫外部中断  但是同时采集8个红外对管的信号 我的想法就是一个AD通道对应一个啊   因为不是很懂,希望大哥不吝赐教啊!具体实现的想法告诉我一下啊  
回复 支持 反对

使用道具 举报

11

主题

390

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1698
QQ
威望
835
贡献
433
兑换币
324
注册时间
2011-8-20
在线时间
215 小时
5#
发表于 2013-7-23 09:12:51 | 只看该作者
刚认真看了一下你的帖子 原来是AD的数据读不出来吧 我没在实验室 资料在那个电脑里 论坛有很多关于AD的帖子 自己研究一下吧
大家都是从小白起家的 不用不好意思问
还有 建议你用比较器去做你的东西 竟然用8个对管 可想而知你还是个新手
回复 支持 反对

使用道具 举报

9

主题

32

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1746
威望
950
贡献
438
兑换币
538
注册时间
2012-7-27
在线时间
179 小时
毕业学校
武汉
6#
发表于 2013-7-23 17:37:09 | 只看该作者
都是新手过来的,没事。读取的程序很多吧!应该蛮好找的吧!
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;
   
  }
}
回复 支持 反对

使用道具 举报

5

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
威望
105
贡献
39
兑换币
50
注册时间
2013-7-22
在线时间
62 小时
7#
 楼主| 发表于 2013-7-23 19:06:05 | 只看该作者
清晨zh 发表于 2013-7-23 17:37
都是新手过来的,没事。读取的程序很多吧!应该蛮好找的吧!
s12有16个ad端口为什么还要加锁存器呢?直接一 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 18:38 , Processed in 0.107241 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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