Other Parts Discussed in Thread: MSP430F5438A
Hi,
I tried lots of many settings but the MSP430F5438A's ADC does not give me the correct full scale value. I checked the Reference settings so many times but I was unable to find anything wrong. It is giving me half of the full scale value.
So instead of giving me ( 2^12 ) x ( 3.2 / 2.5) = 5242 decimal , its giving me 2621 decimal. Any thoughts! jessica
#include <msp430.h>
#include <math.h>
#include <intrinsics.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
void Port_Init();
void adc_init(void);
void adc_start_Read(void);
void acc_read_with_offset();
void UART_init(void);
void UART(int,int,int);
volatile int SavedADC12MEM0, SavedADC12MEM1, SavedADC12MEM2;
unsigned int adc_index = 0;
int main(void)
{
WDTCTL = WDTPW+WDTHOLD;
Port_Init();
adc_init();
UART_init();
while (1)
{
adc_start_Read();
}
}
void Port_Init(void)
{
P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
P6SEL |= 0xFF;
// P6DIR |= 0x10;
P1DIR |= 0x01;
P11DIR |= 0x07; // ACLK, MCLK, SMCLK set out to pins
P11SEL |= 0x07; // P11.0,1,2 for debugging purposes.
P1DIR |= 0x01;
P7DIR |= 0x00;
P7SEL |= 0xF0;
}
void adc_init(void)
{
REFCTL0 &= ~REFVSEL_3; //Page 693 of data sheet
REFCTL0 |= REFVSEL_3 + REFON; // Configure internal 2.5V reference
__delay_cycles(2100); // delay for reference to settle
ADC12CTL0 &= ~ADC12ENC; // Ensure ENC is clear
ADC12CTL0 |= ADC12ON | ADC12SHT0_6 | ADC12MSC ; //| ADC12REFON | ADC12REF2_5V;
ADC12CTL0 |= ADC12REF2_5V;
ADC12MCTL0 = ADC12SREF_7;// | ADC12EOS;
ADC12CTL1 |= ADC12SHP |ADC12SSEL_3 | ADC12CONSEQ_1 | ADC12DIV_1;
ADC12MCTL0 = ADC12INCH_4;
ADC12MCTL1 = ADC12INCH_13;// | ADC12EOS;
ADC12MCTL2 = ADC12INCH_14 | ADC12EOS;
ADC12CTL2 = ADC12RES_2;
// ADC12MCTL1 = ADC12SREF_1 | ADC12EOS;
__delay_cycles(1900);
}
void adc_start_Read(void)
{
for(;;)
{
ADC12CTL0 |= ADC12ENC | ADC12SC;
while ((ADC12BUSY & ADC12CTL1)!=0)
{
P1OUT |= 0x01;
ADC12CTL0 &= ~ADC12ENC;
SavedADC12MEM0 = ADC12MEM0;
SavedADC12MEM1 = ADC12MEM1;
SavedADC12MEM2 = ADC12MEM2;
}
P1OUT &= ~0x01;
UART_SEND (SavedADC12MEM0, SavedADC12MEM1, SavedADC12MEM2);
}
}