// Funcion para tomar datos con el ADC en modo automatico con Frecuencia de muestreo de 29100, utilizo solo un canal.
// Para el calculo de la frecuencia de Muestreo con un a FCY de 40Mhz, se basó en la siguiente formula:
// |<- Tiempo total de ADC ->|
// |<- TtADC = Sample Time + Conversion time ->|
// |<- Sample Time ->|<- Conversion time ->|
// N*TAD + 12*TAD 12*TAD es el tiempo de conversion para ADC a 10 bits y para 12 bits 14*TAD
// N=SAMC[1:31] TAD = (ADCS + 1)*FCY
// N((ADCS + 1)*FCY) + 12*((ADCS + 1)*FCY)
//Donde la formula resultante es: FCY/FS = (ADCS + 1)(SAMC + 12)
//Utilizo esta formula para calcular el valor de ADCS y SAMC en Matlab, para cualquier muestreo y FCY que en este caso son constante
// Y el resultado es ADCS 54 y SAMC 13.
void ADC_FS_29k_inicA(void)
{
//-----------------------ADC Register---------------------------------------------
AD1CON1bits.ADON = 0; //ADC operation
//AD1CON1bits.DONE = 0; // ADC Conversion Status bit
AD1CON1bits.SAMP = 0; // ADC Sample Enable bit
AD1CON1bits.ASAM = 1; // ADC Sample Auto-Start bit
//AD1CON1bits.SIMSAM = 0; // Simultaneous Sample Select bit (only applicable when CHPS<1:0> = 01 or 1x)
AD1CON1bits.SSRC = 7; // Sample Clock Source Select bits Auto
AD1CON1bits.FORM = 0; // Data Output Format bits
AD1CON1bits.AD12B = 0; // 10-Bit or 12-Bit Operation Mode bit
//AD1CON1bits.ADDMABM = 0; // DMA Buffer Build Mode bit
AD1CON1bits.ADSIDL = 0; // Stop in Idle Mode bit
AD1CON2bits.VCFG = 0; // Converter Voltage Reference Configuration bits
AD1CON2bits.CSCNA = 0; // Scan Input Selections for CH0+ during Sample A bit
AD1CON2bits.CHPS = 0; // Selects Channels Utilized bits
//AD1CON2bits.BUFS = 0; // Buffer Fill Status bit (only valid when BUFM = 1)
AD1CON2bits.SMPI = 0; // Selects Increment Rate for DMA Addresses bits or number of sample/conversion operations per interrupt
AD1CON2bits.BUFM = 0; // Buffer Fill Mode Select bit
AD1CON2bits.ALTS = 0; // Alternate Input Sample Mode Select bit
AD1CON3bits.ADRC = 0; // ADC Conversion Clock Source bit
AD1CON3bits.SAMC = 13; // Auto Sample Time bits Sample TIME = 13*TAD
AD1CON3bits.ADCS = 54; // ADC Conversion Clock Select bits: 54 = 55·TCY = TAD
//AD1CHS123bits.CH123NB = 0; // Channel 1, 2, 3 Negative Input Select for Sample B bits
//AD1CHS123bits.CH123SB = 0; // Channel 1, 2, 3 Positive Input Select for Sample B bit
//AD1CHS123bits.CH123NA = 0; // Channel 1, 2, 3 Negative Input Select for Sample A bits
//AD1CHS123bits.CH123SA = 0; // Channel 1, 2, 3 Positive Input Select for Sample A bit
//AD1CHS0bits.CH0NB = 0; // Channel 0 Negative Input Select for Sample B bit
//AD1CHS0bits.CH0SB = 0; // Channel 0 Positive Input Select for Sample B bits
AD1CHS0bits.CH0NA = 0; // Channel 0 Negative Input Select for Sample A bit
AD1CHS0bits.CH0SA = 0; // Channel 0 Positive Input Select for Sample A bits
AD1PCFGL = 0b1111111111111110; // ADC1 PORT CONFIGURATION REGISTER LOW; all PORTB = Digital; RA1 = analog
TRISAbits.TRISA0 = 1; //Configuracion del Tris A para indicar que es de entrada.
AD1CSSL = 0; // ADC1 INPUT SCAN SELECT REGISTER LOW
//AD1CON4 = 0; // ADC1 CONTROL REGISTER 4
//Habilitación de la interrupción del ADC
IFS0bits.AD1IF =0;
IEC0bits.AD1IE = 1; //Habilita la interrupción del ADC cuando haya una captura de dato.
IPC3bits.AD1IP = 7; //Prioridad de interrupcion del ADC 7 max
}