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.

[参考译文] EVM430-FR6047:MSP430FR 6047:ADC 读取问题我可以##39;无法从0读取、起始值为2098、它没有低于该值。(12位 ADC)

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1333145/evm430-fr6047-msp430fr-6047-adc-reading-issue-i-can-t-able-to-read-from-0-the-starting-value-is-2098-it-was-not-going-below-that-12bit-adc

器件型号:EVM430-FR6047

#include <msp430.h>

unsigned int ADC_value;
int main(void)
{
	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
//-----------

	P2SEL1 |= BIT2;
	P2SEL0 |= BIT2;

	PM5CTL0 &= ~LOCKLPM5;




	//----ADC CONFIG
	ADC12CTL0 &= ~ADC12SHT0;

	ADC12CTL0 |= ADC12SHT0_2;

	ADC12CTL0  |= ADC12ON;  //adc on

	ADC12CTL1 |= ADC12SSEL_2;  //selects clk

	ADC12CTL1 |= ADC12SHP;

	ADC12CTL2 &= ~ADC12RES;
	ADC12CTL2 |= ADC12RES_2;  // select resolution as 12bit

	ADC12MCTL0 |= ADC12INCH_14; // channel that im readin ADC from

	ADC12IER0 |= ADC12IE0;
	__enable_interrupt();

	while(1)
	{
	    ADC12CTL0 |= ADC12ENC | ADC12SC;  //start conversion

	    while (( ADC12IFG0 & ADC12IFG0)==0); //interrupt flag


	}
}
//------ISR
#pragma vector = ADC12_VECTOR
__interrupt void ADC12_ISR()
{
    ADC_value = ADC12MEM0;
}




这是我的来自引脚2.2的 ADC 读取代码  
可以从 P2.2获取的最小 ADC 值从2098到4095

当我尝试降低到2098以下时,它没有减少(使用微调锅)


如果我对电压应用基本的 ADC 公式、则只能从1.7V - 3.3V 的电压中读取

我无法阅读 Beteween 0v-1.69v ~需要一些建议我无法找到发生了什么错误

请帮我解决

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

    尊敬的 Aravind:

    您是否正在使用 EVM 板? EVM 板中的 P2.2已连接到其他电路。

    如果您使用的是定制板、请确保没有其他电路连接到 P2.2。 如果您向该引脚输出1V 电压、您可以分享 P2.2的波形吗?

    B.R.

    萨尔

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

    是 Im 使用定制板。 不幸的是,我无法提供波形,因为我在我的板内读引脚2.2 ,我将看到使用调试器模式观察窗口/UART 的值.  


    我是否需要提供任何其他信息?

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

    尊敬的 Aravind:

    我认为有必要检查您的电路是否有问题、如果 P2.2的输入有误、您就无法获得想要的结果。

    您能否分享 P2.2和相关电路的原理图?

    根据代码、似乎没有问题。

    B.R.

    萨尔

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

    大家好、 

    MSP6047由电池源3.6V 供电、我尝试从与 MSP6047供电的电池源读取电压。

    在电池电压下降至2.2V 前、MSP6047运转。

    我无法读取准确的电池电压。 请举几个例子和建议来解决这个问题。

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

    根据原理图、 由于电阻分压的原因、ADC 输入电压应为1.1~1.8V。

    同时、由于您使用 VCC 作为 ADC 基准、ADC 结果应始终约为1/2 * 4095 = 2047

    请使用稳定电压作为 ADC 基准:

    B.R.

    萨尔

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

    我已经尝试假设 ADC12VRSEL_0寄存器.

    但它仍然不会降低到低于1.8V 的电压范围、  

    还有其他方法吗?

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

    尊敬的 Aravind:

    有关 ADC 采样的内部基准设置、您可以参考以下示例:

    https://dev.ti.com/tirex/explore/node?a=IOGqZri__3.80.13.03&a=a3PaaoK__1.10.01.05&node=A__ALFdeSTsbBitEKxYO01hmw__msp430ware__IOGqZri__LATEST&r=a3PaaoK__1.20.00.05&r=a3PaaoK__1.20.01.06&search=ADC 

    您能否分享以下详细信息:

    源 VCC = 3.3V 时、ADC 转换结果是什么(请使用 VCC 作为参考、还请使用内部参考2.0V)?

    源 VCC = 2.2V 时的 ADC 转换结果是什么(请使用 VCC 作为参考、还请使用内部参考2.0V)?

    然后、我们可以看看这里发生了什么。  

    BTW、代码:

    while (( ADC12IFG0 & ADC12IFG0)==0);

    似乎不合适、"ADC12IFG0 & ADC12IFG0" SEema 始终输出"1"、所以当 ADC 采样没有结束时、它将重复启动 ADC。

    B.R.

    萨尔

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

    您好,Sal Ye

    当使用 VCC 3.3时、我能够从电阻分压器(1.5至1.6V)读取电压

    当源 VCC 降至2.2V 时、无法从电阻分压器读取电压

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

    尊敬的 Aravind:

    我可能会要求您使用以下示例代码:

     

    您能否给出 ADC 转换的直接结果、它应该是0-4095之间的12位数据。

    如果您使用 VCC 作为 ADC 基准、会有哪些数据?  

    如果您使用2.0V 内部电压作为 ADC 基准、会有哪些数据?

    当源 VCC 降至2.2V 时,无法从电阻分压器读取电压

    我可以使用 EVM 板尝试它、它似乎不正确。 请首先尝试示例代码、然后给我一些反馈。

    B.R.
    萨尔

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

    #include <msp430.h>
    
    int main(void)
    {
        WDTCTL = WDTPW | WDTHOLD;               // Stop WDT
    
       
        P2SEL1 |= BIT2;                         // Configure P2.2 for ADC
        P2SEL0 |= BIT2;
    
        // Disable the GPIO power-on default high-impedance mode to activate
        // previously configured port settings
        PM5CTL0 &= ~LOCKLPM5;
    
        // By default, REFMSTR=1 => REFCTL is used to configure the internal reference
        while(REFCTL0 & REFGENBUSY);            // If ref generator busy, WAIT
        REFCTL0 |= REFVSEL_1 | REFON;           // Select internal ref = 2.0V
                                                // Internal Reference ON
    
        // Configure ADC12
        ADC12CTL0 = ADC12SHT0_2 | ADC12ON;
        ADC12CTL1 = ADC12SHP;                   // ADCCLK = MODOSC; sampling timer
        ADC12CTL2 |= ADC12RES_2;                // 12-bit conversion results
        ADC12IER0 |= ADC12IE0;                  // Enable ADC conv complete interrupt
        ADC12MCTL0 |= ADC12INCH_14 | ADC12VRSEL_2; // A1 ADC input select; Vref=1.2V
    
        while(!(REFCTL0 & REFGENRDY));          // Wait for reference generator
                                                // to settle
    
        while(1)
        {
            __delay_cycles(5000);               // Delay between conversions
            ADC12CTL0 |= ADC12ENC | ADC12SC;    // Sampling and conversion start
    
            __bis_SR_register(LPM0_bits + GIE); // LPM0, ADC10_ISR will force exit
            __no_operation();                   // For debug only
        }
    }
    
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector = ADC12_B_VECTOR
    __interrupt void ADC12_ISR(void)
    #elif defined(__GNUC__)
    void __attribute__ ((interrupt(ADC12_B_VECTOR))) ADC12_ISR (void)
    #else
    #error Compiler not supported!
    #endif
    {
        switch (__even_in_range(ADC12IV, ADC12IV__ADC12RDYIFG))
        {
            case ADC12IV__NONE:        break;   // Vector  0:  No interrupt
            case ADC12IV__ADC12OVIFG:  break;   // Vector  2:  ADC12MEMx Overflow
            case ADC12IV__ADC12TOVIFG: break;   // Vector  4:  Conversion time overflow
            case ADC12IV__ADC12HIIFG:  break;   // Vector  6:  ADC12BHI
            case ADC12IV__ADC12LOIFG:  break;   // Vector  8:  ADC12BLO
            case ADC12IV__ADC12INIFG:  break;   // Vector 10:  ADC12BIN
            case ADC12IV__ADC12IFG0:            // Vector 12:  ADC12MEM0 Interrupt
                if (ADC12MEM0 >= 0x6B4)         // ADC12MEM = A1 > 0.5V?
                    P1OUT |= BIT0;              // P1.0 = 1
                else
                    P1OUT &= ~BIT0;             // P1.0 = 0
                __bic_SR_register_on_exit(LPM0_bits); // Exit active CPU
                break;                          // Clear CPUOFF bit from 0(SR)
            case ADC12IV__ADC12IFG1:   break;   // Vector 14:  ADC12MEM1
            case ADC12IV__ADC12IFG2:   break;   // Vector 16:  ADC12MEM2
            case ADC12IV__ADC12IFG3:   break;   // Vector 18:  ADC12MEM3
            case ADC12IV__ADC12IFG4:   break;   // Vector 20:  ADC12MEM4
            case ADC12IV__ADC12IFG5:   break;   // Vector 22:  ADC12MEM5
            case ADC12IV__ADC12IFG6:   break;   // Vector 24:  ADC12MEM6
            case ADC12IV__ADC12IFG7:   break;   // Vector 26:  ADC12MEM7
            case ADC12IV__ADC12IFG8:   break;   // Vector 28:  ADC12MEM8
            case ADC12IV__ADC12IFG9:   break;   // Vector 30:  ADC12MEM9
            case ADC12IV__ADC12IFG10:  break;   // Vector 32:  ADC12MEM10
            case ADC12IV__ADC12IFG11:  break;   // Vector 34:  ADC12MEM11
            case ADC12IV__ADC12IFG12:  break;   // Vector 36:  ADC12MEM12
            case ADC12IV__ADC12IFG13:  break;   // Vector 38:  ADC12MEM13
            case ADC12IV__ADC12IFG14:  break;   // Vector 40:  ADC12MEM14
            case ADC12IV__ADC12IFG15:  break;   // Vector 42:  ADC12MEM15
            case ADC12IV__ADC12IFG16:  break;   // Vector 44:  ADC12MEM16
            case ADC12IV__ADC12IFG17:  break;   // Vector 46:  ADC12MEM17
            case ADC12IV__ADC12IFG18:  break;   // Vector 48:  ADC12MEM18
            case ADC12IV__ADC12IFG19:  break;   // Vector 50:  ADC12MEM19
            case ADC12IV__ADC12IFG20:  break;   // Vector 52:  ADC12MEM20
            case ADC12IV__ADC12IFG21:  break;   // Vector 54:  ADC12MEM21
            case ADC12IV__ADC12IFG22:  break;   // Vector 56:  ADC12MEM22
            case ADC12IV__ADC12IFG23:  break;   // Vector 58:  ADC12MEM23
            case ADC12IV__ADC12IFG24:  break;   // Vector 60:  ADC12MEM24
            case ADC12IV__ADC12IFG25:  break;   // Vector 62:  ADC12MEM25
            case ADC12IV__ADC12IFG26:  break;   // Vector 64:  ADC12MEM26
            case ADC12IV__ADC12IFG27:  break;   // Vector 66:  ADC12MEM27
            case ADC12IV__ADC12IFG28:  break;   // Vector 68:  ADC12MEM28
            case ADC12IV__ADC12IFG29:  break;   // Vector 70:  ADC12MEM29
            case ADC12IV__ADC12IFG30:  break;   // Vector 72:  ADC12MEM30
            case ADC12IV__ADC12IFG31:  break;   // Vector 74:  ADC12MEM31
            case ADC12IV__ADC12RDYIFG: break;   // Vector 76:  ADC12RDY
            default: break;
        }
    }
    

    已使用此代码我将内部电压参考设置为2.0V、但它仍然读出相同的值、而不是降低到2048以下

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

    读取值是多少?

    公式应为 VCC / 2 / 2.0 * 4096,这意味着

    3.3V ->大约为3072

    2.2V ->大约为2252

    B.R.

    萨尔

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

    针对2.0V 的 I 置位  

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

    当使用2.0V 内部基准电压时、不建议使用 VCC = 2.0V。 (由于内部基准模块不应为升压电路、2.0 VCC 可能会产生一些随机噪声、从而导致压降)。

    请尝试稍微高一点的 VCC 输入、例如2.2V、2.4V。 然后 检查结果是否良好。

    B.R.

    萨尔

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

    我尝试更改 ADC12VRSEL_2寄存器  


    while (REFCTL0 & REFGENBUSY);//如果 ref 发生器忙、请等待
    REFCTL0 |= REFVSEL_2 | REFON;//选择内部基准电压= 2.5V
    //内部基准打开  

    并添加了这些步骤、我的 ADC 读取值看起来保持不变、我得到的值是2114  
    是否有其他方法可以固定内部基准电压 SIR?

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

    尊敬的 Aravind:

    从我的角度来看、VREF 模块似乎没有正常工作。

    我会离开办公室几天。 让我下周来做一个基于类似电路板的测试。

    如果您有任何新发现、可以在此处同步并告知我。 感谢您的耐心等待。

    B.R.

    萨尔