打印

ADC的存储

[复制链接]
1793|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pinghpu|  楼主 | 2013-5-28 18:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
求教各位大侠:ADC采集5次后存放在数组里A[5]里,为什么第一次循环从A[1]开始存储,第二次循环从A[0]开始存储。第一次存储在A[1]/A[2]/A[3]/A[4],A[0]为0,之后存储为A[0]/A[1]/A[2]/A[3]/A[4],
这是什么原因?
沙发
grasswolfs| | 2013-5-28 18:34 | 只看该作者
你是说手册里面这样写的么?还是你自己这样应用的?

使用特权

评论回复
板凳
dzguang| | 2013-5-28 19:52 | 只看该作者
你自己看看自己的代码。

使用特权

评论回复
地板
mmuuss586| | 2013-5-28 21:29 | 只看该作者

使用特权

评论回复
5
pinghpu|  楼主 | 2013-5-28 22:00 | 只看该作者
grasswolfs 发表于 2013-5-28 18:34
你是说手册里面这样写的么?还是你自己这样应用的?

我这样子用,Samplesize=5;
Sampletim=0;
    for(;Sampletim<Samplesize;)
     {   if(flagdma==1)
         {  SampleEach[Sampletim][n]=temp;
            Sample[Sampletim]+=temp;
            flagdma=0;
         }
         if(flagtim2==1)
         {
           Sampletim=Sampletim+1;
           flagtim2=0;
         }
         
     }


下面是dma中断返回temp
  if(DMA_GetFlagStatus(DMA1_FLAG_TC1))
  {
    DMA_ClearITPendingBit(DMA1_IT_TC1);//清除标志位
   for(i=0;i<2;i++)
    {
     result+=ADC1_Value;
    }
     result=result>>1;
     temp =(float)(((unsigned long)result)*3317/4096);
     result=0;
     n++;
  }
  flagdma=1;

使用特权

评论回复
6
pinghpu|  楼主 | 2013-5-28 22:01 | 只看该作者
dzguang 发表于 2013-5-28 19:52
你自己看看自己的代码。

tim2定义了采样时长

使用特权

评论回复
7
pinghpu|  楼主 | 2013-5-28 22:14 | 只看该作者
mmuuss586 发表于 2013-5-28 21:29


这是第一次执行,Sample[0]为0,
这是第二次执行

使用特权

评论回复
8
grasswolfs| | 2013-5-29 09:28 | 只看该作者
pinghpu 发表于 2013-5-28 22:14
这是第一次执行,Sample[0]为0,
这是第二次执行

显然是第一次定时DMA中断早于AD采样DMA返回数据呗

使用特权

评论回复
9
pinghpu|  楼主 | 2013-5-30 09:36 | 只看该作者
grasswolfs 发表于 2013-5-29 09:28
显然是第一次定时DMA中断早于AD采样DMA返回数据呗

这个原因真没想到。怎么让DMA中断和AD同步呢?

使用特权

评论回复
10
grasswolfs| | 2013-5-30 11:05 | 只看该作者
pinghpu 发表于 2013-5-30 09:36
这个原因真没想到。怎么让DMA中断和AD同步呢?

不知道你TIM2定时是怎么写的,反正肯定是第一次flagtim2==1早于flagdma==1,增加tim2延时,或者看看初始化的时候是不是先开定时,后开AD的

使用特权

评论回复
11
pinghpu|  楼主 | 2013-5-30 15:36 | 只看该作者
grasswolfs 发表于 2013-5-30 11:05
不知道你TIM2定时是怎么写的,反正肯定是第一次flagtim2==1早于flagdma==1,增加tim2延时,或者看看初始 ...

tim2定时是2000us,AD的采样周期为6.75us,按道理不会flagtim2早于flagdma呀?

使用特权

评论回复
12
hkcj| | 2013-5-30 19:08 | 只看该作者
问题看来还是没有解决   楼主   帮你顶一个   看看别人的意见   应该会有高手帮忙解决的   顶起来

使用特权

评论回复
13
hkcj| | 2013-5-30 19:08 | 只看该作者
作为电子工程师   其实就是需要静下心来  慢慢调试   早晚能够出来的  相信自己   呵呵

使用特权

评论回复
14
grasswolfs| | 2013-5-31 11:00 | 只看该作者
你把这段注释掉试一下        if(flagtim2==1)
         {
           Sampletim=Sampletim+1;
           flagtim2=0;
         }

使用特权

评论回复
15
pinghpu|  楼主 | 2013-5-31 16:37 | 只看该作者
grasswolfs 发表于 2013-5-31 11:00
你把这段注释掉试一下        if(flagtim2==1)
         {
           Sampletim=Sampletim+1;

多谢指点。是定时器2 的设置,使能后就进入一次中断,Sampletim加1。
开始因为循环第二次就正常,我一直把问题放在DMA和ADC上,总找不到错误。
多谢多谢!

使用特权

评论回复
16
grasswolfs| | 2013-5-31 17:30 | 只看该作者
pinghpu 发表于 2013-5-31 16:37
多谢指点。是定时器2 的设置,使能后就进入一次中断,Sampletim加1。
开始因为循环第二次就正常,我一直 ...

嗯,其实这样的问题也是常见的,解决了就好~

使用特权

评论回复
17
hkcj| | 2013-5-31 21:06 | 只看该作者
问题应该解决了不  楼主  继续帮你顶一个

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

30

帖子

0

粉丝