智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 6788|回复: 23
打印 上一主题 下一主题

[咨询] AD单通道连续采样问题

  [复制链接]

42

主题

1054

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3034

优秀会员奖章活跃会员奖章

QQ
威望
1650
贡献
780
兑换币
625
注册时间
2012-7-6
在线时间
302 小时
跳转到指定楼层
1#
发表于 2012-12-4 22:45:52 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
我想问一下我看往届的报告,采用AD单通道实现对8个传感器的采样。下面是AD部分的程序,他是用dara[0~7]来存储8个传感器的采样值,但是在AD采集时都是用  “while(!ATD0STAT0_SCF); ad_result=ATD0DR0;”这句话来判断转换是否结束,以及保存结果。我不明白一直读ATD0DR0中的值不只是0通道转换的值么??1~7通道的值能从ATD0DR0读出??   难道在单通道下任意读一个结果寄存器???  求高手啊!!!
/********************** AD初始化**********************************/
void ad_init (void)
      {
         ATD0CTL1 = 0x00;              //00为转换精度  无外部触发  40=12位  20=10位 00=8位
         ATD0CTL2 = 0x40;              //禁止外部触发, 中断禁止
         ATD0CTL3 = 0x88;              //右对齐无符号,每序列转换1次(6543-8421), No FIFO, Freeze模式下继续转
         ATD0CTL4 = 0x63;              //765:采样时间为10个AD时钟周期(000=4 001=6 010=8 100=12 101=16 110=20)
                                       //(moren 011=10)prs(5:0)ATDClock=[BusClock*0.5]/[PRS+1]
         ATD0CTL5 = 0x20|i;            //设置采样通道  i通道导通
         ATD0DIEN = 0x00;              //禁止数字信号输入
      }
/********************** AD collect ***************************/
int ad_convent(void)                        //return v-pp of sensor[i];
    {
       int ad_result,max=0,min=256;// give your owm times ;
       char n=0;
       for(n=0;n<16;n++)                    //the times of the convent, the more you give the ans  is more corrct;
         {
           ad_init();
           while(!ATD0STAT0_SCF);           //waiting changed;
           ad_result=ATD0DR0;
           if(ad_result>max) max=ad_result;
           if(ad_result<min) min=ad_result;
         }
       return (max-min);  
    }
/***********************Digital filter*************************/
void ad_answer(void)
    {
       for(i=0;i<8;i++)              //give the solutions to the data[i]
         {
           data[i]=ad_convent();
         }
    }

8

主题

324

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1209

活跃会员奖章优秀会员奖章

威望
528
贡献
373
兑换币
291
注册时间
2013-7-24
在线时间
154 小时
24#
发表于 2013-8-25 18:24:09 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
489
威望
237
贡献
178
兑换币
157
注册时间
2013-4-5
在线时间
37 小时
毕业学校
滨州学院
23#
发表于 2013-8-22 18:14:01 | 只看该作者
穆旦阿斗 发表于 2013-8-22 16:48
嗯 嗯 现在懂了的,以前是刚从51过度,有点困难

嗯,相互学习
回复 支持 反对

使用道具 举报

42

主题

1054

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3034

优秀会员奖章活跃会员奖章

QQ
威望
1650
贡献
780
兑换币
625
注册时间
2012-7-6
在线时间
302 小时
22#
 楼主| 发表于 2013-8-22 16:48:10 | 只看该作者
DZH 发表于 2013-8-22 10:25
因为每次的转换结果都存储在AD0这个结果寄存器中了。。。

嗯 嗯 现在懂了的,以前是刚从51过度,有点困难
回复 支持 反对

使用道具 举报

42

主题

1054

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3034

优秀会员奖章活跃会员奖章

QQ
威望
1650
贡献
780
兑换币
625
注册时间
2012-7-6
在线时间
302 小时
21#
 楼主| 发表于 2013-8-22 16:46:49 | 只看该作者
风中柳 发表于 2013-2-23 14:47
不知你这个问题解决了么?我现在也遇到这样的问题,如果解决了,麻烦说一下。。。是不是AD模块哪个通道先 ...

这个要看你的设置了,fifo位置0是这样的
回复 支持 反对

使用道具 举报

0

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
489
威望
237
贡献
178
兑换币
157
注册时间
2013-4-5
在线时间
37 小时
毕业学校
滨州学院
20#
发表于 2013-8-22 10:25:43 | 只看该作者
因为每次的转换结果都存储在AD0这个结果寄存器中了。。。
回复 支持 反对

使用道具 举报

0

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
416
威望
242
贡献
106
兑换币
38
注册时间
2012-5-10
在线时间
34 小时
19#
发表于 2013-3-18 22:42:59 | 只看该作者
AD转换的结果寄存器有两个,分别是,ATD0STAT0和ATD0STAT2.如果要1-7通道分别判断的话可以用ATD0STAT2中的CCF(n),n就是1-7,也可以干脆就笼统的用ATD0STAT0中的CCF来判断。
回复 支持 反对

使用道具 举报

4

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
威望
334
贡献
63
兑换币
161
注册时间
2012-9-9
在线时间
49 小时
18#
发表于 2013-2-23 14:47:12 | 只看该作者
穆旦阿斗 发表于 2012-12-5 17:32
麻烦看下这个AD采集程序 初始化时7通道采样,我是想每个传感器采样11次,用一个二维数组存储采样值,但是 ...

不知你这个问题解决了么?我现在也遇到这样的问题,如果解决了,麻烦说一下。。。是不是AD模块哪个通道先采集完数据就先放在寄存器0,往后哪个采集后就放到寄存器1,依此类推的呢?????
回复 支持 反对

使用道具 举报

42

主题

1054

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3034

优秀会员奖章活跃会员奖章

QQ
威望
1650
贡献
780
兑换币
625
注册时间
2012-7-6
在线时间
302 小时
17#
 楼主| 发表于 2012-12-6 15:15:58 | 只看该作者
fmadot 发表于 2012-12-5 23:25
干嘛冒泡排序。。。直接找个最大的就好了啊。。。不放心你平均一下 也比冒泡快。。。这里觉得没必要冒泡  另 ...

谢谢
回复 支持 反对

使用道具 举报

29

主题

637

帖子

0

精华

常驻嘉宾

我是孤独的赛车手 车手是不需要女人的

Rank: 8Rank: 8

积分
3136
威望
1664
贡献
630
兑换币
621
注册时间
2011-4-16
在线时间
421 小时
16#
发表于 2012-12-5 23:25:31 | 只看该作者
干嘛冒泡排序。。。直接找个最大的就好了啊。。。不放心你平均一下 也比冒泡快。。。这里觉得没必要冒泡  另外二位数组能不能以一维方式取我忘记了。。。应该是可以的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 00:54 , Processed in 0.052746 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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