5501|13

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请问,用2407如何实现每进一次中断进行连续多次A/D采样? [复制链接]

请问,用2407如何实现每进一次中断进行连续多次A/D采样,要求这多次采样的结果保证都取走。

是否可以通过判断相关寄存器的采样

最新回复

你可以不用中断,直接软启动AD转换8次。  详情 回复 发表于 2007-12-22 01:37
 
点赞 关注

回复
举报

83

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你是只采一路还是采样多路信号?
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
只采一路信号
 
 
 

回复

52

帖子

0

TA的资源

一粒金砂(初级)

4
 
你要采样N次就把MAXCONV设成N-1
比如你要采样AD1,采8次,你可以把CHSELSEQ1=0X1111,
把CHSELSEQ2=0X1111.判断转换结束后,
从RESULT0~7中把数据读出来就可以了.
如果采样多于8次,还要设置ADCTRL1的位SEQ ACSC为1,
设成极连模式.
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 
如果是多路采样,并要求一次中断8次采样怎么设置?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

6
 
你要说明哪8路.
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

7
 
刚才看错了,你要说明哪几路.
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

8
 
举个简单的例子,采样三路,AD0,AD1,AD2.
MAXCONV=2;
CHSELSEQ1=0X0210,
在中断里,软件启动8次AD转换,每次取出结果后
就重新启动AD转换.
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
我现在采集了8路,然后想再在一个中断里转换8次。
你不是说那个
  要采样AD1,采8次,你可以把CHSELSEQ1=0X1111,
   把CHSELSEQ2=0X1111.判断转换结束后,
   从RESULT0~7中把数据读出来就可以了.

现在要采集8路的话,
           *MAX_CONV=0x07;                 
        *CHSELSEQ1=0x3210;              //
        *CHSELSEQ2=0x7654;         

那这个*CHSELSEQ1怎么设?




就是不明白那个中断里软件启动8次转换,怎么实现,

还有每一次的转换的值不是都在RESULT里面,
我现在的时result0对应0通道,那样是不是result0对应第一次转换的结果??


万分感谢~~

有例程最好。。。。


[ 本贴由 duxingxia 于 2006-12-21 11:33 AM 最后编辑 ]
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

10
 
         *MAXCONV=0x07;                 
        *CHSELSEQ1=0x3210;              //
        *CHSELSEQ2=0x7654;  
软件启动AD转换可以这样做:
        *ADCTRL2=0X4000;
        *ADCTRL2=0X2000;      //ADCTRL2的13位是启动SERQ1转换位
      AD转换结束后,读出结果,在启动AD转换.
         连续8次,就可以搞定了.
        照上面的设置,每次转换完,
RESULT0存AD0,RESULT1存AD1,依次类推.
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

11
 


我在中断中作一次采样的时候,结果还算正常,但是转换8次再平均的时候,

发现都不准确了,是不是我在处理数据的时候,有问题???

麻烦你再帮我看看~~

仅作一次采样的时候:
void interrupt int1(void)
{
        unsigned int jj;
    *EVBIFRB = *EVBIFRB & 0x0001;
   
        switch(*PIVR)
        {
                case 0x0004:                /*ADC interrupt*/
                {
                        asm(\"        clrc SXM\";
                        for(jj=0;jj<8;jj++)
                        adc_result[jj]=*(RESULT0+jj)>>6;
                                break;
                 }
                default:
                        ;
        }
                *ADCTRL2|=0x4200;         
asm(\" CLRC INTM\";
}

8通道8次采样:
                       。。。。
                {
                        asm(\"        clrc SXM\";
                for(i=0;i<8;i++)
                          
                    {
                         *ADCTRL2&=0XBFFF;
                                        *ADCTRL2|=0X2000;      
                        for(j=0;j<8;j++)
                        adc_res[i,j]=*(RESULT0+j)>>6;
                     }                       
                                            break;
                }
                default:
                        ;
        }
  
    for(m=0;m<8;m++)
    {
     adc_result[0]=adc_result[0]+adc_res[m,0];
     adc_result[1]=adc_result[1]+adc_res[m,1];
     adc_result[2]=adc_result[2]+adc_res[m,2];
     adc_result[3]=adc_result[3]+adc_res[m,3];
     adc_result[4]=adc_result[4]+adc_res[m,4];
     adc_result[5]=adc_result[5]+adc_res[m,5];
     adc_result[6]=adc_result[6]+adc_res[m,6];
     adc_result[7]=adc_result[7]+adc_res[m,7];
     }
   
    for(n=0;n<8;n++)
   
    adc_result[n]=adc_result[n]>>3;
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

12
 
你的程序没注释,有点难懂.
不过感觉你用的AD中断,在一次中断里面,
对8个通道取了8次数.可是一次中断只是8个通道
采样完了一次.你把结果读出来一次,再读时我不知道
值会不会改变.但是你这种做法应该是错的.
应该是中断8次,取8次数再平均.
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 


我这样做作AD的中断是不是很占CPU呢~

是不是应该直接循环AD8次,而不用中断,
或者在一个定时器周期中断中循环AD8次
这样的话就不用8次中断,判别为8次中断并且每次再读结果好实现吗?

因为在程序中还有别的中断,不过我设的AD中断级高。



 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

14
 
你可以不用中断,直接软启动AD转换8次。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表