9729|13

23

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于MSP430F2XX系列ADC10的设置问题 [复制链接]

假设用外部电压作为参考电压并且要采集A0-A2,A3为VREF-,A4为VeREF+则:
ADC10CTL0  =  SREF_7 +。。。+;
那么模拟输入使能ADC10AE0是不是应该写为:
ADC10AE0 = 0x1F
呢?

最新回复

不错  详情 回复 发表于 2012-7-27 20:00
 
点赞 关注(1)

回复
举报

400

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
使能A0采样正确的代码应该是
ADC10AE0 = 0x01;
请参见Datasheet关于ADC10AE0的描述:
ADC10AE0
ADC10 analog enable. These bits enable the corresponding pin for analog
input. BIT0 corresponds to A0, BIT1 corresponds to A1, etc.
0 Analog input disabled
1 Analog input enabled、



QQ:906411450
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 Triton.zhang 的帖子

谢谢,:rose: :rose:
您说的这个我知道,可能我没表达明白,
这么说吧,P2.0-P2.7分别是A0-A7,现在用外部参考电压,也就是P2.3和P2.4,模拟使能是不是也要赋值?
上面说的A0-A2我也要用。这样一来我的ADC10AE0是不是应该等于0x1F?
还有一个问题,INCHx要不要对外部参考VeREF+/-进行设置呢?还是说只要设置好SREF_7,外部参考电压就无需转换了?
 
 
 

回复

66

帖子

4

TA的资源

一粒金砂(中级)

4
 
是如你所说的吧 ,还有了 就是P2SEL也要选择0X1F 第二功能! INCHx是选择要测量信号的通道吧!SREF_7我搜了下没有这个寄存器!

点评

这个真不用  详情 回复 发表于 2012-7-27 19:58
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 shirl 的帖子

在ADC10CTL0 中的后三位SREF0,1,2.不是寄存器。
灰常谢谢!试试看
 
 
 

回复

400

帖子

0

TA的资源

五彩晶圆(中级)

6
 

纠正下楼主的一个错误.
1.  MSP430F2XX系列的P2端口和ADC的端口有复用,一旦设置ADC10AE0.Y为高,就会切换该管脚为模拟输入,而不管P2SEL.x是什么值。

2. MSP430的参考可以由内部产生,也可以用外部的参考,设置 SREF_7就可以使能外部的正负参考.


3. p2.0-p2.7对应A0-A7的输入和参考。如果你既要a0-a2,又要用外部参考,就需要设置ADC10AE0 = 0x1F;楼主下次遇到这类问题可以参见MSP430的数据手册,以P2.3为例:

表中说得很清楚.

 

3. MCU虽然支持很多ADC采样通道,但实际上内部只有一个ADC模块,所以在ADC采样前,你需要选择是采样那个ADC的通道。这个由INCHx来完成。

4. 最后总结一下,如果楼主要使用外部参考来采样ADC,可以参见如下操作流程:

   1) 切换管脚的模拟功能,包括ADC的输入通道和参考对应的管脚

   2)使能外部参考,通过配置SREF来实现

 3)  ADC采样前通过设置INCHx来确定具体采样某个端口

  

 

Triton.zhang

qq:906411450

点评

不错  详情 回复 发表于 2012-7-27 20:00
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 6楼 Triton.zhang 的帖子

说的很好!强烈赞成!加QQ了,希望同意哈!
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

8
 
勤学苦练好同志,乐于助人活同志!
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

9
 

楼主,DS看的很细心啊,其实还可以采用 MSP430F2XX ADC10的DTC(数据传输控制)模块,当序列转换启动时,可以将采样值自动存入所需要的地址中(数组),具体可参考TI例程.

 
 
 

回复

400

帖子

0

TA的资源

五彩晶圆(中级)

10
 
给一个DTU操作的例程给你参考
//******************************************************************************
//  MSP430F21x2 Demo - ADC10, DTC Sample A0 64x, 1.5V, Repeat Single, DCO
//
//  Description: Use DTC to sample A0 64 times with reference to internal 1.5v.
//  Vref Software writes to ADC10SC to trigger sample burst. In Mainloop MSP430
//  waits in LPM0 to save power until ADC10 conversion complete, ADC10_ISR(DTC)
//  will force exit from LPM0 in Mainloop on reti. ADC10 internal
//  oscillator times sample period (16x) and conversion (13x). DTC transfers
//  conversion code to RAM 200h - 280h. P1.0 set at start of conversion burst,
//  reset on completion.
//
//                MSP430F21x2
//             -----------------
//         /|\|              XIN|-
//          | |                 |
//          --|RST          XOUT|-
//            |                 |
//        >---|P2.0/A0      P1.0|-->LED
//
//  A. Dannenberg
//  Texas Instruments Inc.
//  December 2007
//  Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.41A
//******************************************************************************
#include "msp430x21x2.h"

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  ADC10CTL1 = CONSEQ_2;                     // Repeat single channel
  ADC10CTL0 = SREF_1 + ADC10SHT_2 + MSC + REFON + ADC10ON + ADC10IE;
  TACCR0 = 30;                              // Delay to allow Ref to settle
  TACCTL0 |= CCIE;                          // Compare-mode interrupt
  TACTL = TASSEL_2 + MC_1;                  // TACLK = SMCLK, Up mode
  __bis_SR_register(CPUOFF + GIE);          // LPM0, TA0_ISR will force exit
  TACCTL0 &= ~CCIE;                         // Disable timer Interrupt
  ADC10DTC1 = 0x40;                         // 64 conversions
  ADC10AE0 |= 0x01;                         // P2.0 ADC option select
  P1DIR |= 0x01;                            // Set P1.0 output

  for (;;)
  {
    ADC10CTL0 &= ~ENC;
    while (ADC10CTL1 & BUSY);               // Wait if ADC10 core is active
    ADC10SA = 0x200;                        // Data buffer start
    P1OUT |= 0x01;                          // Set P1.0 LED on
    ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
    __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
    P1OUT &= ~0x01;                         // Clear P1.0 LED off
  }
}

// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
  __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)
}

#pragma vector=TIMER0_A0_VECTOR
__interrupt void TA0_ISR(void)
{
  TACTL = 0;                                // Clear Timer_A control registers
  __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)
}
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 9楼 Aaron-meng 的帖子

我也很想用DTC模块啊,就是ADC10SA=0x200之后,数据处理和清除都不知道如何操作。
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

12
 

回复 10楼 Triton.zhang 的帖子

这个P2SEL 不设置不知道可不可以,但是我设置了是可以的。
 
 
 

回复

132

帖子

0

TA的资源

一粒金砂(中级)

13
 

回复 4楼 shirl 的帖子

这个真不用
 
 
 

回复

132

帖子

0

TA的资源

一粒金砂(中级)

14
 

回复 6楼 Triton.zhang 的帖子

不错
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表