Datasheet
Chapter 10.
35
Analog Inputs
// Initialize ADC
/* set port configuration here */
ADPCFGbits.PCFG8 = 0; // ensure AN8/RB8 is analog
/* set channel scanning here, auto sampling and convert,
with default read-format mode */
ADCON1 = 0x00E4;
/* No channel scan for CH0+, Use MUX A,
SMPI = 1 per interrupt, Vref = AVdd/AVss */
ADCON2 = 0x0000;
/* Set Samples and bit conversion time */
ADCON3 = 0x1f3f; //(as slow as possible)
/* set channel scanning here for AN8 */
ADCSSLbits.CSSL8 = 1;
/* channel select A3 */
ADCHSbits.CH0SA3 = 1;
/* reset ADC interrupt flag */
IFS0bits.ADIF = 0;
/* enable ADC interrupts */
IEC0bits.ADIE = 1;
/* turn on ADC module */
ADCON1bits.ADON = 1;
//! ADC Interrupt Service Routine
/*!
* Whenever an analog value is available, thie routine will:
* \li Clear the interrupt flag
* \li Grab the analog value and store it in potValue
* \li Increment analogRead
*
*/
void __attribute__ ((__interrupt__, auto_psv))
_ADCInterrupt (void)
{
IFS0bits.ADIF = 0; // Clear A/D interrupt flag
potValue = ADCBUF0; // Save the potentiometer value
analogRead++; // Remember it has been read
}