打印

多通道采集是如何实现的

[复制链接]
487|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangchui|  楼主 | 2016-6-4 18:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
例2:用序列通道采样模式对通道A1、A5、A7采样,将采样结果在中断中读出,并将A1、A5、A7采样的结果分别存入ADC10_A1[]、ADC10_A5[]和ADC10_A7[]数组中。选择SMCLK无分频作为采样时钟,选择内部参考源1.5V,ADC10SC触发采样,采样时间设置为16个采样时钟周期。

unsigned int u=7;
unsigned int ADC_timers =0;
unsigned int ADC_Result[8];
unsigned int ADC10_A1[20];
unsigned int ADC10_A5[20];
unsigned int ADC10_A7[20];
void main ()
{WDTCTL=WDTPW+WDTHOLD;
ADC10CTL1 |= CONSEQ_1;
ADC10CTL0 |= SREF_1+REFON+ADC10IE;//选择内部参考源1.5V,开启AD允许中断
ADC10CTL0 |= ADC10SHT_2+MSC; //打开AD转换,过采样率设置为16个采样周期
ADC10CTL1 |= ADC10SSEL_3+SHS_0; //选择SMCLK无分频作为采样时钟,ADC10SC触发采集
ADC10CTL1 |=INCH_7; //最高通道设为通道7
ADC10CTL0 |= ADC10ON; //打开ADC10模块
ADC10AE0 |= 0xa1; //开启通道A1、A5、A7
__bis_SR_register(GIE); //开总中断
while(1)
{
ADC10CTL0 |=ENC+ADC10SC; //开始转换
for(int i=0;i<10000;i++); //加入延时等待ADC10一轮序列通道采样完成}}
/****************************************************************************
* 名 称:
* 功 能:AD采样中断,没完成一次采样中断一次,将采样值存入数组
AD_Result[10]然后将想要的采样值读出**********************************************

#pragma vector=ADC10_VECTOR__interrupt
void ADC10_ISR (void)
{
ADC_Result[u]=ADC10MEM;
u--;
if(u>8)
{
u=7;
ADC10_A7[AD_timers]=ADC_Result[7];
ADC10_A5[AD_timers]=ADC_Result[5];
ADC10_A1[AD_timers]=ADC_Result[1];
ADC_timers++;
}
}
*******************************************************************我想利用这段程序改成多通道(A1、3、5、7)各采集20次然后取平均,ADC_Result[u]=ADC10MEM这句程序是每当中断的时候依次采集A1、3、5、7通道,然后再储存到ADC_Result[u]他们相应的数组里么,不是的话多通道采集是如何实现的。

相关帖子

沙发
jlyuan| | 2016-6-4 18:37 | 只看该作者
建议楼主先看看教程:https://bbs.21ic.com/icview-332268-1-1.html

使用特权

评论回复
板凳
huangchui|  楼主 | 2016-6-4 18:41 | 只看该作者
里面没有我要的

使用特权

评论回复
地板
wuhany| | 2016-6-4 18:47 | 只看该作者
注意讲ADC10采样的部分

使用特权

评论回复
5
huangchui|  楼主 | 2016-6-4 18:49 | 只看该作者
嗯,我知道了,多谢啊

使用特权

评论回复
6
1988020566| | 2016-6-7 22:29 | 只看该作者
就是顺序读取寄存器地址。

使用特权

评论回复
7
1988020566| | 2016-6-7 22:30 | 只看该作者
这个也不难用,参考例程就行了。

使用特权

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

本版积分规则

918

主题

12323

帖子

4

粉丝