Como guardar datos si se corta la alimentación??

Hola, otra vez estoy por aqui, he estado buscando info por el foro y lo unico que he encontrado ha sido lo que quiero hacer yo pero no como hacerlo, el caso es que en el proyecto que quiero hacer necesito que si se corta la luz guarde los datos en una eeprom 24fc256 que ya se como escribir y leer, el caso esque primero si se va la luz tengo idea de hacer si detecto con una interrupcion externa en d2 o d3 que recivira unos 4v que se haran a traves de un divisor de resistencias de una bateria de 12v, pero el tiempo que tarda en guardarlo si se ha ido la alimentación como lo hago???

Se me ha ocurrido poner unos condensadores grandes pero serian muy abultados, alguna otra idea, como lo habeis hecho vosotros???

Porque no haces que se vaya guardando cada X milisegundos?? asi siempre estará guardado sin tener que poner nada externo.

Yo no haría eso........acabarías con la vida útil de lectura/escritura de la EEPROM en unos pocos meses.........no hay que olvidarse de ese handycap que tienen las EEPROM.
Salu2.

Cierto, no habia caido en eso :roll_eyes:

Son dos motores pap que se mueven y quiero q cuando se corte la alimentacion ya que va a ser portable por si me quedo sin bateria pues que si la cambio siga donde este, son muchos pasos q tendria q grabar asi como decis moriria la memoria muy pronto, lo unico que se me habia ocurrido es usar unos condensadores gordos, acabo de conseguir destripando un par de cosillas que iba a tirar uno de 6800uf 16v y otro de 4700uf 25v , podrian valer???

Creo que he encontrado la solucion, un ultracondensador que les llaman, son un poco carillos pero dan 4F ahi es nada y son bastante pequeños, que os parece???

http://www.ebay.es/itm/2PCS-4F-5-5V-KAMCAP-SP-Z-Combined-Super-Capacitor-Low-ESR-Moderate-Current-/261117323300?pt=LH_DefaultDomain_0&hash=item3ccbce2824#ht_2205wt_1168

La carga de esos condensadores te daría tiempo para guardar lo que sea en la EEPROM, el problema es....¿como guardar en la memoria en qué parte del trabajo te has quedado? No se me ocurre cómo, a lo mejor eso ya lo tienes claro. Detectar cuando cae la tensión es sencillo, basta con que uses la patilla de Vref y le asignas una función de grabado de EEPROM al arduino cuando esa tensión baje de X........
Salu2.

para saber en que estado se ha quedado, cada vez que empieza a moverse una secuencia cambiaria un estado a true por ejemplo que se graba en la memoria tb y el motor empieza a moverse, al cortarse la corriente primero comprobaria si alguno de los motores ha cambiado su estado de la posicion de reposo, false y grabaria el numero de pasos que lleva el motor, en caso de que todo estuviese en reposo pues poco tiene q grabar, esa es la teoria vamos.

En cuanto a detectar la caida de la corriente pues no lo tengo muy claro porque vref nunca lo he usado, tenia idea de poner una funcion para los pines d2 o d3 de las interrupciones por flanco descendente creo q se dice vamos si baja la corriente de 2,5 creo es cuando cuenta como 0 pues que lea en numero de pasos y los guarde. Vref me suena de haber leido q era para dar mas bits de precision en lectura de sensores, pero no tengo muy claro como funciona, si me podrias poner un ejemplo, partiendo de que de la bateria de 12 o de 5v porque estoy por pillarme una en dealextreme con esas dos salidas, haciendo un dividor le meto al vref 4v para que no haya problemas, ahora como leo ese pin.

Hola, por fin tengo los condensadores, pero como detecto en la interrupcion la caida, he puesto attachInterrupt(0, detecto, LOW); y en la funcion detecto que imprima caida por l puerto serial pero si quito la alimentacion solo se para de girar el motor y ahi se queda, hay que poner algo mas?, alguna idea por donde ir? el esquema que he puesto es este:

4,5v
|
|--pindigital 2
|
R 10k
|

  • masa

El código es este:

int dirPin = 8;
int stepperPin = 9;
int stept;
void setup() {
  pinMode(2, INPUT);
  pinMode(dirPin, OUTPUT);
  pinMode(stepperPin, OUTPUT);
  Serial.begin(9600);
  sei();
  EIMSK |= (1<<INT0);
  EICRA |= (1<<ISC01);
  //attachInterrupt(0, parpadeo, LOW); //es lo mismo que lo anterior 
}
void step(boolean dir,int steps){
  digitalWrite(dirPin,dir);
  delay(100);
  for(int i=0;i<steps;i++){
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(5000);  
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(200); 
    stept=i;
  }
}
void loop(){
  step(false,600*10);
  delay(400);
}
ISR(INT0_vect)
{
  Serial.println("corte");
  Serial.println(stept);
  
}

Un saludo.

Alguien que me pueda ayudar , please!!! q toy atascao y no doy con el fallo, yo creo q deberia ir bien, si quito corriente se va a masa el pin por la resistencia, y entonces deberia entrar en la interrupcion y imprimir por el puerto serie "corte" y el numero del paso en el que estaba. a veces si que llega a poner cort o co pero no entero, los 5v estoy probandolos a meter con los 5v de arduino de momento para probar, he probado con un pulsador y un condensador para evitar los rebotes pero tampoco, algo hago mal.

Por cierto el condensador de 4 Faradios va de fabula, dura como 15 segundos hasta que baja de 3,9-3.7 cuando las cosas empiezan a fallar.