智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2700|回复: 7
打印 上一主题 下一主题

[电磁] XS128 AD多通道检测

[复制链接]

3

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
QQ
威望
164
贡献
75
兑换币
103
注册时间
2013-4-14
在线时间
33 小时
毕业学校
长沙理工大学
跳转到指定楼层
1#
发表于 2013-6-29 16:34:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大神,帮忙看看有什么问题,一直找不出来问题。谢谢大家
void adinit(void)                          //初始化
{

         ATD0CTL0=0x03;   //完成第3通道转换后回到第0通道       
               ATD0CTL1=0x4f;                 // 启动12位转换精度
        ATD0CTL2=0X40;             //  读取数据自动清零,转换序列完成后不产生中断   
        ATD0CTL3=0Xa4;       //   数据右对齐 转换序列4 启用fifo
        ATD0CTL4=0X67;       //   ad频率=3M=48M/(2*8)  采样时间 10个a/d周期
        ATD0CTL5=0X30;       //多通道 持续转换  起始通道为0通道   

       ATD0DIEN=0x00;   //禁止数字输?/禁止数字输入
}

void adread(void)   
{      
  int ad_temp[16];     //AD临时采样存储

  uchar i,j;  


        ad_temp[0] = ATD0DR0;  //读取转换的结果   


        ad_temp[1] = ATD0DR1;  //读取转换的结果   


        ad_temp[2] = ATD0DR2;  //读取转换的结果   

        ad_temp[3] = ATD0DR3;  //读取转换的结果   


        ad_temp[4] = ATD0DR4;  //读取转换的结果   

        ad_temp[5] = ATD0DR5;  //读取转换的结果   
        ad_temp[6] = ATD0DR6;  //读取转换的结果   
        ad_temp[7] = ATD0DR7;  //读取转换的结果   
        ad_temp[8] = ATD0DR8;  //读取转换的结果   
        ad_temp[9] = ATD0DR9;  //读取转换的结果   
        ad_temp[10] = ATD0DR10;  //读取转换的结果
        ad_temp[11] = ATD0DR11;      

        ad_temp[12] = ATD0DR12;  //读取转换的结果   
        ad_temp[13] = ATD0DR13;  //读取转换的结果  
        ad_temp[14] = ATD0DR14;  //读取转换的结果  
        ad_temp[15] = ATD0DR15;  //读取转换的结果  


想要的结果是0通道的四个值在ad_temp[0],[4],[8],[12],以此类推。谢谢大家指点

3

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
QQ
威望
164
贡献
75
兑换币
103
注册时间
2013-4-14
在线时间
33 小时
毕业学校
长沙理工大学
2#
 楼主| 发表于 2013-6-29 16:38:19 | 只看该作者
现在的情况是你AD输入口接地和接5V检测的值都在3000左右,我是12位精度的
看了很多资料还是解决不了
回复 支持 反对

使用道具 举报

13

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
759
威望
345
贡献
216
兑换币
157
注册时间
2012-11-28
在线时间
99 小时
3#
发表于 2013-6-29 17:45:08 | 只看该作者
不对吧,你这是右对齐,可是你的表达式取的值是左对齐,怎么会拿到值呢。你应该这样写ATD0DR0L
回复 支持 反对

使用道具 举报

3

主题

43

帖子

0

精华

高级会员

Rank: 4

积分
840
威望
483
贡献
225
兑换币
149
注册时间
2012-6-10
在线时间
66 小时
4#
发表于 2013-6-29 23:22:03 | 只看该作者
不启用fifo,读每个寄存器前读取相应标志位,转换完成后再读结果寄存器,或读序列转换标志然后把转换序列结果一次读出。
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
QQ
威望
164
贡献
75
兑换币
103
注册时间
2013-4-14
在线时间
33 小时
毕业学校
长沙理工大学
5#
 楼主| 发表于 2013-6-29 23:53:34 | 只看该作者
找到原因了,是芯片没有接地,大家不要犯我这种初级错误,谢谢大家
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
QQ
威望
164
贡献
75
兑换币
103
注册时间
2013-4-14
在线时间
33 小时
毕业学校
长沙理工大学
6#
 楼主| 发表于 2013-6-29 23:54:42 | 只看该作者
xinxiang 发表于 2013-6-29 17:45
不对吧,你这是右对齐,可是你的表达式取的值是左对齐,怎么会拿到值呢。你应该这样写ATD0DR0L

我是12位的,右对齐,直接把16位的值取出来就可以了
回复 支持 反对

使用道具 举报

13

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
759
威望
345
贡献
216
兑换币
157
注册时间
2012-11-28
在线时间
99 小时
7#
发表于 2013-7-8 09:09:40 | 只看该作者
xiyang588 发表于 2013-6-29 23:54
我是12位的,右对齐,直接把16位的值取出来就可以了

明白了。
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
460
威望
242
贡献
120
兑换币
149
注册时间
2013-1-21
在线时间
49 小时
毕业学校
西南石油大学
8#
发表于 2013-8-18 22:04:35 | 只看该作者
做车做车车车 发表于 2013-6-29 23:22
不启用fifo,读每个寄存器前读取相应标志位,转换完成后再读结果寄存器,或读序列转换标志然后把转换序列结 ...

四楼李菊福
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-6 04:57 , Processed in 0.155306 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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