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.

[参考译文] MSP430FR2355:ADC 配置

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1535313/msp430fr2355-adc-configurations

器件型号:MSP430FR2355

工具/软件:

你(们)好  

我在工程中使用 MSP430FR2355 控制器、

我想使用 ADC、对于我的一个工程、我要初始化所有 ADC 寄存器、ADC 中断也可以工作。

但是、虽然从 ADCMEM0 寄存器读取时始终显示 101 或 102 的值、但我在端口引脚 1.0 上施加的电压为 1.55VDC。

帮助解决此问题。

我每 100ms 使用以下命令启动一次 ADC 转换。

ADCCTL0 |=(ADCENC | ADCSC);   

我的代码如下:

void adc_config()
{
    P1SEL0  |=BIT0;
    P1SEL1  |=BIT0;

    // Disable the GPIO power-on default high-impedance mode to activate
    // previously configured port settings
    PM5CTL0 &= ~LOCKLPM5;

    // Configure ADC12
    ADCCTL0 |= ADCSHT_2 | ADCON;                             // ADCON, S&H=16 ADC clks
    ADCCTL1 |= ADCSHP;                                       // ADCCLK = MODOSC; sampling timer
    ADCCTL2 &= ~ADCRES;                                      // clear ADCRES in ADCCTL
    ADCCTL2 |= ADCRES_2;                                     // 12-bit conversion results
    ADCMCTL0 |= ADCINCH0;                                   // A1 ADC input select; Vref=AVCC
    ADCIE |= ADCIE0;

}


// ADC interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=ADC_VECTOR
__interrupt void ADC_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(ADC_VECTOR))) ADC_ISR (void)
#else
#error Compiler not supported!
#endif
{
    switch(__even_in_range(ADCIV,ADCIV_ADCIFG))
    {
        case ADCIV_NONE:
            break;
        case ADCIV_ADCOVIFG:
            break;
        case ADCIV_ADCTOVIFG:
            break;
        case ADCIV_ADCHIIFG:
            break;
        case ADCIV_ADCLOIFG:
            break;
        case ADCIV_ADCINIFG:
            break;
        case ADCIV_ADCIFG:
            ADC_data[0] = ADCMEM0;

            __bic_SR_register_on_exit(LPM0_bits);            // Clear CPUOFF bit from LPM0

            break;
        default:
            break;
    }
}

谢谢、

Yuvaraj

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

    > P1SEL0 |=BIT0;
    > P1SEL1 |=BIT0;

    ADC 通道 A1 的值为 P1.1、而不是 P1.0 [参考数据表 (SLASEC4D) 表 6-63]。 请尝试:

    > P1SEL0 |=BIT1; // P1.1 作为 A1、根据 DS 表 6-63
    > P1SEL1 |=BIT1;

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

    Yuvaraj 您好

    我注意到您将 ADC 通道设置为 A0、位于 P1.0 上。 您提到过是否要将基准电压施加到同一引脚? 您使用哪个引脚来输入 ADC? 您的代码将输入通道选择为 ADCINCH0、但您的注释提到了 A1。 您尝试对其进行配置的具体情况如何?

    此致、

    Owen

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

    您好、

    实际上、我要测量引脚 1、P1.0 处的电压存在情况。 我被选为 ADCINCH0 的输入通道选择。(我的注释错误)。

    ADCMCTL0 |= ADCINCH0;                   // A0 ADC 输入选择;Vref = AVCC

    1.55VDC 上存在电压、但 ADC 计数为 100。 如果将电压更改为 2VDC、得到的结果与 100 相同。

    我需要帮助。

    此致、

    Yuvaraj

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

    您好、

        我要测量电压的 ADC 通道是 P1.0。

    BR、

    Yuvaraj   

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

    > ADCMCTL0 |= ADCINCH0;                   // A0 ADC 输入选择;Vref = AVCC

    这将设置 A1 (ADCINCH_1)。 请尝试:

    > ADCMCTL0 |= ADCINCH_0;                   // A0 ADC 输入选择;Vref = AVCC

    [编辑:如果使用的是 Launchpad、请不要忘记移除 J10 上的跳线 (LED1)。]

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

    尊敬的 Yuvaraj:

    您的代码似乎几乎正确、但我相信您的代码中有一个拼写错误。
    对其进行修改、以便:  ADCMCTL0 |= ADCINCH_0; // A0 ADC input select; Vref=AVCC

    如果上述建议不起作用、请尝试这些建议以查看它们是否按预期工作(请注意示例中配置的 ADC 通道)。

    1. 您能否尝试运行此 SDK 示例: msp430fr235x_ADC12_01.c
    2. 另一个您可以尝试的方法是更改基准电压。 您可以将其设置为 1.5V、看看这如何影响 ADC 读数。 您可以通过修改以下代码行来实现此目的:  ADCMCTL0 |= ADCINCH_1 | ADCSREF_1;

    此致、

    Owen