cómo detectar un fallo de alimentación y hacer que el microcontrolador guarde datos en EEPROM

1

Estoy usando Arduino nano para un proyecto en el que tengo un contador que aumenta continuamente. Y quiero mantener la cuenta después de un corte de energía. Los datos cambian con mayor frecuencia, por lo que almacenarlos continuamente en la EEPROM no es una opción, ya que la EEPROM tiene una limitación del ciclo de borrado / escritura. Además, los datos son de 4 bytes como máximo.

Por favor, ¿alguien puede sugerir un IC o un diseño de circuito que pueda detectar un fallo de alimentación e interrumpir a Arduino para que pueda guardar datos en la EEPROM?

Supongo que tendré que usar un condensador para alimentar a Arduino después de que se apague la alimentación para que Arduino pueda guardar datos en la EEPROM.

    

3 respuestas

6

Este es el diagrama principio que necesitas. Los valores de R1 y R2 dependen del voltaje de la fuente de alimentación y del voltaje de entrada máximo de los pines de la CPU.
El valor de C1 depende de la cantidad de corriente que esté usando su circuito y del tiempo que necesite para mantener la energía y de qué nivel. Agregar un regulador después de esa tapa puede mejorar mucho su tiempo permitiéndole usar condensadores más pequeños.
Para calcular el valor de C (su próxima pregunta obvia) necesitamos todos los datos que solicita Tony Steward.

simular este circuito : esquema creado usando CircuitLab

    
respondido por el Oldfart
2

Puede usar un capacitor y un supervisor de voltaje de 3 pines para la buena señal de alimentación. Aquí hay algunos ejemplos de Instrumentos Texas.

Como Oldfart y Tony señalaron, debe especificar el voltaje y el consumo de energía para obtener más detalles.

Tenga cuidado, el consumo de energía es mayor cuando se escribe en eeprom.

Supongo que intentas hacer algún tipo de contador irreversible, así que aquí hay algunos consejos:

  • Haga algún tipo de copia de seguridad, los datos en el eeprom se borrarán antes de escribir, por lo que si algo sucede obtendrá un valor más alto que el real. Puede invertir todos los bits como el valor de eprom para disminuir la forma FFFFFFFF a 00000000
  • Agregue una suma de comprobación para verificar la integridad de los datos.
  • Incluso si no está apagado, escriba el valor en eeprom de vez en cuando, en caso de error, para tener un valor reciente.
  • Para aumentar el límite de borrado / escritura, use muchas ubicaciones en lugar de una, en el momento de encendido lea el valor más alto, al apagar sobrescriba el valor más bajo. Si usa 16 ubicaciones, tendrá una resistencia de eeprom 16 veces mayor.
respondido por el Dorian
1

Aquí hay una solución alternativa que he usado para este problema en el pasado.

  1. Solo escribe el eeprom cada 10 ciclos, o cada 100, o lo que sea. Para mi aplicación, perder un par de cargos en la pérdida de energía no fue un problema.

  2. Escriba en muchas ubicaciones de eeprom para extender el desgaste. Probablemente no esté utilizando todos su eeprom, por lo que lo que puede hacer es asignar, digamos 20 variables para almacenarlo. Escríbales secuencialmente, y cuando arranque solo use el valor más grande. Esto le dará instantáneamente 20 veces la longevidad.

Hay otros trucos que puedes usar dependiendo del medio. Por ejemplo, con flash puede escribir la misma dirección más de una vez entre borrados.

    
respondido por el Drew

Lea otras preguntas en las etiquetas