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.

[参考译文] MSP-EXP430FR2433:ADC 不会返回正确的温度/基准电压值。

Guru**** 2582405 points
Other Parts Discussed in Thread: MSP430FR2433

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/807755/msp-exp430fr2433-adc-does-not-return-right-value-for-temperature-reference-voltage

器件型号:MSP-EXP430FR2433
主题中讨论的其他器件:MSP430FR2433

您好!

我对 MSP430FR2433上的 ADC 有一些问题。  它不工作。 我回到了非常基本的示例、但也无法使其正常工作。 您能否检查这在您的电路板上是否起作用? 我的2个开发套件出现故障。

我希望当 A =ADC_INPUT_DVCC 时、我得到1023、A =ADC_INPUT_DVSS I 得到0、而 A =ADC_INPUT_TEMPSENR I 得到温度、A =ADC_INPUT_REFVOLTAGE I 得到~1/2。  


但是、我得到的所有这些值都是300。 怎么回事?

#include 
#include 
include "adc.h"


void main (void)
{
WDT_A_HOLD (WDT_A_base);
//init_clock();
PMM_enableInternalReference();
PMM_enableTempSensor();
_delay_cycles (6000);
GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN_All8);
GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN_All8);
GPIO_setAsOutputPin (GPIO_PORT_P3、GPIO_PIN_All8);
GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN_All8);
GPIO_setOutputLowOnPin (GPIO_PORT_P2、GPIO_PIN_All8);
GPIO_setOutputLowOnPin (GPIO_PORT_P3、GPIO_PIN_All8);


PMM_unlockLPM5 ();
ADC_INIT (ADC_base、ADC_SAMPLEHOLDSOURCE_SC、ADC_CLOCKSOURCE_ADCOSC、ADC_CLOCKDIVIDER_1);
ADC_ENABLE (ADC_base);
ADC_setupSamplingTimer (ADC_base、ADC_CYCLEHOLD_64_cycles、ADC_MULTIPLESAMPLESDISABLE);
volatile uint16_t a = 0;
volatile uint16_t res[16];
while (1){
ADC_configureMemory (ADC_base、A、ADC_VREFPOS_AVCC、ADC_VREFNEG_AVSS);
//开始单次转换,无重复或序列。
ADC_startConversion (ADC_base、ADC_SINGLECHANNEL);
//等待中断标志生效
while (!(ADC_getInterruptStatus (ADC_base、ADCIFG0)));
RES[A]= ADC_getResults (ADC_base);
//清除中断标志并启动另一个转换
ADC_clearInterrupt (ADC_base、ADCIFG0);
_delay_cycles (5000);
A++;
if (a==16) a=0;
} 

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

    尊敬的乔治:

      如用户指南文档中所示、

      AD 采样通道只能通过 ADCENC=0 (ADC 禁用转换)进行修改、因此您需要按照如下所示修改代码、  

      

     并建议您将变量"A"和"res"定义为全局变量。  

    #include 
    #include 
    #include "adc.h"
    
    
    unsigned int a = 0;
    unsigned int res[16];
    
    void main (void)
    {
    WDT_A_HOLD (WDT_A_base);
    //init_clock();
    PMM_enableInternalReference();
    PMM_enableTempSensor();
    _delay_cycles (6000);
    GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN_All8);
    GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN_All8);
    GPIO_setAsOutputPin (GPIO_PORT_P3、GPIO_PIN_All8);
    GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN_All8);
    GPIO_setOutputLowOnPin (GPIO_PORT_P2、GPIO_PIN_All8);
    GPIO_setOutputLowOnPin (GPIO_PORT_P3、GPIO_PIN_All8);
    
    
    PMM_unlockLPM5 ();
    ADC_INIT (ADC_base、ADC_SAMPLEHOLDSOURCE_SC、ADC_CLOCKSOURCE_ADCOSC、ADC_CLOCKDIVIDER_1);
    ADC_ENABLE (ADC_base);
    ADC_setupSamplingTimer (ADC_base、ADC_CYCLEHOLD_64_cycles、ADC_MULTIPLESAMPLESDISABLE);
    
    while (1){
    
    ADCCTL0 &=~ADCENC;
    ADC_configureMemory (ADC_base、A、ADC_VREFPOS_AVCC、ADC_VREFNEG_AVSS);
    ADCCTL0 |= ADCENC;
    ADC_startConversion (ADC_base、ADC_SINGLECHANNEL);
    while (!(ADC_getInterruptStatus (ADC_base、ADCIFG0)));
    RES[A]= ADC_getResults (ADC_base);
    ADC_clearInterrupt (ADC_base、ADCIFG0);
    _delay_cycles (5000);
    A++;
    if (a==16) a=0;
    }
    }
    

    此致、

    Johnson

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

    非常感谢!  我认为 driverlib 为我管理 EN 位的状态。  它现在可以工作了!