¿Es seguro eliminar abruptamente el poder de Arduino? [cerrado]

12

Si tengo un Arduino, ¿puedo encender y apagar abruptamente el sistema sin dañarlo? Si estoy diseñando un producto que tiene un interruptor de encendido / apagado, ¿debo incorporar un retraso antes de apagar la alimentación para que el microcontrolador pueda apagarse de alguna manera? ¿O está bien simplemente conectar un interruptor SPST a la línea de alimentación de Arduino?

(Al diseñar un producto, me refiero a usar un ATmega con código Arduino de forma independiente en una placa personalizada con otros componentes).

Editar: Por Arduino me refiero a flashear el gestor de arranque Arduino para poder programar en Arduino en lugar de AVR. El chip que quiero usar es Atmel atmega328P. No necesito ningún uso de EEPROM.

Michael Sohnen
fuente
3
Tenga en cuenta que "Arduino" es una marca, por lo que obtiene una "A" mayúscula. Las capitales importan.
Transistor
3
Tal vez si en realidad es un "Arduino", pero la pregunta es en realidad sobre un ATmega en un tablero personalizado que sería más un "arduino". En cuanto al tema real, además del ATmega, también se deben considerar otros componentes que puedan tener estado , especialmente los recuerdos externos, por ejemplo, si hay una tarjeta SD que necesita una gran cantidad de pensamiento y preocupación. Finalmente, algunas fuentes de alimentación hacen cosas desagradables al encender / apagar.
Chris Stratton
1
¿Podemos suponer que tampoco estás usando una tarjeta SD?
UKMonkey
Es tu producto. ¿Necesita guardar algo si se apaga? La respuesta a esa pregunta responde a su pregunta.
StainlessSteelRat

Respuestas:

18

Sí, es seguro apagar abruptamente un Arduino.

Bueno, mayormente seguro.

Los procesadores utilizados en los diversos Arduinos tienen tres tipos de memoria:

  1. Flash: dónde se almacena su programa. Su programa puede leer cosas desde aquí, pero no puede escribirlo.

  2. RAM: donde se guardan las variables del programa mientras el programa se ejecuta. Los datos aquí desaparecen cuando apaga el Arduino. Su programa lee y escribe aquí constantemente.

  3. EEPROM: donde su programa pueda almacenar cosas, necesitará la próxima vez que se ejecute. Por lo general, las cosas que cambian raramente, pero se necesitan cada vez que se ejecuta el programa. Como datos de calibración para un sensor.

La mayoría de los programas solo usan Flash y RAM. Puede encender y apagar el Arduino en cualquier momento que desee con esos programas.

Si su programa escribe en EEPROM, apagar la alimentación mientras escribe en la EEPROM podría dañar los datos allí.

La forma en que eso afecta su programa depende de los datos que tenga.

Si corrompe los datos de calibración de un sensor, obtendría malas mediciones para lo que sea que esté detectando el sensor.

Si escribe sumas de verificación con sus datos EEPROM, entonces podría detectar la corrupción y su programa podría cerrarse en lugar de usar datos incorrectos.

Por supuesto, usted sabría si su programa escribe en la EEPROM: debe cargar una biblioteca separada y usar comandos especiales para leer y escribir en el área de la EEPROM.

El peligro es realmente solo en ese breve momento cuando escribe en la EEPROM. Como eso ocurre raramente (y generalmente solo bajo condiciones controladas), también será raro corromper los datos EEPROM.


Resumen:

Puede encender y apagar un Arduino a voluntad sin peligro, a menos que esté usando la EEPROM, e incluso así se saldrá con la suya la mayor parte del tiempo.

JRE
fuente
8
"Flash: dónde está almacenado tu programa. Tu programa puede leer cosas desde aquí, pero no puede escribirlo". - Muchos chips AVR (el 328P definitivamente incluido) pueden autoprogramar el flash. De hecho, así es como funciona el ciclo de programación Arduino; El gestor de arranque, que se ejecuta en el 328P, programa el 328P mismo. Es poco probable que el OP lo haga, pero es posible.
marcelm
2
Además, si usa un Arduino con hardware adicional, (como un sensor), también podría agregar un condensador y gastar un puerto para medir la potencia externa, de modo que cuando desaparezca, pueda ahorrar de forma segura para eeprom lo que sea desear. En un ATmega, un ciclo de escritura EEPROM suele ser de 3,4 ms. Entonces, si su condensador puede mantener vivo el procesador durante 5 ms, y antes de cada operación de escritura de eeprom verifica la alimentación externa, está a salvo.
vsz
10

Sí, puede apagar la alimentación rápidamente sin corromperla.

La única razón que puedo ver para retrasar el apagado del circuito sería por razones de seguridad o funcionales de sus periféricos externos.

Por ejemplo, al apagar, necesita guardar datos en la memoria no volátil. O al apagarlo, debe asegurarse de que el mecanismo esté en una posición segura al apagarlo.

Esto requeriría monitorear el suministro y tener suficiente capacidad de retención para ejecutar el procesador y cualquier función que se requiera realizar.

JCollins
fuente
6

El término Arduino se refiere a un espectro muy amplio de placas de microcontroladores que tienen varios chips diferentes, por lo que el efecto de la pérdida de potencia varía. Por lo tanto, le recomendaría que coloque el número de pieza exacto del chip ATmega que se está utilizando. Pero, de manera general para chips como ATmega328, lo siguiente es válido.

Sí, puede eliminar la energía de un Arduino sin corromper o dañar nada, pero tenga en cuenta lo siguiente:

  • Si su código utiliza EEPROM, entonces el flash podría corromperse o los datos podrían no almacenarse con precisión cuando el dispositivo parpadea y se corta la alimentación.

  • La única forma en que una pérdida repentina de energía puede hacer daño aparte de la EEPROM es en los dispositivos que se usan con Arduino (por ejemplo, una tarjeta SD).

Electric_90
fuente