Pages: [1]   Go Down
Author Topic: pregunta mantener informacion en falla de energia????  (Read 1696 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hola buen dia tengan todos, bueno tengo una pregunta:

¿Como puedo mantener en memoria una cierta informacion en mi arduino si se llegara a perder la energia en algun momento??

Estoy trabajando con motores a pasos y servomotores pero me ha surgido esa pequeña duda, si el arduino se encuentra en pleno proceso y se llegara a perder el suministro de energia por alguna razon, ¿¿¿sse puede mantener la posicion de los motores hasta q se reestableciera de nuevo la energia??? y si es asi, ¿¿¿como se logra????
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hola en caso de que quieras conservar un dato aun cuando no haya energía debes de guardar esa información en la memoria eeprom, cuando la energía se re establezca lo primero que harias en el arduino seria leer los datos de la eeprom en la misma página de arduino estan las instrucciones para hacer eso http://www.arduino.cc/es/Reference/EEPROM , desconosco si hay un metodo para mantener los motores en la misma posicion sin energia
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hola israel_332, muchas gracias por responder tan pronto

ya he checado la informacion q me proporcionaste pero aun no se como me puede servir ... mejor dicho como debo utilizar  esta libreria, ¿podrias orientarme un poco mas? 

gracias
Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Haber si lo entiendes un poco mejor con este ejemplo.


Code:

#include <EEPROM.h>

void setup()
{

Serial.begin(9600);

//Grabar en posicion 1 de la memoria el valor 3.
    EEPROM.write(1, 3);


void setup()
{
 
}

void loop()
{
  valor = EEPROM.read(1);
  Serial.print(a); //Imprime el valor de la direccion 1, un 3
 
  delay(500);
}
Logged

Trabajando en ...

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

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

Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok gracias por la paciencia pero emm bueno es q soy todo un novato en esto la verdad, dejame explicarme un poco mejor smiley

digamos q mi arduino esta corriendo y tengo muchas lineas en el programa y en ese momento se va la energia, ¿como puedo al volver la energia dirigirme directo a la linea donde se quedo???

¿¿puedo por ejemplo numerar mis lineas e ir guardando el numero de linea en la eeprom? para al inicio del programa hacer una lectura de esta y ver si contiene un numero de linea especifica???

y muchas gracias de verdad por contestar tan pronto
Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Trabajando en ...

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

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

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 958
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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/
« Last Edit: November 08, 2012, 11:06:20 am by Heke » Logged

CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: November 08, 2012, 12:59:25 pm by Igor R » Logged


Argentina
Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


 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.

Un saludo.

Me sumo en un todo con eso!( sumando escribir un comando de "0" en la eeeprom, por las dudas para que en el setup del arduino controle, si el valor es 0 es una tarea nueva, sino, es una anterior que hay que resumir)

Otro mecanismo de seguridad para evitar errores de posición, es que al iniciar el código luego de una interrupción de energía, mueva los ejes hasta un tope para ver si los pasos del paso a paso coinciden con el ultimo valor del programa...

espero haber expresado algo que se entienda y sirva de algo (¿?) smiley-grin

Saludos,

Charlie
Logged

Pages: [1]   Go Up
Jump to: