6912|4

29

帖子

1

TA的资源

一粒金砂(初级)

楼主
 

关于ADC10多通道序列转换 求大神指点 [复制链接]

想实现两个通道的AD连续转换,不会DTC,想用自己编程实现但AD转换结果只有一个,而且多通道序列转换时只能选择最高的通道,自己刚学MSP430,说的不是很清楚,希望大家指导一二,不胜感激!

最新回复

本帖最后由 qinkaiabc 于 2014-4-29 08:50 编辑 MSP430g2553因为只有一个ADCMEM,不像其他系列有多个。所以在多通道同时采样的时候,必须要使用DTC。 unsigned int Control_Val[4] = {0};存储数据的地址 /*A0 A3两通道序列采样*/ void Init_ADC10(void) { ADC10CTL1 = INCH_3 + CONSEQ_1;// A3/A0,基本的配置 ADC10CTL0 = SREF_0 + ADC10SHT_2 + MSC + ADC10ON + ADC10IE; __delay_cycles(30); ADC10AE0 |= BIT0 + BIT3;// P1.0,P1.3 ADC10 option select ADC10DTC0 |= ADC10CT;//ADC10 continuous transfer使能DTC传输 ADC10DTC1 = 0x04; // 2 conversions ADC10CTL0 &= ~ENC;//关闭ADC10 } void adc10_Start(void) { ADC10CTL0 |= ENC + ADC10SC;//Enable conversion,Start conversion } void adc10_Stop(void) { ADC10CTL0 &= ~ENC;//ADC10 disabled } adc10_Start(); while(ADC10CTL1 & BUSY); ADC10SA = (unsigned int)Control_Val;// Data buffer start采样的结果存储到你定义的地址中,这里是数组的地址 adc10_Stop(); 上面是ADC10部分的代码。 首先要明白,当多通道采样时,先采高的通道,再采低的通道。即A3的结果存储到Control_Val[0],A0的结果存储到Control_Val[3],由于A1、A2没有使能,所以在A2、A1的结果分别存储到Control_Val[1],Control_Val[2]的是不定的。存储顺数也是按照这个方式存储的。 跟详细的解释请看这个http://blog.sina.com.cn/s/blog_6cd2030b01017x74.html   详情 回复 发表于 2014-4-29 16:46
 
点赞 关注

回复
举报

2781

帖子

417

TA的资源

五彩晶圆(中级)

沙发
 
本帖最后由 qinkaiabc 于 2014-4-29 08:50 编辑

MSP430g2553因为只有一个ADCMEM,不像其他系列有多个。所以在多通道同时采样的时候,必须要使用DTC。

unsigned int Control_Val[4] = {0};存储数据的地址

/*A0 A3两通道序列采样*/
void Init_ADC10(void)
{
ADC10CTL1 = INCH_3 + CONSEQ_1;// A3/A0,基本的配置
ADC10CTL0 = SREF_0 + ADC10SHT_2 + MSC + ADC10ON + ADC10IE;
__delay_cycles(30);
ADC10AE0 |= BIT0 + BIT3;// P1.0,P1.3 ADC10 option select
ADC10DTC0 |= ADC10CT;//ADC10 continuous transfer使能DTC传输
ADC10DTC1 = 0x04; // 2 conversions
ADC10CTL0 &= ~ENC;//关闭ADC10
}

void adc10_Start(void)
{
ADC10CTL0 |= ENC + ADC10SC;//Enable conversion,Start conversion
}

void adc10_Stop(void)
{
ADC10CTL0 &= ~ENC;//ADC10 disabled
}


adc10_Start();
while(ADC10CTL1 & BUSY);
ADC10SA = (unsigned int)Control_Val;// Data buffer start采样的结果存储到你定义的地址中,这里是数组的地址
adc10_Stop();


上面是ADC10部分的代码。

首先要明白,当多通道采样时,先采高的通道,再采低的通道。即A3的结果存储到Control_Val[0],A0的结果存储到Control_Val[3],由于A1、A2没有使能,所以在A2、A1的结果分别存储到Control_Val[1],Control_Val[2]的是不定的。存储顺数也是按照这个方式存储的。




跟详细的解释请看这个http://blog.sina.com.cn/s/blog_6cd2030b01017x74.html

点评

谢谢你! 我再弱弱的问一下,ADC中断什么时候触发,是每个通道转换完成还是一次序列转换完成啊? ADC10DTC1 = 0x04; // 2 conversions也就是转换两次,那么是完成两次转换就触发中断? “A3的结果存储到Control_V  详情 回复 发表于 2014-4-30 15:32
 
个人签名
 

回复

29

帖子

1

TA的资源

一粒金砂(初级)

板凳
 
qinkaiabc 发表于 2014-4-29 16:46
MSP430g2553因为只有一个ADCMEM,不像其他系列有多个。所以在多通道同时采样的时候,必须要使用DTC。

un ...

谢谢你! 我再弱弱的问一下,ADC中断什么时候触发,是每个通道转换完成还是一次序列转换完成啊?
ADC10DTC1 = 0x04; // 2 conversions也就是转换两次,那么是完成两次转换就触发中断?

“A3的结果存储到Control_Val[0],A0的结果存储到Control_Val[3],由于A1、A2没有使能,所以在A2、A1的结果分别存储到Control_Val[1],Control_Val[2]的是不定的”而unsigned int Control_Val[4] = {0};存储数据的地址只有四个,而转换两次不是需要八个么?     
   我看到你的博客了写的真好,我看到貌似你控制液晶就需要两根线,用的那块怎么做到的啊,谢谢您!

 
 
 

回复

29

帖子

1

TA的资源

一粒金砂(初级)

4
 
再回答一下啊
 
 
 

回复

29

帖子

1

TA的资源

一粒金砂(初级)

5
 
When the
DTC is not used (ADC10DTC1 = 0), ADC10IFG is set when conversion results are loaded into
ADC10MEM. When DTC is used (ADC10DTC1 > 0), ADC10IFG is set when a block transfer completes
and the internal transfer counter n = 0. If both the ADC10IE and the GIE bits are set, then the ADC10IFG
flag generates an interrupt request. The ADC10IFG flag is automatically reset when the interrupt request
is serviced, or it may be reset by software.  我懂中断什么时候触发了
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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