Que tal gente,
Vengo al foro con un tema que no me he logrado topar, es acerca del módulo HLVD, el cual se utiliza para detectar cuando un nivel de voltaje está arriba o debajo de un nivel. Según he leído se utiliza mucho para cuando el PIC se desenergiza, éste módulo produce una interrupción y se procede a las rutinas de backup de información importante. Básicamente para esto es que quiero utilizarlo.
En mi aplicación estoy encendiendo un motor por un tiempo, y quiero que en caso de quitarle la energía el micro "recuerde" el tiempo restante y el estado del motor (on/off).
Estoy utilizando C18 y el código es el siguiente:
Código de inicialización:
Y mi vector de interrupciones es el siguiente:
Cómo pueden ver para escribir y leer en la memoria EEPROM interna del PIC estoy utlizando Read_b_eep( char address ) y Write_b_eep( char address, char byte ), las cuales son rutinas de EEP.h
Alguien detecta algún error? Alguien ha utilizado este módulo y podría aconsejarme.
El problema que teno es el siguiente, cuando retiro la energía si guarda la información... a veces. Lo cual no es bueno. En ciertas ocasiones, cuando falla, guarda un valor de 0xFF. Lo curioso es que no siempre es en el mismo lugar
Espero alguien sepa algo, y además que este tema sirva para toda la gente interesada en el uso de este módulo, que a mi parecer es muy importante.
Saludos!
Mr.Brett
Vengo al foro con un tema que no me he logrado topar, es acerca del módulo HLVD, el cual se utiliza para detectar cuando un nivel de voltaje está arriba o debajo de un nivel. Según he leído se utiliza mucho para cuando el PIC se desenergiza, éste módulo produce una interrupción y se procede a las rutinas de backup de información importante. Básicamente para esto es que quiero utilizarlo.
En mi aplicación estoy encendiendo un motor por un tiempo, y quiero que en caso de quitarle la energía el micro "recuerde" el tiempo restante y el estado del motor (on/off).
Estoy utilizando C18 y el código es el siguiente:
Código de inicialización:
Código:
cHoras = Read_b_eep( HOURS_ADDRESS ); Busy_eep(); //This is the información I want to recover.
cMinutos = Read_b_eep( MINUTES_ADDRESS ); Busy_eep();
cSegundos = Read_b_eep( SECONDS_ADDRESS ); Busy_eep();
HLVDCONbits.HLVDEN = 0; //High/Low Voltage Detection.
HLVDCON = 0b00111010;
/*
HLDVCON REGISTER:
BIT7 - Voltage Direction Magnitude Select Bit = 0 (low voltage detect)
BIT6 - Unimplemented
BIT5 - Internal Reference Voltage Stable Flag bit - Read only
BIT4 - High/Low Voltage Enable Bit = 1 (Enabled)
BIT3:BIT0 - Voltage Detection Limit Bits = 1000
*/
PIR2bits.HLVDIF = 0;
PIE2bits.HLVDIE = 1;
IPR2bits.HLVDIP = 1;
RCONbits.IPEN = 1;
INTCONbits.GIEH = 1;
Y mi vector de interrupciones es el siguiente:
Código:
if( PIR2bits.HLVDIF )
{
INTCONbits.TMR0IE = 0; //TMR0 Overflow Interrupt Enable bit, 1 = Enables the TMR0 overflow interrupt
T0CONbits.TMR0ON = 0; //Timer0 On/Off Control bit, 1 = Enables Timer0
HLVDCONbits.HLVDEN = 0; //High/Low Voltage Detection
PIE2bits.HLVDIE = 0; //HLVD Interrupt Enable
Write_b_eep( HOURS_ADDRESS, cHoras ); Busy_eep();
Write_b_eep( MINUTES_ADDRESS, cMinutos ); Busy_eep();
Write_b_eep( SECONDS_ADDRESS, cSegundos ); Busy_eep();
Write_b_eep( MOTOR_ADDRESS, cMotorState ); Busy_eep();
INTCONbits.TMR0IE = 1; //TMR0 Overflow Interrupt Enable bit, 1 = Enables the TMR0 overflow interrupt
T0CONbits.TMR0ON = 1; //Timer0 On/Off Control bit, 1 = Enables Timer0
HLVDCONbits.HLVDEN = 1; //High/Low Voltage Detection
PIE2bits.HLVDIE = 1; //HLVD Interrupt Enable
PIR2bits.HLVDIF = 0;
}
Cómo pueden ver para escribir y leer en la memoria EEPROM interna del PIC estoy utlizando Read_b_eep( char address ) y Write_b_eep( char address, char byte ), las cuales son rutinas de EEP.h
Alguien detecta algún error? Alguien ha utilizado este módulo y podría aconsejarme.
El problema que teno es el siguiente, cuando retiro la energía si guarda la información... a veces. Lo cual no es bueno. En ciertas ocasiones, cuando falla, guarda un valor de 0xFF. Lo curioso es que no siempre es en el mismo lugar
Espero alguien sepa algo, y además que este tema sirva para toda la gente interesada en el uso de este módulo, que a mi parecer es muy importante.
Saludos!
Mr.Brett