¿Un Arduino se desgasta por demasiada ejecución de comandos?


12

Disculpe si es una pregunta tonta, pero no pude encontrar una respuesta.

Me he estado preguntando por un tiempo si un Arduino (o generalmente cualquier otro microcontrolador) se alegra si el código es ligero y no tiene que ejecutar demasiadas operaciones. ¿Un código que tiene demasiados ifs, demasiados bucles y todo tipo de cálculos complicados desgasta un Arduino antes que un código que simplemente parpadea un LED?


También vea las preguntas vinculadas . . . .
James Waldby - jwpat7

Respuestas:


20

No, el código no "desgasta" el MCU. En general, sin importar lo que esté haciendo, se realiza aproximadamente el mismo nivel de actividad. Incluso delay()hace mucho trabajo mientras está "inactivo".

Hay comandos para hacer que la CPU haga menos, colóquela en modo IDLE o SLEEP, pero se utilizan para ahorrar energía en lugar de reducir el "desgaste" de la MCU.

Por supuesto, hay cosas específicas que tienen una vida útil limitada y solo puede usarlas una cantidad limitada de veces, como escribir en EEPROM y escribir en la memoria Flash, por lo que no querrá hacerlo todo el tiempo. Aparte de eso, no, no importa lo que esté haciendo, no desgasta el MCU.


2
Pero todos los semiconductos envejecen, ¿no? La inyección de portador caliente y la inestabilidad de la temperatura de polarización son los mecanismos que recuerdo. Por supuesto que llevaría muchos años.
MV.

55
@MV. Sí, pero lo que ejecuta en el microcontrolador realmente no lo afecta. Lo que sea que esté haciendo, está ejecutando la CPU en (aproximadamente) el mismo nivel. Lo estás usando todo (más o menos) todo el tiempo.
Majenko

1
¿El código no influirá indirectamente en el calor generado? Los componentes calientes podrían desgastarse más rápido.
Mástil

3
Solo una pequeña cantidad muy pequeña. Incluso cuando no hace 'nada' está trabajando duro y procesando.
Majenko

Gracias por su respuesta. ¡Ahora puedo reclinarme y escribir códigos tan complejos como quiera y no preocuparme por la vida útil de mi Arduino! ¿Pero es también el caso de interactuar constantemente con componentes externos? ¿Lectores de lectura, comunicación SPI, etc.?
ahmadx87

6

No es. Bueno, podría desgastarse lentamente si lo ejecuta como 20 años ... (como la mayoría de los otros productos físicos)? Al menos no depende de la complejidad del código sino de cuántas operaciones de escritura se realizan en la misma sección de memoria. Además, cuando se gaste, se bloqueará y no se convertirá en un código más simple como parpadear el LED.

Un Arduino (Uno) tiene tres partes de memoria. SRAM, FLASH y EEPROM. SRAM es más como una puerta de transistor lógica. No se desgastará almacenando variables. FLASH y EEPROM consisten en compuertas flotantes. Poco a poco se desgastan cuando escribes nuevos datos. De la hoja de datos del microcontrolador Ateml , dice:

La memoria Flash tiene una resistencia de al menos 10,000 ciclos de escritura / borrado. (Del Capítulo 8.2)

La EEPROM tiene una resistencia de al menos 100,000 ciclos de escritura / borrado. (Del Capítulo 8.4)

Sin embargo, la memoria FLASH es un espacio para la ejecución de código. La operación de escritura no se realiza mientras Arduino se está ejecutando. Solo escribe memoria FLASH cuando carga un nuevo código. Por lo tanto, se desgastará cuando cargue el código al menos 10,000 veces.

Si realmente lo desea, puede hacer un código especial para auto reprogramar la memoria FLASH, generalmente con el propósito de mantener datos variables cuando Arduino está apagado. Cuando escribe este tipo de programa, se desgastará lentamente porque la memoria FLASH no tiene mucha resistencia de escritura. Es por eso que se le sugerirá que use EEPROM, que tiene mucha más esperanza de vida, si desea mantener los datos incluso cuando Arduino está apagado.

En resumen, se desgastará reescribiendo la memoria FLASH o EEPROM, no por la ejecución del código.


6

Para un aficionado:

El único problema relacionado con el software que limita la vida útil podría ser escribir en la memoria FLASH lo más rápido posible desde el interior de un programa. Pero pocos programas hacen uso de variables que necesitan sobrevivir a eventos como el cambio de baterías.

El único problema relacionado con el hardware que limita la vida útil es la sobrecarga de las salidas con cargas de baja resistencia (bombillas incandescentes), cargas inductivas (como la activación directa de relés mecánicos) por nombrar solo dos. Pero la pregunta es solo sobre el software.


5

... (o generalmente cualquier otro microcontrolador) ...

Las otras respuestas son geniales, pero hay una pequeña excepción.

La RAM ferroeléctrica (FRAM) es una forma de memoria que combina la no volatilidad de flash y EEPROM, la capacidad de escritura de SRAM y la densidad de DRAM.

Sin embargo , las operaciones de lectura en FRAM son destructivas para los datos almacenados en la FRAM, y las operaciones de escritura son destructivas para la construcción de FRAM en sí (y dado que los datos se destruyen al leerlos, se deben volver a escribir cada vez). Si su código se encuentra en FRAM, su ejecución desgastará la MCU a tiempo. Pero dado que FRAM tiene una resistencia de escritura de millones de miles de millones, es poco probable que la MCU deje de funcionar debido a FRAM durante la vida útil del dispositivo.

Los ejemplos de MCU que usan FRAM incluyen la línea MSP430FRxx de TI .


1
En general, si hay FRAM no hay otra memoria. Ni siquiera flash.
Majenko

3

Probablemente no ... El chip Atmel podría calentarse con el tiempo (incluso un retraso no lo impide), sin embargo, si tiene la posibilidad de liberar su calor, no veo ningún problema. Pero sobre todo, el overclocking puede causar problemas realmente serios, o usar el Arduino en una caja completamente cerrada o en un ambiente caluroso.

En comparación: muchas computadoras funcionan durante años sin apagarse, el Atmel (chip) no tiene ninguna diferencia, siempre y cuando se pueda aliviar el calor generado.

Puede leer más sobre un sensor de calor en Atmels aquí: Sensor de temperatura interna


2
La forma en que Arduino implementa el retraso es verificando constantemente si ha pasado suficiente tiempo. Por lo tanto, ejecutar un programa o tener un delayutiliza la misma cantidad de potencia de procesamiento.
Gerben

Actualizaré (eliminaré) esa parte ... ¡gracias!
Michel Keijzers

Hay una diferencia: la mayoría de las computadoras actuales tienen toneladas de funciones de ahorro de energía; muchas cosas se apagan cuando no son necesarias, y esto sucede de forma bastante automática. El Arduino también tiene formas de reducir el uso de energía, pero debe usarlas explícitamente. Si necesita algo que está apagado la mayor parte del tiempo, learn.sparkfun.com/tutorials/reducing-arduino-power-consumption es una excelente manera de comenzar. En particular, la suspensión de baja potencia reduce el consumo de energía aproximadamente mil veces delay, a diferencia de lo que hace girar la CPU. Esto tiene su costo, por supuesto :)
Luaan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.