TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: kikelc en 07 de Septiembre de 2004, 18:21:00
-
Hola amigos
Resulta que últimamente he estado trabajando en un proyecto en donde el PIC almacena cierta información mientras el sistema esta energizado, he probado guardar dicha información en la memoria EEPROM del PIC y memorias I2C de Microchip y pues funcionan bien pero lo interesante del asunto es lo siguiente:
Cuando el sistema se desenergiza en ciertos casos muy esporádicos dependiendo la frecuencia con la que estés guardando los datos, me los guarda mal en la memoria, esto debido a que se quedo sin energía el PIC en medio del proceso de guardado en la memoria del ultimo dato, esto me ocurre obviamente para los dos tipos de memoria anteriores....
No he tenido una solución total pero si una parcial aunque no muy buena, esta: antes de guardar el primer dato espero un par de segundos para que se estabilice la energía en el PIC, y también sirve por si el sistema se prende y apaga rápidamente, o hace falso contacto el encendido... además pues guardo datos cada minuto eso reduce las posibilidades de que el sistema se apague en el momento de guardar los datos, es menos riesgoso en comparación que si lo ago cada 100 ms o cada segundo... esto me funciona bien pero tengo la incertidumbre que de algún día pueda fallar...
otras que se me han ocurrido mas complicadas y que no he probado aun son:
1.- creo que por allí en el compilador de CCS anda una interrupción de bajo voltaje, pero creo que no es para todos los PICs.
#INT_LOWVOLT Low voltage detected
talvez podría servir de algo.
2.- utilizar un ADC del PIC para censar el nivel de voltaje en el PIC y si es menor de cierta cantidad no guardar datos....
3.- Verificar que el dato que escribiste en la memoria es correcto...
bueno hay muchas ideas que aparentemente podrían servir pero en todas las anteriores tienes riesgos, jejej la energía se te va y se te fue... si estabas escribiendo el dato y te llama la interrupción a media escritura, igual con el ADC no son muy rápidos y que decir de la verificación del dato a que horas lo rescribes si esta mal si ya se te escapo la energía.
Tal vez teniendo una fuente de respaldo que se encienda una vez apagado el sistema y que se apague todo una vez grabado comprobado que esta bien grabado el ultimo dado....
Bueno creo que ya escribí mucho y luego uno aburre, pero si alguno de ustedes tiene alguna idea para solucionar este problema pues se las agradecería infinitamente (ideas no codigo)..
Saludos a todos
kikelc
-
Este tema ya se trató hace mucho tiempo. No te preocupes te lo busco y te pongo el enlace. Básicamente consiste en un condensador que mantiene la tensión de alimentación durante un breve periodo de tiempo, más que suficiente para darle tiempo al PIC a grabar datos en la EEPROM.
Lo comprové físicamente y funcionaba perfectamente.
-
Lo encontré: http://miarroba.com/foros/ver.php?foroid=6510&temaid=1050574&marcar=corte+alimentacion
Un programa en C de aplicación: http://miarroba.com/foros/ver.php?foroid=46840&temaid=1050572&marcar=corte+alimentacion
-
Hola pocher
Gracias por tus respuestas, esta muy buena esa solucion, y lo mejor es que no es nada complicado ni en hardware ni en software.
Gracias de nuevo y hasta pronto.
-
Alguien tiene las rutinas de comunicacion de un PIC16F873 a una eeprom 24Cxx.. es que necesito leer/escribir en una direccion especifica. La memoria es la 24C04 y no logro entender lo del paginado y esa historia. Porque es tan complicado??