Est-il sûr de couper brusquement l'alimentation Arduino? [fermé]

12

Si j'ai un Arduino, puis-je brusquement allumer et éteindre sans le corrompre? Si je conçois un produit qui a un interrupteur marche / arrêt, dois-je incorporer un délai avant de couper l'alimentation pour que le microcontrôleur puisse effectuer une coupure propre de quelque sorte? Ou est-il correct de simplement connecter un commutateur SPST à la ligne d'alimentation de l'Arduino?

(En concevant un produit, je veux dire utiliser un ATmega avec du code Arduino indépendamment sur une carte personnalisée avec d'autres composants.)

Edit: Par Arduino, je veux juste dire flasher le chargeur de démarrage Arduino afin que je puisse programmer en Arduino au lieu d'AVR. La puce que je veux utiliser est Atmel atmega328P. Je n'ai pas besoin d'utiliser d'EEPROM.

Michael Sohnen
la source
3
Notez que «Arduino» est un nom de marque, il obtient donc un «A» majuscule. Les capitales comptent.
Transistor
3
Peut-être s'il s'agit en fait d'un "Arduino", mais la question concerne en fait un ATmega sur une carte personnalisée qui serait plutôt un "arduino". En ce qui concerne le sujet réel, en plus de l'ATmega, il convient également de considérer tous les autres composants qui peuvent avoir un état , en particulier les mémoires externes - par exemple, s'il existe une carte SD qui nécessite une grande quantité de réflexion et de préoccupation. Enfin, certaines alimentations électriques font des choses désagréables à la mise sous / hors tension.
Chris Stratton
1
Pouvons-nous supposer que vous n'utilisez pas non plus de carte SD?
UKMonkey
C'est votre produit. Devez-vous enregistrer quelque chose si l'alimentation est coupée? La réponse à cette question répond à votre question.
StainlessSteelRat

Réponses:

18

Oui, il est sûr d'arrêter brusquement un Arduino.

Eh bien, surtout en sécurité.

Les processeurs utilisés dans les différents Arduinos ont trois types de mémoire:

  1. Flash - Où votre programme est stocké. Votre programme peut lire des trucs d'ici, mais ne peut pas les écrire.

  2. RAM - Où vos variables de programme sont conservées pendant l'exécution du programme. Les données disparaissent ici lorsque vous éteignez l'Arduino. Votre programme lit et écrit ici en permanence.

  3. EEPROM - Où votre programme peut stocker des éléments dont il aura besoin lors de sa prochaine exécution. Habituellement, les choses changent rarement, mais sont nécessaires à chaque exécution du programme. Comme les données d'étalonnage d'un capteur.

La plupart des programmes utilisent uniquement Flash et RAM. Vous pouvez allumer et éteindre l'Arduino à tout moment avec ces programmes.

Si votre programme écrit sur l'EEPROM, la coupure de l'alimentation pendant l'écriture sur l'EEPROM pourrait corrompre les données qui s'y trouvent.

La manière dont cela affecte votre programme dépend des données.

Si cela corrompt les données d'étalonnage d'un capteur, vous obtiendrez de mauvaises mesures pour tout ce que le capteur détecte.

Si vous écrivez des sommes de contrôle avec vos données EEPROM, vous pourriez détecter la corruption et votre programme pourrait s'arrêter au lieu d'utiliser des données incorrectes.

Vous savez, bien sûr, si votre programme écrit dans l'EEPROM - vous devez charger une bibliothèque séparée et utiliser des commandes spéciales pour lire et écrire dans la zone EEPROM.

Le danger n'est vraiment que dans ce court instant où vous écrivez à l'EEPROM. Comme cela se produit rarement (et généralement uniquement dans des conditions contrôlées), il sera également rare de corrompre les données EEPROM.


Sommaire:

Vous pouvez allumer et éteindre un Arduino à volonté sans danger, sauf si vous utilisez l'EEPROM - et même dans ce cas, vous vous en sortirez la plupart du temps.

JRE
la source
8
"Flash - Où votre programme est stocké. Votre programme peut lire des trucs d'ici, mais ne peut pas les écrire." - De nombreuses puces AVR (le 328P certainement inclus) peuvent auto-programmer le flash. En fait, c'est ainsi que fonctionne le cycle de programmation Arduino; le chargeur de démarrage, fonctionnant sur le 328P, programme le 328P lui-même. Il est assez peu probable que l'OP va faire, mais il est possible.
marcelm
2
De plus, si vous utilisez un Arduino avec du matériel supplémentaire (comme un capteur), vous pourriez aussi bien ajouter un condensateur et dépenser un portpin pour mesurer la puissance externe, de sorte que si disparaît, vous pouvez enregistrer en toute sécurité sur eeprom tout ce que vous vouloir. Sur un ATmega, un cycle d'écriture EEPROM est généralement de 3,4 ms. Donc, si votre condensateur peut maintenir le processeur en vie pendant 5 ms, et avant chaque opération d'écriture eeprom, vous vérifiez l'alimentation externe, vous êtes en sécurité.
vsz
10

Oui, vous pouvez rapidement couper l'alimentation sans la corrompre.

La seule raison pour laquelle je peux voir un retard dans la mise hors tension du circuit serait pour des raisons de sécurité ou de fonctionnement de vos périphériques externes.

Par exemple, à la mise hors tension, vous devez enregistrer les données dans une mémoire non volatile. Ou à la mise hors tension, vous devez vous assurer qu'un mécanisme est dans une position sûre à la mise hors tension.

Cela nécessiterait une surveillance de l'approvisionnement et une capacité de rétention suffisante pour faire fonctionner le processeur et la fonction qui devait être exécutée.

JCollins
la source
6

Le terme Arduino fait référence à un très large spectre de cartes microcontrôleurs qui ont différentes puces différentes, et l'effet de la perte de puissance varie donc. Donc, je vous recommande de mettre le numéro de pièce exact de la puce ATmega utilisée. Mais, d'une manière générale pour les puces comme ATmega328, ce qui suit est valable.

Oui, vous pouvez couper l'alimentation d'un Arduino sans corrompre ou endommager quoi que ce soit, mais gardez à l'esprit les choses suivantes:

  • Si votre code utilise l'EEPROM, le flash peut être corrompu ou les données peuvent ne pas être stockées avec précision lorsque l'appareil clignote et que l'alimentation est coupée.

  • La seule façon dont une coupure de courant soudaine peut nuire en dehors de l'EEPROM est aux appareils utilisés avec Arduino (par exemple une carte SD).

Electric_90
la source