Autor Tema: Interrupción Low_voltage  (Leído 7910 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Interrupción Low_voltage
« en: 30 de Enero de 2011, 04:12:56 »
Hola amigos, estoy intentando utilizar la interrupción por detección de bajo voltaje que incorpora mi 18F4520 pero no consigo que se active.

Así la inicializo:

Código: C
  1. EsperaEstabilizacion();
  2.    setup_low_volt_detect(LVD_45);
  3.    enable_interrupts(INT_LOWVOLT);
  4.    enable_interrupts(INT_TIMER0);
  5.    enable_interrupts(INT_TIMER1);
  6.    enable_interrupts(INT_TIMER2);
  7.    enable_interrupts(INT_EXT);
  8.    enable_interrupts(INT_EXT1);
  9.    enable_interrupts(INT_RDA);
  10.    enable_interrupts(GLOBAL);

Esta es la función de estabilización:
Código: C
  1. int8 EsperaEstabilizacion(void)
  2. {
  3.    int16 espera;    
  4.    espera = 0xFFFF;  
  5.    
  6.    while(espera--)
  7.      {
  8.       if(IRVST_BIT)
  9.          return(TRUE);
  10.      }        
  11.    return(FALSE);
  12. }

Mi intención es que la interrupción me guarde el contexto en la eeprom, pero para las pruebas estoy intentando apagar unos leds:
Código: C
  1. #int_lowvolt
  2. void BajoVoltaje(void)
  3. {
  4.    disable_interrupts(GLOBAL);
  5.    output_low(LED1);
  6.    output_low(LED2);
  7.    output_low(LED3);
  8.    while (1);
  9. }

Y nada, no consigo que se apaguen.

¿Alguna sugerencia?

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Interrupción Low_voltage
« Respuesta #1 en: 30 de Enero de 2011, 11:41:46 »
Hola

¿Se puede grabar la EEPROM teniendo bajo voltaje? Yo checaría ese dato. También checaría si el tiempo de grabado es suficiente antes de perder totalmente la energía (5ms por byte).

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Interrupción Low_voltage
« Respuesta #2 en: 30 de Enero de 2011, 12:59:09 »
Pues mi objetivo es conseguir hacer esa prueba, Santiago, pero ni siquiera soy capaz de apagar unos leds.


Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Interrupción Low_voltage
« Respuesta #3 en: 30 de Enero de 2011, 17:35:35 »
Para poder grabar, lo que se suele hacer es poner un condensador electrolítico de bastante capacidad con la alimentación del PIC y antes de este un diodo para evitar la descarga del mismo a través de la fuente. Antes del diodo verificamos la tensión, que puede caer, pero con el condensador mantenemos los 5V o 3,3V del micro.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Interrupción Low_voltage
« Respuesta #4 en: 30 de Enero de 2011, 18:58:05 »
Estas simulando esa caida de voltaje con algun regulador variable o solo apagas todo? Pues en el ultimo caso, el LED consumiria lo suficientemente rapido lo que queda de corriente hasta que se te apage todo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Interrupción Low_voltage
« Respuesta #5 en: 30 de Enero de 2011, 19:57:35 »
Bajando la fuente poco a poco y asegurándome con el polímero que la tensión cae por debajo del umbral.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Interrupción Low_voltage
« Respuesta #6 en: 30 de Enero de 2011, 20:18:47 »
Controlaste que la versión de CCS que usas configura correctamente los registros? En este caso son HLVDCON, PIE2, IPR2, ect.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Interrupción Low_voltage
« Respuesta #7 en: 30 de Enero de 2011, 20:40:10 »
Hola Nocturno, conociendo el temperamento del CCS y dependiendo de que versión estés usando, puedes intentar de la siguiente manera para el encabezado del main():

Código: C
  1. setup_low_volt_detect(LVD_45|LVD_TRIGGER_BELOW);
  2.    enable_interrupts(INT_LVD);
  3.    enable_interrupts(GLOBAL);

y con la interrupción asi:

Código: C
  1. #int_LVD
  2. void BajoVoltaje(void)
  3. {
  4.    disable_interrupts(GLOBAL);
  5.    output_low(LED1);
  6.    output_low(LED2);
  7.    output_low(LED3);
  8.    while (1);
  9. }

A partir de la vesión 4.109 cambia INT_LVD por INT_HLVD;

Saludos!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Interrupción Low_voltage
« Respuesta #8 en: 31 de Enero de 2011, 03:12:06 »
Pues finalmente haciendo caso de vuestros consejos he conseguido que funcione.
Una vez más, parece que CCS tenía la culpa, ya que esto:
Código: C
  1. setup_low_volt_detect(LVD_45|LVD_TRIGGER_BELOW);
  2. enable_interrupts(INT_HLVD);

no provocaba ningún cambio en el contenido del registro HLVDCON.

Así que he dejado la inicialización así:
Código: C
  1. HLVDCON = 0b00110101;

Y ya por fin entra en la interrupción  :-/  :-/

Y he modificado la interrupción para ver si le daría tiempo de guardar el contexto en la EEPROM, ¡y también funciona!. Cada vez que quito la alimentación, se incrementan en uno los 4 primeros bytes de la eeprom.

Código: C
  1. #int_HLVD
  2. void BajoVoltaje(void)
  3. {
  4.    disable_interrupts(GLOBAL);
  5.    write_eeprom(0,read_eeprom(0)+1);
  6.    write_eeprom(1,read_eeprom(1)+1);
  7.    write_eeprom(2,read_eeprom(2)+1);
  8.    write_eeprom(3,read_eeprom(3)+1);
  9.    while (1);
  10. }

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Interrupción Low_voltage
« Respuesta #9 en: 31 de Enero de 2011, 10:38:05 »
Me alegro que haya funcionado, y muy interesante los resultados. Tener la posibilidad de guardar 4 Bytes  es muy útil!


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Interrupción Low_voltage
« Respuesta #10 en: 31 de Enero de 2011, 12:16:48 »
Imagino que dependerá del condensador que tengas en la alimentación.
A ver si luego pruebo a escribir todos los bytes de la eeprom en un bucle para poder comprobar a cuántos le da tiempo a alcanzar con el tiempo de apagado.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Interrupción Low_voltage
« Respuesta #11 en: 31 de Enero de 2011, 13:55:03 »
Imagino que dependerá del condensador que tengas en la alimentación.
A ver si luego pruebo a escribir todos los bytes de la eeprom en un bucle para poder comprobar a cuántos le da tiempo a alcanzar con el tiempo de apagado.

Claro, depende de cual sea el consumo de todo el sistema. Pero es algo a tener en cuenta.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Interrupción Low_voltage
« Respuesta #12 en: 31 de Enero de 2011, 17:46:01 »
Por cierto, en ese PIC pero no piensas usar su Brown-Out (si es que tiene) ???

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Interrupción Low_voltage
« Respuesta #13 en: 31 de Enero de 2011, 17:54:20 »
Sí, también uso Brown-out a un nivel inferior al de esta interrupción.

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Interrupción Low_voltage
« Respuesta #14 en: 31 de Enero de 2011, 20:04:28 »
Muy interesante la forma de resolverlo, me alegra que esté funcionando.

Saludos!


 

anything