MSP430 ADC example

Der MSP430F169 hat das ADC12 Modul ein 12 bit SAR ADC. Im folgenden wird ein kleines Beispiel dargestellt wie man eine einzelne Messung an einem einzelnen Channel durchführen kann. Das Programm läuft wie folgt ab:

1) Watchdog deaktivieren

2) Clock initialisieren

3) ADC initialisieren

4) Hauptrogramm / Messen


#include
#define STOP_WATCHDOG WDTCTL = WDTPW + WDTHOLD;

void initClock(void);
void initADC(void);
unsigned int readADC(unsigned int channel);

void main(void)
{
int adc_value=0;
initClock();
initADC();
adc_value=readADC(0);// read adc value from channel 0 P6.0
}

void initClock(void)
{
unsigned int i;
BCSCTL1 &= ~XT2OFF;
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i–); // Time for flag to set
}
while ((IFG1 & OFIFG) != 0); // OSCFault flag still set?
BCSCTL2 |= SELM1 + SELS;// select XT2 as MCLK and SMCLK
}

void initADC(void)
{
P6SEL |= 0xFF; // select the hole port as ADC
ADC12CTL0 |= ADC12ON+SHT00+SHT01+SHT02+SHT03; // Select Sample and Hold time, activate adc
ADC12CTL1 |= ADC12SSEL1+SHP;// Select MCLK
}

unsigned int readADC(unsigned int channel)
{
ADC12CTL0 &= ~ENC;
ADC12MCTL0 = channel;
ADC12CTL0 |= ADC12SC + ENC; // Start sampling
ADC12CTL0 &= ~ADC12SC; // End sampling start conversion
while ((ADC12CTL1 & ADC12BUSY) == 1);// while ADC busy
return ADC12MEM0;
}

In diesem Fall wird wieder ein 8 MHz Quarz an XT2 verwendet und am P6.0 gemessen.

Dieser Beitrag wurde unter Mikrocontroller, MSP430 abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.