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.

[参考译文] MSP430FR4133:从 A9 ADC 引脚读取时出现问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1324735/msp430fr4133-issues-reading-from-a9-adc-pin

器件型号:MSP430FR4133
主题中讨论的其他器件:MSP-EXP430FR2311

大家好!  

我正在尝试通过测量 A9的电压输入来设计电压表。 我正在使用 P1.0和 P4.0 LED 来确定测量的电压值。 如果低于阈值、P4.0应亮起、如果高于阈值、P1.0应亮起。 执行我的代码时、两个 LED 在启动时都亮起-根据我的 IF 语句、这不应该发生。 此外、当我使用电路板上的3.3V 源来测试 A9引脚读数时、MSP430会冻结、仅在电源断开时复位。 对我哪里出了问题有什么想法吗?

谢谢

#包含
#包含

unsigned int ADC_value;

int main (void){

WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器

P1DIR |= BIT0;//将引脚设置为输出
P4DIR |= BIT0;

PMM_unlockLPM5 ();

//*为引脚选择模拟功能*

//ADC 设置
SYSCFG2 |= ADCPCTL9;

ADCCTL0 |= ADCON;//打开 ADC
ADCCTL1 |= ADCSHP;//采样信号源=采样计时器
ADCCTL1 |= ADCSSEL_2;//选择 SMCLK
ADCCTL2 |= ADCRES_2;// 12位分辨率
ADCMCTL0 |= ADCSREF_7;
ADCMCTL0 |= ADCINCH_9;// A9作为输入

ADCIFG &&~0x01;//清除中断标志

while (1){

ADCCTL0 |= ADCENC | ADCSC;//启用和启动转换

while ((ADCIFG & ADCIFG0)== 0);

ADC_VALUE = ADCMEM0;

如果(ADC_value > 3613){
P1OUT |= BIT0;
P4OUT &= BIT0;
}其他{
P1OUT &= BIT0;
P4OUT |= BIT0;

返回0;

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

    您不希望那里的返回、它将从 main 返回并转向谁知道在哪里。

    您也不需要 PXOUT &= BIT0。

    如果位0开启:

    0x01 & 0x01 =>= 0x01

    如果位0关闭:

    0x000 & 0x01 = 0x00  

    因此、您的语句将使位0保持不变。

    您需要 PXOUT &=(~BIT0)、它会将位0设置为0并使其他位保持不变。

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

    如果您不熟悉 C、请参阅以下位操作列表:

    https://c-faq.com/misc/bitmanip.html

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

    感谢您的帮助、Keith。 我设法使 P1.0和4.0上的 LED 响应电压输入。 但是、当我使用3.3V MSP 输出作为 A9引脚的输入时、P4.0 LED 不会响应。 当我交换条件以便在输入超过阈值电压时 P1.0 LED 亮起时、P1.0 LED 将在提供3.3V 电源时亮起、但 P4.0将保持亮起。  

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

    我认为您需要展示新代码。

    3.3V 应始终生成4096个代码。 您是否曾尝试过使用调试器来查看在 ADC_VALUE 中能获得什么?

    此外、如果您想使 ADC_value 具有易失性、

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

    我已附上新代码。 在使用调试器查看 ADC_value 是多少时、我得到以下错误。 谢谢你。

    #包含
    #包含

    volatile unsigned int ADC_value;

    int main (void){

    WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器

    P1DIR |= BIT0;//将引脚设置为输出
    P4DIR |= BIT0;

    PMM_unlockLPM5 ();

    //*为引脚选择模拟功能*

    //ADC 设置
    SYSCFG2 |= ADCPCTL9;

    ADCCTL0 |= ADCON;//打开 ADC
    ADCCTL1 |= ADCSHP;//采样信号源=采样计时器
    ADCCTL1 |= ADCSSEL_2;//选择 SMCLK
    ADCCTL2 |= ADCRES_2;// 12位分辨率
    ADCMCTL0 |= ADCSREF_7;
    ADCMCTL0 |= ADCINCH_9;// A9作为输入

    ADCIFG &&~0x01;//清除中断标志

    while (1){

    ADCCTL0 |= ADCENC | ADCSC;//启用和启动转换

    while ((ADCIFG & ADCIFG0)== 0);

    ADC_VALUE = ADCMEM0;

    如果(ADC_value > 500){

    P1OUT &=~BIT0;
    P4OUT |= BIT0;

    }其他{

    P1OUT |= BIT0;
    P4OUT &=~BIT0;



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

    请使用代码标签来发布代码。

    这对我在 MSP-EXP430FR2311上运行良好、包括允许我检查 ADC_Result 的值。

    您可以关闭类似示例的优化。

    #include <msp430.h>
    
    volatile unsigned int ADC_Result;
    
    int main(void)
    {
        WDTCTL = WDTPW | WDTHOLD;                                // Stop WDT
    
        // Configure GPIO
        P1DIR |= BIT0;                                           // Set P1.0/LED to output direction
        P1OUT &= ~BIT0;                                          // P1.0 LED off
        
        P2DIR |= BIT0;
        P2OUT &= ~BIT0;
    
        // Configure ADC A1 pin
        P1SEL0 |= BIT1;
        P1SEL1 |= BIT1;
    
        // Disable the GPIO power-on default high-impedance mode to activate
        // previously configured port settings
        PM5CTL0 &= ~LOCKLPM5;
    
        // Configure ADC10
        ADCCTL0 |= ADCSHT_2 | ADCON;                             // ADCON, S&H=16 ADC clks
        ADCCTL1 |= ADCSHP;                                       // ADCCLK = MODOSC; sampling timer
        ADCCTL2 |= ADCRES;                                       // 10-bit conversion results
        ADCMCTL0 |= ADCINCH_1;                                   // A1 ADC input select; Vref=AVCC
        //ADCIE |= ADCIE0;                                         // Enable ADC conv complete interrupt
      
        while(1)
        {
            ADCCTL0 |= ADCENC | ADCSC;                           // Sampling and conversion start
    
            while( (ADCIFG & ADCIFG0) == 0 );
    
            ADC_Result = ADCMEM0;
    
            __no_operation();                                    // For debug only
            if (ADC_Result < 0x1FF)
            {
                P1OUT &= ~BIT0;
                P2OUT |= BIT0;
            }
            else
            {
                P1OUT |= BIT0;                                   // Set P1.0 LED on
                P2OUT &= ~BIT0;
            }
            __delay_cycles(5000);
        }
    }

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

    您需要设置断点来读取变量值 Liam。 双击左边距、当它达到此点并暂停时、您可以看到该值。