hola, buenas tardes,
tengo este circuito
el objetivo es determinar cuando el voltaje de la batería se acerca al límite de entrada del 7805 que anda en 7v aprox y en ese momento, apagar el led verde y encender el rojo,
en el proteus anda perfecto pero en el protoboard no, en el proto, cuando mido la tensión de salida del zener en vacío me marca unos 2,6~2,7v, pero cuando lo conecto al pin de VREF me marca unos 0,24v,
el voltaje de AN0 funciona relativamente bien, cae un poco la tensión pero no tanto como con el zener,
el código de configuración del comparador
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
}
en esta función configuré el vref a 2,4v pero no tengo claro como usarlo como voltaje de referencia interno, agradecería cualquier ayuda con respecto a esto para descartar el zener y usar solamente el pin 17 AN0,
con esta función verifico el estado del comparador
void verificar_estado_bateria(void)
{
if ( CMCONbits.C2OUT == 1 )
{
PORTAbits.RA0 = 0;
PORTAbits.RA3 = 1;
}
else if ( CMCONbits.C2OUT == 0 )
{
PORTAbits.RA0 = 1;
PORTAbits.RA3 = 0;
}
}
la uso en el arranque y en la interrupción del comparador
if ( PIR1bits.CMIF == 1 )
{
uint8_t resetINTcmp = CMCON;
verificar_estado_bateria();
PIR1bits.CMIF = 0;
}
por qué el voltaje del zener cae tanto? que estoy haciendo mal?
alguna ayuda?
muchas gracias,
saludos,