Autor Tema: Guardar el contador del programa PCL en Memoria EEPROM x corte de corriente  (Leído 5286 veces)

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

Desconectado fernando_realico

  • PIC10
  • *
  • Mensajes: 44
Estimados:

Realicé un proyecto con un PIC 16f628ay quisiera que al momento de cortarse la corriente y al volver, lea la memoria EEPROM así se sigue ejecutando el programa en la linea que quedó.

Nunca programé en la EEPROm, quisiera saber si se puede hacer lo que estoy pensando.

desde ya muchas gracias.

Saludos.

Fernando.

Desconectado sansanoloko

  • PIC10
  • *
  • Mensajes: 48
Re: Guardar el contador del programa PCL en Memoria EEPROM x corte de corriente
« Respuesta #1 en: 31 de Julio de 2012, 13:18:34 »
Hola fernando

Hasta donde yo se, y espero que algùn moderador me pueda apoyar o refutar, no sería posible hacer lo que tu quieres, al menos no con ese pic, porque necesitarías lo siguiente:

Dominio absoluto del contador de programa: se encuentra dividido en dos registros, PCL y PCLATH. Para poder hacer lo que tu quieres, tendrías que poder cargar el contador de programa de una sola vez, dos registros de forma simultánea...!! eso ni siquiera en assembler se puede hacer.

Dominio absoluto de la Pila o Stack: En procesadores como el Z80 o el 8085 (si se, dinosaurios informáticos) la pila se ubicaba en la RAM de forma arbitraria por el programador, así que era posible (pero no recomendable) manipular la pila y su puntero al antojo del programador. En los PIC16, la pila no se puede ni siquiera visualizar, ya que tu requieres respaldar completamente la pila para volver a recuperarla despues del corte de energía, y eso no se puede hacer ni al mas bajo nivel de programación (assembler).

Respaldo no volatil de toda la memoria de datos (RAM): Las variables del programa que se ejecuta en el PIC, se encuentran en la RAM, que por definición es una memoria volatil, asi que al cortar la energía, las variables se perderán por completo, a no ser que se manejen siempre desde y hacia una memoria no volátil, como la EEPROM interna del PIC o externa serial, pero esta opción llevaría a que la ejecución del programa sea asquerosamente lento por los tiempos de acceso y escritura de las memorias EEPROM.

Lo que si se puede hacer es dividir el programa en varias subrutinas que se ejecuten en secuencia, y que el programa principal pregunte al inicio el número de la subrutina que se encontraba en ejecución antes del corte de energía (número almacenado en la EEPROM interna), para retomar la ejecución de dicha subrutina, y no la de todo el programa. Pero quedaría el problema de las variables en RAM, que se perderían con el corte de energía.

Espero sirva de orientación, y saludos a quienes nos leen.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Guardar el contador del programa PCL en Memoria EEPROM x corte de corriente
« Respuesta #2 en: 31 de Julio de 2012, 14:39:06 »
Pero si se corta la corriente es necesario reiniciar todos los puertos y módulos, no es buena idea continuar donde estaba  :shock:
No contesto mensajes privados, las consultas en el foro

Desconectado fernando_realico

  • PIC10
  • *
  • Mensajes: 44
Re: Guardar el contador del programa PCL en Memoria EEPROM x corte de corriente
« Respuesta #3 en: 01 de Agosto de 2012, 16:08:37 »
Hola, gracias por responder.

Claro, si se corta el suministro de electricidad se borrarían todos los contadores que tengo configurados.

el programa es de un lavarropa automático, y estaba observando que los electrónicos por lo general cuando hay un corte y luego vuelve, siguen ejecutando las líneas de donde se había quedado.

nunca escribí nada en la eeprom, estoy leyendo el libro "Microcontrolador PIC16f84 Desarrollo de proyectos 3° Edición" y algo entendí, pero a la hora de aplicarlo me confundo, hay un ejercicio de los display que muestran los turnos de las personas, que si se corta la luz luego vuelve en el último número que se había quedado.

El tema que en mi programa además de volver a la línea donde quedó antes de cortarse la corriente, deberia seguir marcando el led correspondiente al programa, son 7 programas diferentes.

Desde ya gracias amigos, segiré ezperimentando, a ver que sale.

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1099
Re: Guardar el contador del programa PCL en Memoria EEPROM x corte de corriente
« Respuesta #4 en: 01 de Agosto de 2012, 19:54:40 »
Hay una posibilidad de hacer lo que quieres. Tendrias que "dormir" el PIC por medio de una interrupcion que se dispare al fallar la red electrica. No es necesario guardar nada en ningun tipo de memoria, tan solo mantener alimentado el PIC y solo el PIC mediante una bateria. Al regresar el suministro electrico, de nuevo la interrupcion "despertaria" al PIC y todo seguiria como si nada hubiese ocurrido.
Por supuesto la bateria debe dimensionarse para que sea capaz de mantener el PIC alimentado el tiempo que se estime oportuno.

Saludos.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re: Guardar el contador del programa PCL en Memoria EEPROM x corte de corriente
« Respuesta #5 en: 02 de Agosto de 2012, 06:47:20 »
A ver, lo que hacen esos aparatos, lavadoras, contadores de turno, etc se puede hacer de muchas formas. Se hace mediante banderas a lo largo del programa y el programa ha de ser diseñado con un encabezado de control que permita leer en una memoria el lugar por donde estaba el programa y gestione la puesta en marcha de la cpu y el salto directo a la zona donde se estaba antes de la interrupcion del suministro eléctrico, de cualquier forma, se hace siempre por software y no intentando manipular el pclatch, ni el PC ni nada de eso, por que es que no se puede.

  Puedes hacer, o bien ir colocando banderas y grabandolas en la eprom interna o externa lo cual te demoraria tiempo de ejecución por los ciclos de lectura/escritura además de que fastidiaras la eprom muy pronto por el limite que tienen de ciclos de escritura. Tambien puedes ir grabando el paso por éstas banderas en una nvram externa o en una ram con bateria de respaldo.

  A las malas, tambien puedes habilitar el ADC (si lo tiene el micro) y detectar una caida de tension por debajo de la cual (ántes de que llegue a un valor que imposibilite al micro) sea capaz de hacer la simple operación de grabar en la eprom interna el valor de la bandera por donde iba el programa. Para ello, la alimentacion del micro debería tener un condensador electrolitico con suficiente carga para darle respaldo al micro a hacer la gestion antes de morir. Pero tendras que diseñar el circuito con ese propósito.


 Asi cuando se pierde la alimentación, se desconectan todos los perisfericos, pero el micro queda alimentado por un condensador de respaldo aislado del resto del circuito (por diodo por ejemplo). La lectura del ADC ha de ser tomada en vcc del lado de los persfericos y no en el VCC del condensador del cpu.

  El programa tiene que estar diseñado para que lea el adc cada x tiempo y colocar una condicion que en caso de leerse un valor por debajo de X se atienda una subrutina de grabacion de la eprom y hecho ésto recomiendo encerrar al micro en un loop infitino y activar el watchdog para que se genere un reset, asi tendras asegurado el reinicio sea como sea la fluctuacion o apagon electrico.

   Por ultimo, en el encabezado del programa, una vez que leas la meoria y vayas a hacer el salto a donde iba, deberías regrabar la eprom para que en adelante no vuelva a saltar el programa, ya que de lo contrario, a partir de ahora siempre saltará a esa parte del programa aunque el apagado haya sido voluntario.

 No hace falta decir, que la capacidad del consensador ha de estar pensada para que al micro le de tiempo de hacer la lectura del adc, darse cuenta del problema, hacer la grabación y encerrarse en el loop, son unos ms y bastaría con un pequeño condensador de apenas 470uF siempre y cuando no hayan perisfericos consumiendo de los puertos del micro directamente, por ello decia lo de diseñar bien el circuito para ello.

 S2.





   

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Guardar el contador del programa PCL en Memoria EEPROM x corte de corriente
« Respuesta #6 en: 02 de Agosto de 2012, 09:12:38 »
La implementación de Remi04 es la usual, solo que no es necesario emplear el ADC, con cualquier pin digital, también es posible. Justamente la idea es separar con un diodo y un pequeño capacitor, para testear... si es cero dicha entrada, ir a grabar en la eeprom (gracias al gran capacitor colocado en el micro, con su correspondiente diodo)...  y con esta tecnica, no fatigamos a la eeprom  :mrgreen:

Saludos!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...


 

anything