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.

MSP430FR5994: MSP430FR5994 ADC12

Part Number: MSP430FR5994

Dear,

I am having difficulty correctly reading the ADC12 of the MSP430FR5994.

I am using 02 resistors as a voltage divider at the input of the ADC12 AN15 of the MSP430FR5994.

Source Voltage: 0 to 16V
R1: 13k
R2: 2k4

ADC Resolution: 12 Bits (0 to 4096)

VREF: 2.5V internal

Simulating a source voltage of 7.90V, the ADC input voltage would be 1.231V and the ADC reading = 29 only. Where the value would have to be ADC = 2015.

Symbolic Memory
Local         Data      Variable       Value     Type
0x001D6E 0x001D ADC_AN15  29          unsigned int

Did I do some configuration wrong? Could anyone show me how I should do it?

////////////////////////////////////////////////////////////////////////////////
// Definição da Porta P3 como Leitura do Canal Analógicos AN15 //
////////////////////////////////////////////////////////////////////////////////

P3SEL0 |= ( ADC15); // P3.2 e P3.3 options select P3SEL0 = 1 // Habilita o ADC12 dos Canais AN14 P3.2 e AN15 P3.3
P3SEL1 &=~ (ADC15); // P3.2 e P3.3 options select P3SEL1 = 0 // Seleciona Módulo Primário Conforme Tabela I/O Function Selection = 0 | 1

// By default, REFMSTR=1 => REFCTL is used to configure the internal reference
while(REFCTL0 & REFGENBUSY); // If ref generator busy, WAIT

REFCTL0 |= REFVSEL_2 | REFON; // Habilita e Seleciona a Referência Interna REF = 2.5V

// Configura o Registrador do Conversor ADC12
ADC12CTL0 = 0; // Zera o Registrador do Conversor ADC12
ADC12CTL1 = 0;
ADC12MEM0 = 0; // Reseta a Memória do ADC12
ADC_AN15 = 0; // Reseta a Variável ADC_AN15
ADC12CTL0 = ADC12ON + ADC12SHT0_10; // Liga o ADC e Ativa 512 ADC12CLK cycles
ADC12CTL1 = ADC12SHP; // Utilizar temporizador de amostragem
ADC12CTL2 |= ADC12RES_2; // Resultado de conversão de 12 bits
ADC12MCTL0 = ADC12INCH_15 + ADC12VRSEL_1; // AN15 ADC input select, Vref=2.5V

while(!(REFCTL0 & REFGENRDY)); // Wait for reference generator to settle


for (volatile unsigned int i = 0x3600; i; i--); // Atraso para o Nova Inicialização de Conversão do ADC12


// Efetua uma Leitura do ADC12 AN15 P3.3
ADC12CTL0 |= ADC12ENC; // Habilita a Conversão do ADC12
ADC12CTL0 |= ADC12SC; // Inicia a Conversão do ADC12


// Aguarda Término da Conversão ADC12
while (ADC12CTL1 & ADC12BUSY) // Conversão Finalizada?
{
__no_operation(); // Não Faz Nada
}


ADC_AN15 = ADC12MEM0 & 0x0FFF; // Carrega a Variável com Valor do ADC12 AN15 P3.3

  • > P3SEL1 &=~ (ADC15); // P3.2 e P3.3 options select P3SEL1 = 0 // Seleciona Módulo Primário Conforme Tabela I/O Function Selection = 0 | 1

    Per data sheet (SLASE54D) Table 9-27, to select A15 you need PSEL=11. (I'm supposing ADC15==BIT3.). Try instead:

    > P3SEL1 |=  (ADC15); // P3.2 e P3.3 options select P3SEL1 = 1 // Seleciona Módulo Primário Conforme Tabela I/O Function Selection = 0 | 1

    --------------

    ADC12CTL0 = ADC12ON + ADC12SHT0_10; // Liga o ADC e Ativa 512 ADC12CLK cycles

    For A15, you should set SHT1 rather than SHT0 [Ref User Guide (SLAU367P) Table 34-4]. Try instead:

    ADC12CTL0 = ADC12ON + ADC12SHT1_10; // Liga o ADC e Ativa 512 ADC12CLK cycles

  • Dear Bruce,

    Thank you very much for informing me!

    Was solved!

    P3SEL0 |= (ADC15); // P3.3 options select P3SEL0 = 1 // Habilita o ADC12 do Canal AN15 P3.3
    P3SEL1 |= (ADC15); // P3.3 options select P3SEL1 = 1 // Seleciona Módulo Primário Conforme Tabela I/O Function Selection = 0 | 1

    ADC12CTL0 = ADC12ON + ADC12SHT1_10;                                     // Liga o ADC e Ativa 512 ADC12CLK cycles

**Attention** This is a public forum