智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4643|回复: 13
打印 上一主题 下一主题

ATD模块的通道使用问题

[复制链接]

52

主题

725

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5889
威望
2514
贡献
1289
兑换币
1650
注册时间
2013-2-20
在线时间
1043 小时
毕业学校
韶关学院
跳转到指定楼层
1#
发表于 2013-12-26 09:58:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一篇文章的原话: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,但数据我又想存放在多个结果寄存器中,可以不??

6

主题

132

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1839
威望
1003
贡献
504
兑换币
411
注册时间
2013-9-23
在线时间
166 小时
推荐
发表于 2013-12-26 12:02:54 | 只看该作者
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初始化程序,采集两个数据,能用,但里面有些问题我也没搞清楚,希望可以帮助你

回复 支持 1 反对 0

使用道具 举报

52

主题

725

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5889
威望
2514
贡献
1289
兑换币
1650
注册时间
2013-2-20
在线时间
1043 小时
毕业学校
韶关学院
3#
 楼主| 发表于 2013-12-26 12:07:25 | 只看该作者
mlhmxhabc 发表于 2013-12-26 12:02
void AD_init()//AD初始化
{
    ATD0DIEN=0x00; //AD通道禁止为I/O口

那你读取的话是只读取两个结果寄存器吗??
回复 支持 反对

使用道具 举报

6

主题

132

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1839
威望
1003
贡献
504
兑换币
411
注册时间
2013-9-23
在线时间
166 小时
4#
发表于 2013-12-26 12:13:30 | 只看该作者
戥家三少 发表于 2013-12-26 12:07
那你读取的话是只读取两个结果寄存器吗??

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

使用道具 举报

52

主题

725

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5889
威望
2514
贡献
1289
兑换币
1650
注册时间
2013-2-20
在线时间
1043 小时
毕业学校
韶关学院
5#
 楼主| 发表于 2013-12-26 12:23:16 | 只看该作者
mlhmxhabc 发表于 2013-12-26 12:13
是,读ATD0DR0和ATD0DR1,能够读出来,同时我验证性的又读了ATD0DR3,但是前两个在1602上有数据,而第三个 ...

那是不是说明多通道采集时,每个通道在一个转换序列内只会转换一次呢??
回复 支持 反对

使用道具 举报

6

主题

132

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1839
威望
1003
贡献
504
兑换币
411
注册时间
2013-9-23
在线时间
166 小时
6#
发表于 2013-12-26 12:30:32 | 只看该作者
戥家三少 发表于 2013-12-26 12:23
那是不是说明多通道采集时,每个通道在一个转换序列内只会转换一次呢??

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

使用道具 举报

52

主题

725

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5889
威望
2514
贡献
1289
兑换币
1650
注册时间
2013-2-20
在线时间
1043 小时
毕业学校
韶关学院
7#
 楼主| 发表于 2013-12-26 12:41:23 | 只看该作者
mlhmxhabc 发表于 2013-12-26 12:30
这个我也不清楚,但是你可以选择连续转换序列模式啊,就是那个scan位等于1,每个通道采集20次,去掉最大和 ...

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

使用道具 举报

52

主题

725

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5889
威望
2514
贡献
1289
兑换币
1650
注册时间
2013-2-20
在线时间
1043 小时
毕业学校
韶关学院
8#
 楼主| 发表于 2013-12-26 12:57:36 | 只看该作者
mlhmxhabc 发表于 2013-12-26 12:02
void AD_init()//AD初始化
{
    ATD0DIEN=0x00; //AD通道禁止为I/O口

还有一个问题,采集周期是怎么确定的?
回复 支持 反对

使用道具 举报

6

主题

132

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1839
威望
1003
贡献
504
兑换币
411
注册时间
2013-9-23
在线时间
166 小时
9#
发表于 2013-12-26 17:29:42 | 只看该作者
戥家三少 发表于 2013-12-26 12:57
还有一个问题,采集周期是怎么确定的?

资料说xs128的AD模块的时钟频率要在500K~~2M之间,具体得查数据手册了
回复 支持 反对

使用道具 举报

52

主题

725

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5889
威望
2514
贡献
1289
兑换币
1650
注册时间
2013-2-20
在线时间
1043 小时
毕业学校
韶关学院
10#
 楼主| 发表于 2013-12-26 17:36:03 | 只看该作者
mlhmxhabc 发表于 2013-12-26 17:29
资料说xs128的AD模块的时钟频率要在500K~~2M之间,具体得查数据手册了

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-29 09:57 , Processed in 0.057626 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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