TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430G2332: MSP430G233使用ADC10的问题。

Part Number:MSP430G2332

芯片:MSP430G2332。原理图如下,VCC直接接3.7V锂电池供电。

看到手册,通道11可以采样AVcc的二分之一电压。使用内部2.5V参考电压。

实际代码如下:

代码实际运行中,调整VCC电压至3.3V以下,甚至到2.5V了,也不能执行P2OUT |= (1 << 6); (P2OUT |= (1 << 6);已验证可以输出高低电平,驱动LED)。

想请教,ADC初始化和使用对吗?

主要是为了监控VCC的电压值,也就是锂电池供电电压。

另附全部代码。

#include <msp430.h>#include "stdint.h"
/*
 * @fn:        void InitSystemClock(void)
 * @brief:    初始化系统时钟
 * @para:    none
 * @return:    none
 * @comment:初始化系统时钟
 */
void InitSystemClock(void)
{
    /*配置DCO为1MHz*/
    DCOCTL = CALDCO_1MHZ;
    BCSCTL1 = CALBC1_1MHZ;
    /*配置SMCLK的时钟源为DCO*/
    BCSCTL2 &= ~SELS;
    /*SMCLK的分频系数置为1*/
    BCSCTL2 &= ~(DIVS0 | DIVS1);
}
/*
 * @fn:        void InitADC(void)
 * @brief:    初始化ADC
 * @para:    none
 * @return:    none
 * @comment:初始化ADC
 */
void InitADC(void)
{
    /*设置ADC时钟MCLK*/
    ADC10CTL1 |= ADC10SSEL_2;
    /*ADC 2分频*/
    ADC10CTL1 |= ADC10DIV_0;
    /*设置ADC基准源*/
    ADC10CTL0 |= SREF_1;
    /*设置ADC采样保持时间64CLK*/
    ADC10CTL0 |= ADC10SHT_3;
    /*设置ADC采样率200k*/
    ADC10CTL0 &= ~ADC10SR;
    /*ADC基准选择2.5V*/
    ADC10CTL0 |= REF2_5V;
    /*开启基准*/
    ADC10CTL0 |= REFON;
    /*选择ADC输入通道A0*/
    ADC10CTL1 |= INCH_11;
    /*允许A0模拟输入*/
    ADC10AE0 |= 1<<11;
    /*开启ADC*/
    ADC10CTL0 |= ADC10ON;
}
/*
 * @fn:        uint16_t GetADCValue(void)
 * @brief:    进行一次ADC转换并返回ADC转换结果
 * @para:    none
 * @return:    ADC转换结果
 * @comment:ADC转换结果为10bit,以uint16_t类型返回,低10位为有效数据
 */
uint16_t GetADCValue(void)
{
      /*开始转换*/
      ADC10CTL0 |= ADC10SC|ENC;
      /*等待转换完成*/
      while(ADC10CTL1&ADC10BUSY);
      /*返回结果*/
      return ADC10MEM;
}

#define WHITE_LED_ON            P2OUT &= ~(1 << 6)
#define WHITE_LED_OFF           P2OUT |= (1 << 6)
#define WHITE_LED_BLINK         P2OUT ^= (1 << 6)
#define WHITE_LED_STATE         (P2OUT & (1 << 6))

/*
 * main.c
 */
int main(void)
{
    float voltage = 0;
    uint16_t adcvalue = 0;
    WDTCTL = WDTPW | WDTHOLD;    // Stop watchdog timer
    InitSystemClock();

    InitADC();
    
    
    // 引脚初始化
    P1DIR = 0x1c;   // P1.2/P1.4 output other  input 2012-6-4
    P1REN = 0xe3;   // 2012-4-6
    P1OUT = 0xfb;   // 2012-4-6
    P1IE &= ~0x02;  // P1.1 interrupt disabled 2023-07-30
    P1IES |= 0x02;  // P1.1 negtive edge  2012-11-6
    P1IFG &= ~0x02; // P1.1 IFG cleared   2012-11-6
    P1SEL = 0x04;   // P1.2/P1.4 as timer0 CCR1/CCR2 2012-6-4
    P1SEL2 = 0x00;  //  2012-7-3
    P2DIR = 0xC0;   // P2.6/P2.7 output  2012-6-4
    P2REN = 0x3f;   // 2012-6-4??
    P2OUT = 0xff;   // 2012-7-3??
    P2SEL = 0x00;   // 2012-6-4
    P2SEL2 = 0x00;
    
    
    

    
    WHITE_LED_ON;
    
    while(1)
    {
        adcvalue = GetADCValue();
        voltage = adcvalue * 2.5 / 1023;
        voltage *= 2;
        
        if(voltage <= 3.3)
        {
          P2OUT |= (1 << 6);
        }
        else
        {
          P2OUT &= ~(1 << 6);
        }
        
    }
    return 0;
}

Ben Qin:

我查看下相关资料,稍后回复您。

,

user6303367:

好的,盼复。

,

Ben Qin:

你好,你的代码有没有参考TI的这些例程?你可以先拿着这些例程测试一下。

dev.ti.com/…/node

,

user6303367:

这个链接无法打开,显示403。

,

Ben Qin:

可以下载MSP430ware,在该路径下C:\ti\msp\MSP430Ware_3_80_14_01\examples\devices\MSP430G2xx\MSP430G2xx2_Code_Examples\C

,

user6303367:

好的,感谢!

,

Ben Qin:

不客气,这是下载链接:

www.ti.com.cn/…/MSPWARE

赞(0)
未经允许不得转载:TI中文支持网 » MSP430G2332: MSP430G233使用ADC10的问题。
分享到: 更多 (0)