È possibile rimuovere bruscamente l'alimentazione di Arduino? [chiuso]


12

Se ho un Arduino, posso accendere e spegnere bruscamente senza corromperlo? Se sto progettando un prodotto con un interruttore on / off, devo incorporare un ritardo prima di spegnere l'alimentazione in modo che il microcontrollore possa effettuare uno spegnimento pulito di qualche tipo? O va bene solo collegare un interruttore SPST alla linea elettrica di Arduino?

(Progettando un prodotto, intendo usare un ATmega con codice Arduino in modo indipendente su una scheda personalizzata con altri componenti.)

Modifica: Per Arduino intendo semplicemente fare il flashing del bootloader di Arduino in modo da poter programmare in Arduino invece di AVR. Il chip che voglio usare è Atmel atmega328P Non ho bisogno di alcun utilizzo EEPROM.


3
Nota che "Arduino" è un nome commerciale in modo da ottenere la "A" maiuscola. I capitali contano.
Transistor

3
Forse se in realtà è un "Arduino", ma la domanda riguarda effettivamente un ATmega su una scheda personalizzata che sarebbe più un "Arduino". Per quanto riguarda l'argomento attuale, oltre a ATmega si dovrebbero considerare anche tutti gli altri componenti che potrebbero avere uno stato , in particolare memorie esterne - ad esempio, se c'è una scheda SD che richiede una grande quantità di pensiero e preoccupazione. Infine, alcuni alimentatori fanno cose cattive all'accensione / spegnimento.
Chris Stratton,

1
Possiamo presumere che tu non stia utilizzando una scheda SD?
UKMonkey

È il tuo prodotto Devi salvare qualcosa se l'alimentazione si spegne? La risposta a quella domanda risponde alla tua domanda.
StainlessSteelRat

Risposte:


18

Sì, è possibile spegnere bruscamente un Arduino.

Bene, soprattutto al sicuro.

I processori utilizzati nei vari Arduinos hanno tre tipi di memoria:

  1. Flash: dove è memorizzato il programma. Il tuo programma può leggere materiale da qui, ma non può scriverlo.

  2. RAM: dove vengono conservate le variabili del programma mentre il programma è in esecuzione. I dati qui scompaiono quando si spegne Arduino. Il tuo programma legge e scrive qui costantemente.

  3. EEPROM - Dove il tuo programma può memorizzare roba di cui avrà bisogno alla prossima esecuzione. Di solito cose che cambiano raramente, ma sono necessarie ogni volta che il programma viene eseguito. Come i dati di calibrazione per un sensore.

La maggior parte dei programmi utilizza solo Flash e RAM. Puoi accendere e spegnere Arduino ogni volta che vuoi con quei programmi.

Se il tuo programma scrive su EEPROM, interrompere l'alimentazione durante la scrittura su EEPROM potrebbe corrompere i dati lì.

In che modo ciò influisce sul programma dipende da quali sono i dati.

Se corrompe i dati di calibrazione di un sensore, si otterrebbero misurazioni errate per tutto ciò che il sensore sta rilevando.

Se si scrivono checksum con i dati EEPROM, è possibile rilevare il danneggiamento e il programma potrebbe arrestarsi invece di utilizzare dati non validi.

Naturalmente, sapresti se il tuo programma scrive su EEPROM: devi caricare una libreria separata e usare comandi speciali per leggere e scrivere nell'area EEPROM.

Il pericolo è davvero solo in quel breve momento in cui scrivi alla EEPROM. Dal momento che ciò accade raramente (e di solito solo in condizioni controllate), sarà anche raro corrompere i dati EEPROM.


Sommario:

Puoi accendere e spegnere un Arduino a tuo piacimento senza alcun pericolo, a meno che tu non stia usando la EEPROM - e anche in questo caso riuscirai a cavartela per la maggior parte del tempo.


8
"Flash: dove è memorizzato il tuo programma. Il tuo programma può leggere materiale da qui, ma non può scriverlo." - Molti chip AVR (il 328P sicuramente incluso) possono auto-programmare il flash. In effetti, è così che funziona il ciclo di programmazione di Arduino; il bootloader, in esecuzione sul 328P, programma il 328P stesso. È abbastanza improbabile che l'OP lo farà, ma è possibile.
marcelm

2
Inoltre, se utilizzi un Arduino con hardware aggiuntivo su di esso (come un sensore), potresti anche aggiungere un condensatore e spendere un portpin per misurare l'alimentazione esterna, in modo che quando scompare, puoi salvare in modo sicuro su eeprom qualunque cosa tu voglia volere. Su un ATmega un ciclo di scrittura EEPROM è in genere 3,4 ms. Quindi, se il tuo condensatore può mantenere in vita il processore per 5 ms e prima di ogni operazione di scrittura di eeprom controlli l'alimentazione esterna, sei al sicuro.
vsz

10

Sì, puoi spegnere rapidamente senza corromperlo.

L'unica ragione che posso vedere per mettere un ritardo nello spegnimento del circuito sarebbe per motivi di sicurezza o funzionali delle tue periferiche esterne.

Ad esempio allo spegnimento, è necessario salvare i dati nella memoria non volatile. O allo spegnimento, è necessario assicurarsi che un meccanismo si trovi in ​​una posizione sicura allo spegnimento.

Ciò richiederebbe il monitoraggio della fornitura e una capacità di mantenimento sufficiente per far funzionare il processore e qualsiasi funzione che fosse richiesta per essere eseguita.


6

Il termine Arduino si riferisce ad un ampio spettro di schede per microcontrollori che hanno vari chip diversi e l'effetto della perdita di potenza varia quindi. Quindi, consiglierei di inserire l'esatto numero di parte del chip ATmega in uso. Ma, in generale, per chip come ATmega328, vale quanto segue.

Sì, puoi rimuovere il potere da un Arduino senza corrompere o danneggiare nulla, ma tieni presente le seguenti cose:

  • Se il codice utilizza EEPROM, il flash potrebbe danneggiarsi o i dati potrebbero non essere archiviati in modo accurato quando il dispositivo lampeggia e l'alimentazione viene rimossa.

  • L'unico modo in cui un'improvvisa perdita di potenza può danneggiare a parte EEPROM è quello dei dispositivi utilizzati con Arduino (ad esempio una scheda SD).

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.