This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430G2553:MSP430G2553:ADC 配置问题

Guru**** 2387080 points
Other Parts Discussed in Thread: MSP430G2553
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/933579/msp430g2553-msp430g2553-adc-configuration-issue

器件型号:MSP430G2553

您好!

我已经参考了用于配置 msp430g2553 ADC10的示例程序、并为我的应用推断了以下代码:

我的目标是对最大采样频率为100Hz 的压力传感器进行采样。  

1) 1)但是、我无法理解如何在 MSP430中配置采样率。  

2) 2)此外、我已启用中断、但在调试时、不会请求中断功能、因此 P2.1上的 LED 不会亮起。  

我测量了配置为 ADC 通道的 P1.0处的电压、测量值为0.5伏。 将其转换为数字值,我应该读取256。  

请指导我配置 ADC10以及我应该进行哪些更正。

谢谢、

int 值= 0;
//
// uint16_t avg_adc = 0;

//函数原型
void ADC_Setup();
void adc_sam ();
#pragma vector=ADC10_vector

void main()

WDTCTL = WDTPW + WDTHOLD;//停止 WDT


BCSCTL1 = CALBC1_1MHz;//将 DCO 设置为1MHz
DCOCTL = CALDCO_1MHz;
BCSCTL2|=(DIVS_3);//smclk=dc0=1MHz,SMCLK/8

P2DIR |= BIT1;
P2OUT &=~BIT1;//将 P2.1配置为输出


// adc_setup 的 fucntion 调用

while (1)

ADC_Setup();
_DELAY_CYCLES (1000);
ADC_SAM();//针对 ADC_SAMP 的函数调用
//添加所有采样数据并除以10以得出平均值


// avg_adc =((adc[0]+adc[1]+adc[2]+adc[3]+adc[4]+adc[5]+adc[6]+adc[7]+adc[8]+adc[9])/10);


// ADC10中断服务例程

_interrupt void ADC10_ISR (void)

_BIC_SR_REGISTER_ON_EXIT (CPUOFF);//从0 (SR)清除 CPUOFF 位
值=ADC10MEM;
如果(值< 200)// ADC10MEM = A1 > 0.2V?
P2OUT &=~BIT1;//清除 P2.0 LED 关闭
其他
P1OUT |= BIT1;//将 P2.0 LED 设置为打开


// ADC 设置功能
void ADC_Setup()

ADC10CTL1 = CONSEQ_0 + INCH_0 + SHS0 + ADC10DIV_7 + ADC10SSEL_3;;//重复单通道 A0、+ ADC10SC + CLK/5 + SMCLK
ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE + REFON + ADC10SR +~Ω(REF2_5V)+SREF_0;//采样保持时间+ ADC10打开+中断使能
ADC10DTC1 = 0x00;// 0转换
ADC10AE0 |= 0x01;// P1.0 ADC 选项选择
_enable_interrupt ();
_bis_SR_register (GIE);//低功耗模式0、ADC10_ISR

// ADC 采样转换函数
void adc_sam ()

ADC10CTL0 &=~ENC;//禁用转换
while (ADC10CTL1 & ADC10BUSY);//如果 ADC10忙则等待
//将数据传输到下一个数组(DTC 自动递增地址)
ADC10CTL0 |= ENC + ADC10SC;//启用转换和转换启动
_bis_SR_register (GIE+CPUOFF);//低功耗模式0、ADC10_ISR

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    器件型号:MSP430G2553

    您好!

    我已经参考了用于配置 msp430g2553 ADC10的示例程序、并为我的应用推断了以下代码:

    我的目标是对最大采样频率为100Hz 的压力传感器进行采样。  

    1) 1)但是、我无法理解如何在 MSP430中配置采样率。  

    2) 2)此外、我已启用中断、但在调试时、不会请求中断功能、因此 P2.1上的 LED 不会亮起。  

    我测量了配置为 ADC 通道的 P1.0处的电压、测量值为0.5伏。 将其转换为数字值,我应该读取256。  

    请指导我配置 ADC10以及我应该进行哪些更正。

    谢谢、

    int 值= 0;
    //
    // uint16_t avg_adc = 0;

    //函数原型
    void ADC_Setup();
    void adc_sam ();
    #pragma vector=ADC10_vector

    void main()

    WDTCTL = WDTPW + WDTHOLD;//停止 WDT


    BCSCTL1 = CALBC1_1MHz;//将 DCO 设置为1MHz
    DCOCTL = CALDCO_1MHz;
    BCSCTL2|=(DIVS_3);//smclk=dc0=1MHz,SMCLK/8

    P2DIR |= BIT1;
    P2OUT &=~BIT1;//将 P2.1配置为输出


    // adc_setup 的 fucntion 调用

    while (1)

    ADC_Setup();
    _DELAY_CYCLES (1000);
    ADC_SAM();//针对 ADC_SAMP 的函数调用
    //添加所有采样数据并除以10以得出平均值


    // avg_adc =((adc[0]+adc[1]+adc[2]+adc[3]+adc[4]+adc[5]+adc[6]+adc[7]+adc[8]+adc[9])/10);


    // ADC10中断服务例程

    _interrupt void ADC10_ISR (void)

    _BIC_SR_REGISTER_ON_EXIT (CPUOFF);//从0 (SR)清除 CPUOFF 位
    值=ADC10MEM;
    如果(值< 200)// ADC10MEM = A1 > 0.2V?
    P2OUT &=~BIT1;//清除 P2.0 LED 关闭
    其他
    P1OUT |= BIT1;//将 P2.0 LED 设置为打开


    // ADC 设置功能
    void ADC_Setup()

    ADC10CTL1 = CONSEQ_0 + INCH_0 + SHS0 + ADC10DIV_7 + ADC10SSEL_3;;//重复单通道 A0、+ ADC10SC + CLK/5 + SMCLK
    ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE + REFON + ADC10SR +~Ω(REF2_5V)+SREF_0;//采样保持时间+ ADC10打开+中断使能
    ADC10DTC1 = 0x00;// 0转换
    ADC10AE0 |= 0x01;// P1.0 ADC 选项选择
    _enable_interrupt ();
    _bis_SR_register (GIE);//低功耗模式0、ADC10_ISR

    // ADC 采样转换函数
    void adc_sam ()

    ADC10CTL0 &=~ENC;//禁用转换
    while (ADC10CTL1 & ADC10BUSY);//如果 ADC10忙则等待
    //将数据传输到下一个数组(DTC 自动递增地址)
    ADC10CTL0 |= ENC + ADC10SC;//启用转换和转换启动
    _bis_SR_register (GIE+CPUOFF);//低功耗模式0、ADC10_ISR

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您在 ADC10MEM 中获得了什么价值?

    >ADC10CTL1 = CONSEQ_0 + INCH_0 + SHS0 + ADC10DIV_7 + ADC10SSEL_3;;

    请注意:SHS0设置 SHSHs=1 (TA0.1触发器)。 我怀疑您希望 SHS_0设置 SHS=0。

    >ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE + REFON + ADC10SR +~Ω(REF2_5V)+SREF_0;

    "~(REF2_5V)"将导致各种问题。 如果要设置 REF2_5V=0,只需省略它,或者(我经常做的是)使用“(0*REF2_5V)"。

    SREF_0使用 Vcc/VSS 作为基准、因此我不太确定您为何要对1.5/2.5V 基准执行任何操作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    ADC10MEM 中有0。  

    我已更正 SHS_0。 感谢您的指出。  

    我正在尝试 对压力传感器的输出进行采样。 传感器输出范围介于0.5V 至1.5V 之间。 关于这一点,我的 SREF 应该是 SREF_0还是 SREF_1 ?

    谢谢你  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我建议 SREF_1。 如果可以、您应该使用基准、而不是 Vcc、因为 Vcc 往往噪声更大。 这通常适用于 ADC、而不仅仅是 MSP430上的 ADC。

    您可能可以在1.5V 时使用基准电压、这将为您提供更高的分辨率。 如果您认为传感器有时会超过1.5V、您可能希望基准电压为2.5V。 超过基准电压不会伤害任何东西、您只会得到枯燥的结果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bruce、  

    非常感谢您的解释。 SREF_1和 SHS_0为我解决了问题。