智能车制作

 找回密码
 注册

扫一扫,访问微社区

楼主: 穆旦阿斗
打印 上一主题 下一主题

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

  [复制链接]

29

主题

637

帖子

0

精华

常驻嘉宾

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

Rank: 8Rank: 8

积分
3136
威望
1664
贡献
630
兑换币
621
注册时间
2011-4-16
在线时间
421 小时
11#
发表于 2012-12-5 17:51:58 | 只看该作者
穆旦阿斗 发表于 2012-12-5 10:37
每次采样一个通道(通道i,i从0到7),从0通道依次采集到7通道,但是每次都是读取结果寄存器0的值,那岂不 ...

这个说起来比较复杂 每次新的转换序列开始后 结果都是从第0个寄存器开始放的 不是一一对应的 不一定7通道就在7号寄存器里 所以读0号寄存器,不过这个方法很不好 效率低,你可以写成一个转换序列连续转换多个通道的 那样速度快效率高
回复 支持 反对

使用道具 举报

29

主题

637

帖子

0

精华

常驻嘉宾

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

Rank: 8Rank: 8

积分
3136
威望
1664
贡献
630
兑换币
621
注册时间
2011-4-16
在线时间
421 小时
12#
发表于 2012-12-5 17:53:17 | 只看该作者
另外这个程序局部变量全局变量想到什么用什么 最好别学他 是典型的反面教材  代码效率也很差
回复 支持 反对

使用道具 举报

49

主题

3751

帖子

1

精华

顶级版主

Rank: 11Rank: 11Rank: 11Rank: 11

积分
27953

资源大师奖章论坛骨干奖章推广达人奖章优秀版主奖章热心会员奖章论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章技术大牛奖章

威望
10635
贡献
10966
兑换币
4566
注册时间
2010-11-23
在线时间
3176 小时
13#
发表于 2012-12-5 18:09:12 | 只看该作者
穆旦阿斗 发表于 2012-12-5 17:32
麻烦看下这个AD采集程序 初始化时7通道采样,我是想每个传感器采样11次,用一个二维数组存储采样值,但是 ...

楼上说的对。如果数组越界覆盖到重要数据程序会跑乱的。
回复 支持 反对

使用道具 举报

42

主题

1054

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3034

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

QQ
威望
1650
贡献
780
兑换币
625
注册时间
2012-7-6
在线时间
302 小时
14#
 楼主| 发表于 2012-12-5 22:00:33 | 只看该作者
fmadot 发表于 2012-12-5 17:53
另外这个程序局部变量全局变量想到什么用什么 最好别学他 是典型的反面教材  代码效率也很差

有收获!!还请麻烦看下这个AD采集程序 初始化时7通道采样,我是想每个传感器采样11次,用一个二维数组存储采样值,但是我不小心写了个data[m][7],照理说最大列编号只能到6啊。怎么编译没错? 然后我又改成一维数组试了一下就会出错的
void AD_centre()
{
     #define N 11    //采集11次
     uint data[N][7]={0}; //N行7列  //7个传感器
     uint data_max=0;
     uint m,n;
     for(m=0;m<N;m++)
     {   
           AD_init( );               //重新调用ADC初始化程序,防止干扰
           while( !ATD0STAT0_SCF );  //等待转换结束
           data[m][0] = ATD0DR0;           
           data[m][1] = ATD0DR1;
           data[m][2] = ATD0DR2;
           data[m][3] = ATD0DR3;
           data[m][4] = ATD0DR4;
           data[m][5] = ATD0DR5;
           data[m][6] = ATD0DR6;
     }
.....
}
     另外,省略号部分我是先每列冒泡排序,也就是每个传感器的采样值排序。不是采样了11次嘛,然后选第6行(中值)作为每个传感器的采样值,哪个传感器的采样值最大就说明那个传感器离中心最近。
麻烦看看这个方法可以不???  新手啊,车还没开始做,先写程序,望指点!!!  小弟先行谢过
回复 支持 反对

使用道具 举报

28

主题

644

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5607

优秀会员奖章活跃会员奖章在线王奖章论坛元老奖章

威望
2272
贡献
2099
兑换币
346
注册时间
2011-11-15
在线时间
618 小时
15#
发表于 2012-12-5 22:01:45 | 只看该作者
拿分了
回复 支持 反对

使用道具 举报

29

主题

637

帖子

0

精华

常驻嘉宾

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

Rank: 8Rank: 8

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

使用道具 举报

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
干嘛冒泡排序。。。直接找个最大的就好了啊。。。不放心你平均一下 也比冒泡快。。。这里觉得没必要冒泡  另 ...

谢谢
回复 支持 反对

使用道具 举报

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,依此类推的呢?????
回复 支持 反对

使用道具 举报

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来判断。
回复 支持 反对

使用道具 举报

0

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 13:45 , Processed in 0.190600 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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