Autor Tema: Corte de alimentación  (Leído 5476 veces)

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

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Corte de alimentación
« en: 18 de Septiembre de 2003, 01:04:00 »
Una pregunta que creo que os interesará pensar:

¿Como se programaría en ensamblador para que en el caso de un corte de alimentación al regresar la luz el programa siga por donde estaba antes del corte de alimentación?

Ejemplo de aplicación práctica: si se está testeando por programación un determinado sensor, que al "regresar la luz" se siga testeando el mismo sensor sin necesidad de inicializar "a mano" todo el sistema (por ejemplo un sistema electroneumático)

Un saludo

Desconectado MarquesSalsero

  • PIC18
  • ****
  • Mensajes: 467
RE: Corte de alimentación
« Respuesta #1 en: 18 de Septiembre de 2003, 03:39:00 »
Te voy a dar un par de pistas. Como supongo que tendras el pic alimentado a partir de la tension de red ( 220 / 110 Volts ) lo normal es que el pic, gracias al condensador de filtro de la alimentación, siga alimentado durante algún tiempo despues de que la alimentación haya desaparecido.

De este mode podemos tener uno de los pines monitorizando la tensión de alimentación antes del condensador y en el momento que esta desaparezca podemos saltar a una rutina ( ya sea por medio de una interrupción o por monitorización constante de dicho pin ) que nos guarde el estado del sistema y el punto a partir del cual debera continuar en su próxima inicialización.

La forma de conseguir la tensión de monitorización antes de condensador es poner antes del puente de diodos del rectificador un solo diodo para rectificar una semionda y tras este un condensador de baja capacidad a masa con una resistencia en paralelo. La resistencia lo que hará es descargar el condensador tan pronto como la tensión de red desaparezca. Ten en cuenta que si no pones el condensador lo que tendras será una tensión pulsante y si no pones la resistencia, dado que la unica carga que tendremos en dicho punto es un pin del pic, el tiempo de descarga del condensador será tan largo que no nos dará tiempo a reaccionar. Por lo tanto hay que elegir el condensador y la resistencia de tal forma que, por un lado el condensador nos permita mantener una tensión continua que no despiste al pic y por otro lado la resistencia deberá descargar el condensador lo suficientemente rápido como para que tengamos tiempo de ejecutar nuestra rutina de salvaguarda.

NOTA: en muchos casos será necesario poner un zener para proteger el pic de los picos de tensión, en este caso el propio zener nos realiza la carga y no necesitamos la resistencia de descarga del condensador. Si pones el zener no olvides la resistencia de limitación para esta.


Menudo tarugo que he escrito, si no lo entiendes me lo dices e intentaré ser algo mas claro y didactico pero estoy tan liado que ahora mismo no tengo tiempo apenas para mas.
Hay 10 tipos de personas las que entienden binario y las que no

Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: Corte de alimentación
« Respuesta #2 en: 18 de Septiembre de 2003, 05:52:00 »
Me quito el sombrero ante el "tarugo" que acabas de escribir..... excelente, Marqués.... en serio...

Iba a puntualizar lo de los picos de tensión, y mira... ya lo has previsto con el zener. Genial.

Elena.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Corte de alimentación
« Respuesta #3 en: 18 de Septiembre de 2003, 09:35:00 »
Me gusta la idea de salto a una rutina por interrupción cuando se detectase falta de tensión antes del puente rectificador. Por supuesto habría que comprobarlo físicamente. Ahora vamos a la parte software, yo lo haría así:

Imaginaros que nuestro programa en ensamblador tiene 5 bucles "infinitos" de testeo de sensores. Antes de entrar en cada bucle yo incrementaría una variable (un registro, por ejemplo variable EQU 0x10). De forma que cuando entrase en el bucle1 la variable valdrá 1, cuando entrase en el 2 valdrá 2 y así hasta 5.

Cuando se produjese la interrupción en la rutina de atención a la interrupción le diríamos que guardase en EEPROM el valor que tuviese en ese momento la variable.

Al regresar la alimentación lo primero que hará el programa será leer de la EEPROM el valor de la variable y hacer un salto dependiendo de su valor, bien a la etiqueta Bucle1, bien a la etiqueta Bucle2 etc.

Lo ideal sería que en lugar de utilizar esta variable se cargase el valor que tenía el PC (Contador de Programa) antes de entrar en la interrupción, ¿alguién se le ocurre como?

Un saludo

Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: Corte de alimentación
« Respuesta #4 en: 18 de Septiembre de 2003, 11:23:00 »
Fíjate, Pocher, yo no veo tan "ideal" la solución que utiliza el contador de programa....me gusta más la opción primera que has expuesto, utilizando el conteo de una variable y almacenando en la EPPROM su valor a medida que avanza la ejecución del programa...

Te diré porque no me convence utilizar el PC...  es que, ojo,... aunque la ejecución del programa es "lineal", una instrucción después de la otra, hay instrucciones en asm que rompen esa linealidad.. por ejemplo, las instrucciones GOTO y CALL, cargan valores constantes en el contador de programa, por lo que esto habría que tenerlo en cuenta...

Otra cosa que se me ocurre, podrías explorar el estado del bit PD (powerdown) del registro de estado.... mjusto este bit detecta si la alimentación fue apagado o encendida después... Ya nos dirás.

Saludos!
Elena

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Corte de alimentación
« Respuesta #5 en: 18 de Septiembre de 2003, 13:41:00 »
Cuando disponga de las placas, ahora no las tengo aquí, os comento el resultado de las ideas.

Un saludo

Desconectado jorgeansuini

  • PIC18
  • ****
  • Mensajes: 340
RE: Corte de alimentación
« Respuesta #6 en: 18 de Septiembre de 2003, 21:13:00 »
Buenas:

No se bien que aplicación pensas darle al micro,
pero voy a tratar de aportarte una serie de comentarios

1-Si bien de alguna manera podrias guardar el PC como para
saber donde llego el programa,en caso de cortarse la
alimentación y resetearse el micro,en el inicio habra
toda una serie de registros que tomen un nuevo valor inicial

2-Si estabas teniendo en cuenta algun dato desde el exterior,
para luego ejecutar una acción, cuando vuelva la alimentación
deberias volver a leer el dato a ver si no cambio.-

3-Normalmente en los sistemas de control, si por alguna causa
se reinicia una rutina, no se ejecutan comandos hasta no
tener aseguradas todas las entradas.-

4-Me parece mas sencillo,en vez de almacenar variables,que
al detectar una caida de tension, el micro pase a un estado
sleep ,del cual sale a traves de interrupciones,y mantenerlo
alimentado con unas baterias.-

Espero haber contribuido en algo.-
saludos
Jorge

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Corte de alimentación
« Respuesta #7 en: 19 de Septiembre de 2003, 00:52:00 »
Me parece buena la idea de la batería y el modo SLEEP, pero como harías (coméntalo de palabra, sin instrucciones) para que el PIC al detectar una caida en la alimentación entrase él solito en modo SLEEP, y lo mismo para que cuando regresase la luz saliese él solo del modo SLEEP y retomase el programa por donde estaba antes del corte.

Un saludo

Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: Corte de alimentación
« Respuesta #8 en: 19 de Septiembre de 2003, 05:28:00 »
Hola!
Nos estás haciendo currar, eh Pocher...

Se me ocurre lo siguiente, a ver qué te parece:

Utilizas la entrada RB0/INT del micro para detectar la caída de alimentación y tratarla como una interrupción.

Por hardware, haces que esta pata del PIC explore la alimentación principal (no la de la batería), pero te las apañas para que al micro le llegue por lógica negativa; es decir, si hay  alimentación, la entrada de RB0 estará a 0; si no hay alimentación, RB0 tendrá un 1.

**Declaras una variable contador para que acumule la posición por la que se encuentra la ejecución del programa.
**Declaras una variable "estado" para que te indique si hay o no alimentación.

En el bucle principal:
**CArgas en la variable estado el valor 1, por ejemplo, que indica que hay alimentación
** Declaras gestión de interrupción externa por flanco positivo.
** Reseteas los flag de las interrupciones
** Defines la máscara del registro de interrupciones, para que pille sólo la RB0.
** Habilitas las interrupciones
       
** Bla BLa Bla... tu programa..... lo que sea..
** no te olvides de ir incrementando el contador...
** y bla bla ....

ETIQUETA DEL SERVICIO DE INTERRUPCION!!!
** Miras la variable estado... si es 1, había alimentación y se ha cortado, debes mandarlo a dormir.... pero antes!!:
   **se ha detectado una caída de tensión, por lo que entra un flanco positivo en la pata RB0.
   ** Limpiar los flag del registro de interrupciones
   ** Declarar gestión de interrupcion externa por flanco negativo
   ** Defines la máscara del registro de interrupciones, para que pille sólo la RB0.
   ** Habilitas las interrupciones, otra vez
   ** y Le mandamos al micro a DORMIR!

Estará dormidito hasta que llegue un cero a la pata RB0, es decir, se produzca interrupción porque se reanude la alimentación, y entonces
** Guardas en la variable estado el valor 0, por ejemplo, se ha reanudado la alimentación.
**Devuelves el control al bucle principal, y dependiendo de la variable contador te iré a un sitio o a otro...

Bueno... no se si es un jaleo enorme.. pero la idea es gestionar interrupción externa en el RB0...  

Ufff..... cuéntanos anda,
Saludos!

Elena

Desconectado pikman

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 679
RE: Corte de alimentación
« Respuesta #9 en: 19 de Septiembre de 2003, 09:59:00 »
Hola a todos;
                     Bueno yo tuve un trabajo que me demandaba no perder el valor de un contador, lo que hice fue alimentar el microcontrolador a travez de un diodo y a la salida de este conectando un capacitor de gran valor ( 1000 uf ), con esto consegui que a partir del momento que se cortaba la energia, grabar el valor en la eeprom del micro con la energia almacenada en el capacitor , el micro funcionaba unos 3 segundos despues de la falta de energia, el metodo utilizado fue el mismo que describe Elena usando RB0 como interrupcion externa para detectar elcorte de energia  , creo que puede ser valida esta alternativa para evitar la pila que alimente el micro, bueno espero que les sirva el comentario,

saludos

Ariel
saludos
PikMan

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Corte de alimentación
« Respuesta #10 en: 19 de Septiembre de 2003, 10:51:00 »
Bueno, los niños no me dejaban traquilo, ya estoy aquí.

¡¡¡Pués Elena, me parece totalmente correcto el desarrollo!!! He de decirte que me río mucho contigo, este Foro tiene gente inteligente y además graciosa, que es más importante.

Pikman coincido contigo, yo también utilizaría la EEPROM.

Si a este sofware le añadimos el hardware de MarquésSalsero o de Pickman ya tenemos completado el rompecabezas.

Muchas gracias por tus ideas Jorge.

Personalmente yo utilizaría el hardware sencillito de Pickman, la entrada por interrupción en RB0 y una variable que me indicase en que lugar del programa nos encontramos. Cuando se produjese la interrupción esta variable sería grabada en EEPROM y recuperada al volver la luz.

Y para que os llene más de satisfacción os diré que esta misma pregunta fué planteada en otro foro (con muuuucha gente dentro). Varios intentaron contestar pero nadie dió con la solución.



Desconectado marmatar

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1220
    • MSTools
RE: Corte de alimentación
« Respuesta #11 en: 19 de Septiembre de 2003, 12:22:00 »
Pocher... no te olvides que el Dream Team está siempre alerta para éstos acertijos, jeje... con Elena a la cabeza para poner orden y gracia .

La verdad... impecable.

Un abrazo a tod@s...
marmatar
Lo posible ya está hecho, entonces hagamos lo imposible - Platón

Desconectado MarquesSalsero

  • PIC18
  • ****
  • Mensajes: 467
RE: Corte de alimentación
« Respuesta #12 en: 19 de Septiembre de 2003, 14:46:00 »
Jo, siento no haber estado presente en esta cadeneta, pero ultimamente en el trabajo estoy liadisimo y hasta hoy por la tarde no he conseguido que me funcionara el ADSL. Dos meses para conseguirlo y todo porque algun inepto en telefonica data escribio mal el password en su base de datos.

Bueno ahora que ya me he desahogado comentar que he visto algunas buenas ideas que me permitirán mejorar proximos proyectos. Los que ya están funcionando no pienso ni tocarlos, yo soy de la linea de pensamiento de "si funciona no lo toques".
Hay 10 tipos de personas las que entienden binario y las que no

Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: Corte de alimentación
« Respuesta #13 en: 20 de Septiembre de 2003, 10:22:00 »
Marques, deberías poner una reclamación a Telefónica..... porque no hay derecho...

Bueno, chicos, me alegro mucho que entre todos aportemos soluciones y buenas ideas, de eso se trata. Y si además aliñamos todo con un poco de "pimienta" pues mejor que mejor.

Muchos besotes y buen fin de semana (lo que queda...)
Elena

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Corte de alimentación
« Respuesta #14 en: 20 de Septiembre de 2003, 10:50:00 »
Recien acabo de probar el invento con un automatismo: ¡¡¡ funciona estupendamente !!!

Como os dije opté por:

- Diodo + condensador de 470uF (el que tenía a mano)

- Anodo del diodo a Vcc y a RB0 que la programaremos por interrupción al flanco descendente

- Cátodo del diodo al + del condensador y a alimentación del PIC (VDD)

- Grabación del valor de todas las etapas del GRAFCET (todos los automatismos los diseño en C y con GRAFCET) en EEPROM al detectar flanco de bajada en RB0

- Lectura de la EEPROM al volver la alimentación

Un saludo





 

anything