UINT16 read_adc(UINT8 channel) { if (channel == A1) AD1CHS = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN4; else if (channel == A0) AD1CHS = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN2; else return 0; int i; for (i = 0; i < 10; i++); // small delay (may not be needed but w/e) AcquireADC10(); for (i = 0; i < 100; i++); // Wait for sampling to complete ConvertADC10(); while(!BusyADC10()); //AcquireADC10(); return ReadADC10(0); }
CPU_INT16U ADC_GetVal (CPU_INT08U channel_to_convert) { CPU_INT08U buffer; CPU_INT32U config; switch (channel_to_convert) { case 0: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN0; break; case 1: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN1; break; case 2: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN2; break; case 3: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN3; break; case 4: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN4; break; case 5: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN5; break; case 6: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN6; break; case 7: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN7; break; case 8: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN8; break; case 9: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN9; break; case 10: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN10; break; case 11: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN11; break; case 12: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN12; break; case 13: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN13; break; case 14: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN14; break; case 15: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN15; break; config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN0; } SetChanADC10(config); //pour le changement de voie en entrée de l'adc, il faudra prévoir un temps pour que la tension se //stabilise entre la comutation et l'échantillonnage. Le top se serait de changer de voie à la fin de la conversion précédente. //Ce qui laisse du temps avant la conversion suivante. CBE OSTimeDlyHMSM(0, 0, 0, 5); ConvertADC10(); while (!BusyADC10()); // timeout ?? !! buffer = 8 * (~ReadActiveBufferADC10() & 0x1); /* Select non active buffer */ return (ReadADC10(buffer)); /* Return ADC reading */ }