Go Down

Topic: pregunta mantener informacion en falla de energia???? (Read 1 time) previous topic - next topic

flico

Grabar en la eeprom del micro continuamente lo puede dañar, tendrías que usar una memoria externa como una 24L08, luego en cada paso que quieres poder recuperar en caso de corte vas incrementando una variable y grabas su valor  en la eeprom externa
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

velon

Amigo sustirijiyo.

Lo que he leído de tu segundo post, me dice que lo que quieres hacer es del todo imposible (que me rectifiquen los más entendidos), puesto que cuando se reinicia un microcontrolador... A ver como te pongo un ejemplo.

Si, cuando uno se levanta por la mañana, lo primero que hace, es darse por despierto, toma el control de su estado de ánimo y procede con lo que se le antoje.

En tu Arduino, como es el caso, lo primero que hace cuando recibe la tensión es, darse un repaso a su memoria (la que le dice que es esclavo de Arduino) y ejecutar la rutina que tiene guardada en su memoria la que tu le has guardado con tu programa actual (nada que ver con la de 'Arduino').

Se deduce que no hay forma de interceptar este proceder, debido a que es lo que hay en el sistema. Lo que tu quieres, es poco menos que imposible, ya que tendrías que (como ya te ha dicho Flico) guardar cada instante de la rutina de TU programa, que no el sistema de Arduino (al que tu no puedes acceder).

En definitiva, explícate mejor sobre lo que quieres y tal vez te puedan ayudar.

Un saludo.

Heke

#7
Nov 08, 2012, 05:04 pm Last Edit: Nov 08, 2012, 05:06 pm by Heke Reason: 1
Yo coincido que si no imposible, lo mas parecido.

Pero te puedo dar una idea que valdria:

Añadele una memoria eeprom, añadele un sistema de energia extra (puede ser un megacondensador o una pequeña bateria que no necesita mucho tiempo de aguante) y cuando detectes que se va la tension el arduino lo sabe por medio de una interrupcion que habras programado, detiene el programa y vuelca en una eprom pequeñita, no hace falta mucha capacidad, los datos de donde se encontraba o las variables de tu invento.

Cuando luego vuelva la tension, el programa de cabecera lee si hay datos en esa eprom y si es asi y ve que no ha teminado la faena, salta a los parametros en que se quedo antes de quedarse sin energia y si no existe porque concluyo la faena pues no salta a ningun lado, continua procedimiento normal.

Con esto lo tiene solucionado si o si.

Un saludo.

PD: Si la luz NO se va cada 2 x 3 puedes emplear la propia eprom del arduino, pues los casos seran contados... si esto pasa a menudo pues emplea una externa:
http://kans01.wordpress.com/2008/03/13/usando-una-memoria-eeprom-desde-arduino/
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

sustirijiyo

Hola BUenos Dias a todos.

vamos por partes... emm primero muchas gracias a todos por tomarse el tiempo de contestar

bueno ya estaba pensando gracias a Flico en usar una eeprom externa, y bueno tampoco tenia idea de como hacerlo, aunq debo decir q yaestaba pensando en algo como lo q menciona Heke:

habia pensado en etiquetar cada una de las lineas con un numero,
crear una variable q fuera incrementandose linea a linea
y esta variable irla guardando en la eeprom
al momento de q se fuera la energia quedaria guardada la informacion y al momento de reestablecerse el sistema, al inicio del loop mandar leer la eeprom, esto regresaria un valor entero
y con este valor entero enviaria directo a la linea con la etiqueta correspondiente a ese entero.

bueno, esa es mi idea actual, pero espero q me ayuden un poco mas y me digan si es posible hacerlo asi o si fuera posible de otra manera tal ves me podrian orientar un poco mas.

gracias de nuevo y saludos.

Igor R

#9
Nov 08, 2012, 06:49 pm Last Edit: Nov 08, 2012, 06:59 pm by Igor R Reason: 1
No sé que tipo de programa tienes en mente, pero una idea puede ser hacerte una máquina de estados, ya que te resultaría relativamente sencillo volver donde estabas. Tendrías que ir guardando también todas las variables que quieras reponer al inicio.

Ejemplo: Estado 1 => Led off y Estado 2=>Led On y la transición entre ellos es el estado de un pulsador. Tengo una variable llamada estado (byte) que indica en cual de los dos estados que estoy. Cada vez que cambio de estado, guardo en memoria no volátil dicha variable. Al inicio del programa, lo que haces es leer de memoria no volátil dicha variable, y ese será tu estado de inicio. El programa ejecuta las acciones que toque en cada estado, por lo que al iniciar irá al último estado guardado y seguirá su flujo normal.

Incluso podrías tener un camino diferente si se ha ido la corriente, y hacer ciertas cosas que te interesen (ejemplo arranque suave de motores, etc). Esto ya es dependiendo de lo que estes haciendo....

Bueno, explicado rápidamente y algo sencillo. Eso si, necesitas tener un mecánismo que ante un corte, te de tiempo de guardar todos tus registros de control en memoria.

http://arduino.cc/forum/index.php/topic,75826.0.html

Saludos


Igor R.

Go Up