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