Part Number: MSP430G2553
Tool/software: Code Composer Studio
Hello,
I am unable to understand issue in my code and due to that I am not getting proper ADC count.
Hardware configuration:
- MCU MSP430G2553 is running at 1MHZ.
- A1,A2,A3 are ADC inputs (P1.1,P1.2, P1.3)
- Applied 2.4VDC at A1 pin.
- ADC reference voltage is same as supply voltage.
Code:
#include <msp430.h>
#include "main.h"
#include <stdint.h>
unsigned int ADC[10];
int main(void)
{
// Clock-------------------------------------------------------------------------------
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
if (CALBC1_1MHZ==0xFF) // If calibration constant erased
{
while(1); // do not load, trap CPU!!
}
DCOCTL = 0;
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ;
BCSCTL2 &= ~(DIVS_3); // SMCLK = DCO = 1MHz
//ADC ------------------------------------------------------------------------------------
ADC10CTL1 =INCH_3+CONSEQ_1 +ADC10SSEL_3;
ADC10CTL0 =SREF_0 + ADC10SHT_0 + MSC+ ADC10ON + ADC10IE;
ADC10AE0 |= 0x0E;
ADC10DTC1 = 3; // Three conversions.
ADC10SA = ADC; // ADC10 data transfer starting address.
while (ADC10CTL1 & ADC10BUSY); // Wait if ADC10 core is active
ADC10CTL0 |=ENC + ADC10SC; //start conversation
while(1);
}
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
ADC10CTL0 &= ~ADC10IFG; // clear interrupt flag
ADC10SA = ADC; // ADC10 data transfer starting address.
ADC10CTL0 |=ENC + ADC10SC; //start conversation
}
Result:
ADC[0]=34
ADC[1]=35
ADC[2]=167
Questions:
1. If I am applying 2.4volt then why I am not getting equivalent count 2.4*1023/3= 818? What is missing in my configuration? Please guide.
2. Will this ADC array store value in sequence for used channel only like ADC[0]= count for A1 channel, ADC[1]= count for A2 channel and so on? Or it will always start from A0 (even if I am not using)?
Please guide.
Thanks.