Um Arduino se gasta com muita execução de comandos?

12

Com licença, se é uma pergunta boba, mas não consegui encontrar uma resposta.

Estou pensando há algum tempo se um Arduino (ou qualquer outro microcontrolador) fica feliz se o código é leve e não precisa executar muitas operações. Um código com muitos ifs, muitos loops e todos os tipos de cálculos complicados desgastam um Arduino mais cedo do que um código que apenas pisca um LED?

ahmadx87
fonte
Veja também as perguntas vinculadas . . . .
James Waldby - jwpat7

Respostas:

20

Não, o código não "desgasta" o MCU. Em geral, não importa o que você esteja fazendo, aproximadamente o mesmo nível de atividade está sendo realizado. Até delay()faz muito trabalho enquanto está "ocioso".

Existem comandos para fazer com que a CPU faça menos - coloque-a no modo IDLE ou SLEEP -, mas eles são usados ​​para economizar energia, em vez de reduzir o "desgaste" no MCU.

É claro que existem coisas específicas que têm uma vida útil limitada e você pode usá-las apenas uma quantidade limitada de vezes - coisas como gravar na EEPROM e gravar na memória Flash - para que você não queira fazer isso o tempo todo. Fora isso, não, não importa o que você esteja fazendo, não desgasta o MCU.

Majenko
fonte
2
Mas todos os semicondutores envelhecem, não é? injeção de portador quente e instabilidade de temperatura de polarização são os mecanismos que me lembro. Claro que levaria muitos anos.
MV.
5
@MV. Sim, mas o que você executa no microcontrolador realmente não o afeta. O que quer que você esteja fazendo, você está executando a CPU (aproximadamente) no mesmo nível. Você está usando tudo isso (praticamente) o tempo todo.
Majenko
1
O código não influencia indiretamente o calor gerado? Componentes quentes podem se desgastar mais rapidamente.
Mast
3
Apenas uma quantidade minúscula. Mesmo ao fazer 'nada', está trabalhando duro e processando.
Majenko
Obrigado por sua resposta. Agora eu posso me inclinar para trás e escrever códigos tão complexos quanto eu quiser e não me preocupo com a vida útil do meu Arduino! Mas é também o caso da interação constante com componentes externos? Sensores de leitura, comunicação SPI e assim por diante?
Ahmadx87
6

Não é. Bem, ele pode se desgastar lentamente se você o executar por 20 anos .... (como a maioria dos outros produtos físicos)? Pelo menos, não depende da complexidade do código, mas de quantas operações de gravação foram feitas na mesma seção de memória. Além disso, quando estiver desgastado, ficará bloqueado e não se tornará um código mais simples como piscar o LED.

Um Arduino (Uno) possui três partes de memória. SRAM, FLASH e EEPROM. A SRAM é mais como uma porta lógica de transistor. Não se desgastará ao armazenar variáveis. FLASH e EEPROM consistem em portões flutuantes. Eles se desgastam lentamente quando você escreve novos dados. Na folha de dados do microcontrolador Ateml , ele afirma:

A memória Flash possui resistência de pelo menos 10.000 ciclos de gravação / apagamento. (Do capítulo 8.2)

A EEPROM possui resistência de pelo menos 100.000 ciclos de gravação / apagamento. (Do capítulo 8.4)

No entanto, a memória FLASH é um espaço para execução de código. A operação de gravação não é feita enquanto o Arduino está em execução. Você só escreve memória FLASH ao fazer upload de um novo código. Portanto, ele se desgastará quando você enviar o código pelo menos 10.000 vezes.

Se você realmente quiser, pode criar um código especial para auto-reprogramar a memória FLASH, geralmente com o objetivo de manter dados variáveis ​​quando o Arduino estiver desligado. Quando você escreve esse tipo de programa, ele se desgasta lentamente, porque a memória FLASH não possui muita resistência à escrita. É por isso que você será sugerido a usar a EEPROM, que tem muito mais expectativa de vida, se desejar manter os dados mesmo quando o Arduino estiver desligado.

Para resumir, ele se desgastará reescrevendo a memória FLASH ou EEPROM, não pela execução do código.

Bumsik Kim
fonte
6

Para um hobby:

O único problema relacionado ao software que limita a vida útil pode estar gravando na memória FLASH o mais rápido possível de dentro de um programa. Porém, poucos programas usam variáveis ​​que precisam sobreviver a eventos como trocar baterias.

O único problema relacionado ao hardware que limita a vida útil é o carregamento de saídas com cargas de baixa resistência (lâmpadas incandescentes), cargas indutivas (como acionar diretamente relés mecânicos), para citar apenas dois. Mas a questão é apenas sobre software.

st2000
fonte
5

... (ou geralmente qualquer outro microcontrolador) ...

As outras respostas são ótimas, mas há uma pequena exceção.

A RAM ferroelétrica (FRAM) é uma forma de memória que combina a não volatilidade do flash e da EEPROM, a capacidade de gravação da SRAM e a densidade da DRAM.

No entanto , as operações de leitura no FRAM são destrutivas para os dados armazenados no FRAM, e as operações de gravação são destrutivas para a própria construção do FRAM (e, como os dados são destruídos pela leitura, eles devem ser gravados novamente). Se o seu código estiver localizado na FRAM, sua execução acabará com o MCU com o tempo. Mas, como a FRAM tem uma resistência de gravação de milhões de bilhões, é improvável que o MCU se torne inoperável devido à FRAM durante a vida útil do dispositivo.

Exemplos de MCUs que usam FRAM incluem a linha MSP430FRxx da TI .

Ignacio Vazquez-Abrams
fonte
1
Em geral, se houver FRAM, não há outra memória. Nem mesmo flash.
Majenko
3

Provavelmente não ... O chip Atmel pode ficar mais quente com o tempo (mesmo que um atraso não impeça isso), no entanto, se houver a possibilidade de liberar seu calor, não vejo problema. Porém, principalmente o overclocking pode causar problemas realmente sérios, ou usar o Arduino em uma caixa totalmente fechada ou em um ambiente quente.

Em comparação: muitos computadores estão funcionando há anos sem desligar, o Atmel (chip) nesse sentido não faz diferença, desde que o calor gerado possa ser aliviado.

Você pode ler mais sobre um sensor de calor em Atmels aqui: Sensor de temperatura interno

Michel Keijzers
fonte
2
A maneira como o Arduino implementa o atraso é verificando constantemente se já passou tempo suficiente. Portanto, executar um programa ou delayusar a mesma quantidade de poder de processamento.
Gerben
Vou atualizar (remover) essa parte ... obrigado!
Michel Keijzers
Há uma diferença - a maioria dos computadores hoje possui muitos recursos de economia de energia; muitas coisas desligam quando não são necessárias, e isso acontece quase automaticamente. O Arduino também tem maneiras de reduzir o uso de energia, mas você precisa usá-lo explicitamente. Se você precisar de algo que seja desligado na maioria das vezes, learn.sparkfun.com/tutorials/reducing-arduino-power-consumption é uma ótima maneira de começar. Em particular, o sono de baixa potência reduz o consumo de energia em cerca de mil vezes - ao contrário delay, o que apenas gira a CPU. Isso tem seu custo, é claro :)
Luaan