void configurar_comparador(void)
{
/*
* C2OUT: Comparator 2 Output bit
* When C2INV = 0:
* 1 = C2 VIN+ > C2 VIN-
* 0 = C2 VIN+ < C2 VIN-
* When C2INV = 1:
* 1 = C2 VIN+ < C2 VIN-
* 0 = C2 VIN+ > C2 VIN-
*
* C2OUT = 1 ( C2 VIN + < C2 VIN- )
* Cuando el voltaje de referencia sea mayor que la tensión de entrada
* salta la interrupción
* VIN+ = VREF/RA2 Pin 1
* VIN- = AN1/RA1 Pin 18
*/
CMCONbits.C2OUT = 1;
CMCONbits.C1OUT = 1;
/*
* C2INV: Comparator 2 Output Inversion bit
* 1 = C2 Output inverted
* 0 = C2 Output not inverted
*/
CMCONbits.C2INV = 1;
CMCONbits.C1INV = 1;
/*
* Un solo comparador
* CM<2:0> = 101
*
* Pin 17 RA0/AN0 Entrada digital
* Pin 2 RA3/AN3/CMP1 Entrada digital
*
* Pin 18 RA1/AN1 VIN-
* Pin 1 RA2/AN2/VREF VIN+
*/
CMCONbits.CM2 = 1;
CMCONbits.CM1 = 0;
CMCONbits.CM0 = 1;
/*
* VREN: VREF Enable bit
* 1 = VREF circuit powered on
* 0 = VREF circuit powered down, no IDD drain
*/
VRCONbits.VREN = 1;
/*
* VROE: VREF Output Enable bit
* 1 = VREF is output on RA2 pin
* 0 = VREF is disconnected from RA2 pin
*/
VRCONbits.VROE = 0;
/*
* VRR: V REF Range Selection bit
* 1 = Low range
* 0 = High range
*/
VRCONbits.VRR = 0;
/*
* VR<3:0>: VREF Value Selection bits 0 ? VR <3:0> ? 15
* When VRR = 1: VREF = (VR<3:0>/ 24) * VDD
* When VRR = 0: VREF = 1/4 * VDD + (VR<3:0>/ 32) * VDD
*
* VRR = 0
* VREF = ( 0,25 x 4,8v ) + ( ( 8 / 32 ) x 4,8v ) = 2,4v
*/
VRCONbits.VR3 = 1; // VR<3:0> - 8 - 1000
VRCONbits.VR2 = 0; // VDD ~ 4,8v
VRCONbits.VR1 = 0; // VREF = 2,4v
VRCONbits.VR0 = 0; // VBAT = 7,1v
}