智能车制作

标题: ATD模块的通道使用问题 [打印本页]

作者: 戥家三少    时间: 2013-12-26 09:58
标题: ATD模块的通道使用问题
这是一篇文章的原话:S8C~S1C就控制每轮进行多少次转换,最多为8。比如可以选择为6,那么每6次转换称为一个序列。如果选择了多通道转换,那么CC、CB和CA选择首个转换的通道,后面的通道按通道号排列。比如S8C~S1C选择转换数为6,MULT设为1,而CC、CB和CA选择通道4,那么转换开始后,AD模块将按通道4、通道5、通道6、通道7、通道0、通道1的顺序依次进行转换,并将转换结果依次放入6个结果寄存器中。要注意并不能间隔选择通道。


我想问一下,现在我想用ATD来采集加速度计和陀螺仪的数据的话,能不能使用多个通道呢?比如我想使用AN0和AN1,但数据我又想存放在多个结果寄存器中,可以不??

作者: mlhmxhabc    时间: 2013-12-26 12:02
void AD_init()//AD初始化
{
    ATD0DIEN=0x00; //AD通道禁止为I/O口
    ATD0CTL0=0x02;
    ATD0CTL1=0x50;//AD分辨率选择12位,采样前放电
    ATD0CTL2=0x40;//AD快速清零,禁止外部触发,禁止中断
    ATD0CTL3=0x90;//AD转换结果右对齐,每个序列2个通道,非FIFO模式
    ATD0CTL4=0x0a;//AD采样时间4个周期,PRS=10《==============***********这个有待修正
    ATD0CTL5=0x30;//AD对通道0,1连续采样,用时启动A/D转换序列
}
这是我的AD初始化程序,采集两个数据,能用,但里面有些问题我也没搞清楚,希望可以帮助你


作者: 戥家三少    时间: 2013-12-26 12:07
mlhmxhabc 发表于 2013-12-26 12:02
void AD_init()//AD初始化
{
    ATD0DIEN=0x00; //AD通道禁止为I/O口

那你读取的话是只读取两个结果寄存器吗??

作者: mlhmxhabc    时间: 2013-12-26 12:13
戥家三少 发表于 2013-12-26 12:07
那你读取的话是只读取两个结果寄存器吗??

是,读ATD0DR0和ATD0DR1,能够读出来,同时我验证性的又读了ATD0DR3,但是前两个在1602上有数据,而第三个是0,所以说我的初始化程序是对的

作者: 戥家三少    时间: 2013-12-26 12:23
mlhmxhabc 发表于 2013-12-26 12:13
是,读ATD0DR0和ATD0DR1,能够读出来,同时我验证性的又读了ATD0DR3,但是前两个在1602上有数据,而第三个 ...

那是不是说明多通道采集时,每个通道在一个转换序列内只会转换一次呢??
作者: mlhmxhabc    时间: 2013-12-26 12:30
戥家三少 发表于 2013-12-26 12:23
那是不是说明多通道采集时,每个通道在一个转换序列内只会转换一次呢??

这个我也不清楚,但是你可以选择连续转换序列模式啊,就是那个scan位等于1,每个通道采集20次,去掉最大和最小值然后求平均值就提高准确性了,个人看法

作者: 戥家三少    时间: 2013-12-26 12:41
mlhmxhabc 发表于 2013-12-26 12:30
这个我也不清楚,但是你可以选择连续转换序列模式啊,就是那个scan位等于1,每个通道采集20次,去掉最大和 ...

照你这样说我开始明白了,多通道转换其实是在一个转换序列内对多个通道进行一次转换,如果S[8~1]C大于8的话,就会把第一次的数据覆盖的了,而单通道转换是对一个通道进行转换,此时的S[8~1]C决定了对一个通道进行几次转换。

作者: 戥家三少    时间: 2013-12-26 12:57
mlhmxhabc 发表于 2013-12-26 12:02
void AD_init()//AD初始化
{
    ATD0DIEN=0x00; //AD通道禁止为I/O口

还有一个问题,采集周期是怎么确定的?

作者: mlhmxhabc    时间: 2013-12-26 17:29
戥家三少 发表于 2013-12-26 12:57
还有一个问题,采集周期是怎么确定的?

资料说xs128的AD模块的时钟频率要在500K~~2M之间,具体得查数据手册了
作者: 戥家三少    时间: 2013-12-26 17:36
mlhmxhabc 发表于 2013-12-26 17:29
资料说xs128的AD模块的时钟频率要在500K~~2M之间,具体得查数据手册了

我的意思是采集时长应该定为多少与什么有关,时间长了就会使程序运行时间长,但短了会不会造成什么问题

作者: mlhmxhabc    时间: 2013-12-26 17:40
戥家三少 发表于 2013-12-26 17:36
我的意思是采集时长应该定为多少与什么有关,时间长了就会使程序运行时间长,但短了会不会造成什么问题

这个我也不清楚,应该具体问题具体测试吧
作者: 涛子    时间: 2014-1-2 12:51

作者: 戥家三少    时间: 2014-2-15 09:17
mlhmxhabc 发表于 2013-12-26 12:13
是,读ATD0DR0和ATD0DR1,能够读出来,同时我验证性的又读了ATD0DR3,但是前两个在1602上有数据,而第三个 ...

ATD0CTL0=0x02;
这里你设为返转通道为2,不就会返回到AN2吗??这个地方不明白

作者: 寒仅    时间: 2014-11-28 19:54
能不能使用FIFO模式,使结果存放在多个结果寄存器中?




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