Un Arduino si consuma a causa dell'esecuzione eccessiva dei comandi?


12

Mi scusi se è una domanda sciocca, ma non sono riuscito a trovare una risposta.

Da un po 'mi chiedo se un Arduino (o in generale qualsiasi altro microcontrollore) si rallegri se il codice è leggero e non deve eseguire troppe operazioni. Un codice che ha troppi if, troppi loop e tutti i tipi di calcoli complicati consuma un Arduino prima di un codice che fa lampeggiare un LED?


Vedi anche le domande collegate . . . .
James Waldby - jwpat7,

Risposte:


20

No, il codice non "consuma" l'MCU. In generale, indipendentemente da ciò che si sta facendo, si sta eseguendo lo stesso livello di attività. Fa delay()anche molto lavoro mentre è "inattivo".

Esistono dei comandi per fare in modo che la CPU faccia meno - mettila in modalità IDLE o SLEEP - ma sono usati per risparmiare energia piuttosto che per ridurre "l'usura" sull'MCU.

Naturalmente ci sono cose specifiche che hanno una durata limitata e puoi usarle solo per un numero limitato di volte - cose come scrivere su EEPROM e scrivere sulla memoria Flash - quindi non vuoi farle sempre. A parte questo, no, qualunque cosa tu stia facendo non consuma l'MCU.


2
Ma tutti i semiconduttori invecchiano, no? l'iniezione del portatore caldo e l'instabilità della temperatura di polarizzazione sono i meccanismi che ricordo. Certo ci vorrebbero molti anni.
MV.

5
@MV. Sì, ma ciò che si esegue sul microcontrollore non influisce realmente. Qualunque cosa tu stia facendo, stai eseguendo la CPU (approssimativamente) allo stesso livello. Lo stai usando tutto (praticamente) tutto il tempo.
Majenko

1
Il codice non influenzerà indirettamente il calore generato? I componenti caldi potrebbero logorarsi più rapidamente.
Albero

3
Solo una piccolissima quantità. Anche quando non si fa nulla, si sta lavorando sodo e in elaborazione.
Majenko

Grazie per la risposta. Ora posso rilassarmi e scrivere codici complessi come voglio e non preoccuparmi della durata della mia Arduino! Ma è anche il caso di interagire costantemente con componenti esterni? Lettura di sensori, comunicazione SPI e così via?
ahmadx87,

6

Non è. Bene, potrebbe usurarsi lentamente se lo fai funzionare per 20 anni .... (come la maggior parte degli altri prodotti fisici)? Almeno non si basa sulla complessità del codice ma su quante operazioni di scrittura sono state eseguite nella stessa sezione di memoria. Inoltre, quando si consuma, si bloccherà e non diventerà un codice più semplice come lampeggiare il LED.

Un Arduino (Uno) ha tre parti di memoria. SRAM, FLASH ed EEPROM. SRAM è più simile a un gate a transistor logico. Non si consumerà memorizzando le variabili. FLASH ed EEPROM sono costituiti da cancelli galleggianti. Si consumano lentamente quando si scrivono nuovi dati. Dal foglio dati del microcontrollore Ateml , si afferma:

La memoria Flash ha una durata di almeno 10.000 cicli di scrittura / cancellazione. (Dal capitolo 8.2)

La EEPROM ha una durata di almeno 100.000 cicli di scrittura / cancellazione. (Dal capitolo 8.4)

Tuttavia, la memoria FLASH è uno spazio per l'esecuzione del codice. L'operazione di scrittura non viene eseguita mentre Arduino è in esecuzione. Scrivi la memoria FLASH solo quando carichi un nuovo codice. Quindi si consumerà quando carichi il codice almeno 10.000 volte.

Se lo si desidera, è possibile creare un codice speciale per riprogrammare automaticamente la memoria FLASH allo scopo di conservare i dati variabili quando Arduino è spento. Quando scrivi questo tipo di programma si consumerà lentamente perché la memoria FLASH non ha molta resistenza alla scrittura. Ecco perché ti verrà suggerito di utilizzare EEPROM che ha una maggiore aspettativa di vita, se vuoi conservare i dati anche quando Arduino è spento.

Per riassumere, si consumerà riscrivendo la memoria FLASH o EEPROM, non eseguendo il codice.


6

Per un hobbista:

L'unico problema relativo al software che limita la vita potrebbe essere la scrittura nella memoria FLASH il più velocemente possibile dall'interno di un programma. Ma pochi programmi fanno uso di variabili che devono sopravvivere ad eventi come il cambio delle batterie.

L'unico problema relativo all'hardware che limita la vita è quello di caricare le uscite con carichi a bassa resistenza (lampadine a incandescenza), carichi induttivi (come guidare direttamente i relè meccanici) per nominarne solo due. Ma la domanda riguarda solo il software.


5

... (o generalmente qualsiasi altro microcontrollore) ...

Le altre risposte sono ottime, ma c'è una piccola eccezione.

La RAM ferroelettrica (FRAM) è una forma di memoria che combina la non volatilità del flash e della EEPROM, la scrivibilità della SRAM e la densità della DRAM.

Tuttavia , le operazioni di lettura su FRAM sono distruttive per i dati memorizzati nella FRAM e le operazioni di scrittura sono distruttive per la costruzione stessa della FRAM (e poiché i dati vengono distrutti leggendoli, devono essere riscritti ogni volta). Se il tuo codice si trova in FRAM, quindi eseguirlo consumerà l'MCU in tempo. Ma dato che la FRAM ha una durata in scrittura di milioni di miliardi, è improbabile che l'MCU diventerà inutilizzabile a causa della FRAM durante la vita del dispositivo.

Esempi di MCU che utilizzano FRAM includono la linea MSP430FRxx di TI .


1
In generale, se c'è FRAM non c'è altra memoria. Nemmeno flash.
Majenko

3

Probabilmente no ... Il chip Atmel potrebbe scaldarsi nel tempo (anche un ritardo non lo impedisce), tuttavia se ha la possibilità di rilasciare il suo calore non vedo alcun problema. Ma per lo più solo l'overclocking può causare problemi molto seri o l'utilizzo di Arduino in una scatola completamente chiusa o in un ambiente caldo.

In confronto: molti computer funzionano da anni senza spegnersi, l'Atmel (chip) in questo senso non fa differenza, purché il calore generato possa essere alleviato.

Puoi leggere ulteriori informazioni su un sensore di calore in Atmels qui: Sensore di temperatura interno


2
Il modo in cui Arduino implementa il ritardo è controllando costantemente se è trascorso abbastanza tempo. Quindi eseguire un programma o avere una delaystessa quantità di potenza di elaborazione.
Gerben,

Aggiornerò (rimuoverò) quella parte ... grazie!
Michel Keijzers,

C'è una differenza: la maggior parte dei computer oggi ha tonnellate di funzioni di risparmio energetico; molte cose si spengono quando non sono necessarie, e questo accade praticamente automaticamente. Arduino ha anche modi per ridurre il consumo di energia, ma è necessario utilizzarli in modo esplicito. Se hai bisogno di qualcosa che viene spento per la maggior parte del tempo, learn.sparkfun.com/tutorials/reducing-arduino-power-consumption è un ottimo modo per iniziare. In particolare, il sonno a bassa potenza riduce il consumo di energia di circa mille volte - a differenza delay, che fa girare semplicemente la CPU. Questo ha il suo costo, ovviamente :)
Luaan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.