SLAA475A October 2010 – March 2019 MSP430L092
An ADC conversion for digital filtering can be implemented with a single ramp conversion. This measurement method should be preferred when an exact accuracy is not so important and if the general voltage range of the input signal should be identified. The counter starts at 0 and counts up to the measured voltage. In this method, no error compensation is included. The following example code shows a single ramp conversion from A0 in a 500-mV range. A single conversion is done, and the value is saved in the result variable.
#include "msp430l092.h"
unsigned char result;
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
APCNF = CMPON+DBON+CONVON+APREFON; // Enable comparator on +
// Enable DAC buffer +
// Enable conversion +
// Enable reference
APVDIV = A0DIV; // Set 500mV input range
APINT = 0x00; // Clear ADC-DAC-REG
APIE |= EOCIE; // Enable end of conversion interrupt
_BIS_SR(GIE); // Switch on global interrupts
APCTL = CBSTP+SBSTP+APPSEL0+APPSEL2+OSEL;
// Set DAC buffer output to PSEL +
// Select output buffer +
// Enable Comparator based stop +
// Enable Saturation based stop +
APCTL |= RUNSTOP; // Start conversion
while (1);
}
#pragma vector=APOOL_VECTOR // A-Pool interrupt service routine
__interrupt void APOOL_ISR(void)
{
switch(__even_in_range(APIV,8)) // Add offset to PC and delete flag
{
case 0: break;
case 2: result = APINT; // Save value in variable
break;
case 4: break;
case 6: break;
case 8: break;
default: break;
}
}