Comment utiliser Arduino EEPROM pour enregistrer des données entre les cycles d'alimentation

Comment utiliser Arduino EEPROM pour enregistrer des données entre les cycles d'alimentation

Saviez-vous que l'Arduino peut stocker des données lorsqu'il est éteint ? Pas le croquis stocké dans la mémoire flash. Je parle de données variables dans l'EEPROM. Rejoignez-moi pendant que je vous montre comment le lire et l'écrire, et ce qu'il peut faire pour vos projets.





Si vous êtes nouveau sur Arduino, assurez-vous de consulter notre Guide du débutant .





Qu'est-ce que l'EEPROM ?

EEPROM signifie mémoire morte programmable effaçable électriquement . C'est un type de mémoire non volatile. Ne vous inquiétez pas si vous ne comprenez pas ce que tout cela signifie. Il stocke simplement les données même avec l'alimentation coupée (contrairement à RAM , qui a besoin d'électricité pour conserver les données).





L'EEPROM est intégré à une myriade de processeurs, tels que le réseau de portes programmable sur site (FPGA) utilisé dans le Matrix Creator Pi HAT. Tous les Arduinos ont une EEPROM disponible, mais la capacité varie selon le modèle. N'oubliez pas de consulter notre guide d'achat pour plus de détails sur chaque planche.

Comment ça marche?

L'EEPROM est effacée électriquement et programmée à l'aide Forage Fowler-Nordheim . Vous n'avez pas besoin de connaître les détails techniques pour pouvoir l'utiliser. Le principe de base est que l'électricité est utilisée pour modifier les données binaires (qu'est-ce qui est binaire). Il peut être lu, effacé et réécrit électroniquement.



Heureusement, le Langue Arduino facilite la modification des données, le tout sans avoir besoin d'un diplôme en informatique.

Espérance de vie

Bien qu'il soit facile d'utiliser l'EEPROM dans l'Arduino, sa durée de vie est limitée. L'EEPROM est spécifié pour gérer 100 000 cycles de lecture/effacement. Cela signifie que vous pouvez écrire puis effacer/réécrire des données 100 000 fois avant que l'EEPROM ne devienne instable. En réalité, Atmel (les fabricants de l'Arduino 'Chip') les semi-conducteurs peuvent gérer un nombre de cycles plus ou moins élevé, en fonction des tolérances de chaque processeur.





Une fois qu'un emplacement a été écrit et effacé trop de fois, il peut commencer à devenir peu fiable. Il peut ne pas renvoyer les données correctes ou renvoyer la valeur d'un bit voisin.

Cela peut sembler beaucoup d'écritures, mais il peut être facile d'atteindre cette limite si vous lisez et écrivez par programmation (dans un boucle , par exemple). La lecture des données ne dégrade pas le silicium, seule l'écriture fait . Vous pouvez lire les données de l'EEPROM autant que vous le souhaitez sans crainte !





Il est important de noter que cette limite s'applique à chaque emplacement mémoire. Votre Arduino peut avoir 1 000 emplacements de mémoire ou plus disponibles dans l'EEPROM, donc si vous écrivez trop de fois à un emplacement, seul cet emplacement est impacté, et aucun des autres. Plus tard je discuterai nivellement d'usure , ce qui peut réduire l'usure de l'EEPROM en répartissant les données de manière uniforme, ce que les SSD utilisent.

A quoi ça sert ?

L'EEPROM est incroyablement utile pour vos projets Arduino. Comme il se souvient des données même lorsque l'alimentation est coupée, vous pouvez stocker l'état de l'Arduino. Peut-être que vous pourriez construire une tourelle laser qui se souvient de sa position ou de la quantité de «munitions» restante. Vous pouvez l'utiliser pour contrôler vos appareils et enregistrer le nombre de fois où votre appareil a été activé.

L'EEPROM est le mieux adapté pour des choses comme les paramètres ou les scores élevés. Si vous souhaitez écrire régulièrement des données complexes, envisagez peut-être un shield ethernet (avec slot SD intégré) ou un Raspberry Pi .

Lire et écrire

Maintenant que la théorie est terminée, voyons comment lire et écrire des données ! Tout d'abord, incluez la bibliothèque (fournie avec l'IDE Arduino) :

#include

Maintenant, écrivez quelques données :

EEPROM.write(0, 12);

Cela écrit le nombre 12 vers l'emplacement EEPROM 0 . Chaque écriture prend 3,3 millisecondes ( Mme , 1000ms = 1 seconde). Remarquez que vous ne pouvez pas écrire de lettres ( carboniser ), seuls les nombres de zéro à 255 sont autorisés. C'est pourquoi l'EEPROM est idéale pour les réglages ou les scores élevés, mais pas aussi bien pour les noms ou les mots des joueurs. Il est possible de stocker du texte en utilisant cette méthode (vous pouvez mapper chaque lettre de l'alphabet à un nombre), mais vous aurez besoin de plusieurs emplacements de mémoire - un emplacement pour chaque lettre.

Voici comment vous lisez ces données :

exécuter windows 98 sur windows 10
EEPROM.read(0);

Zéro est l'adresse à laquelle vous avez écrit précédemment. Si vous n'avez jamais écrit à une adresse auparavant, elle renverra la valeur maximale ( 255 ).

Il existe des méthodes légèrement plus utiles. Supposons que vous vouliez stocker une décimale ou une chaîne :

EEPROM.put(2,'12.67');

Cela écrit les données à plusieurs emplacements - quelque chose qui serait facile à écrire vous-même, mais néanmoins pratique. Vous devrez toujours garder une trace du nombre d'emplacements dans lesquels cela a été écrit, afin de ne pas écraser accidentellement vos données ! Vous devez utiliser le avoir méthode pour récupérer à nouveau ces données :

float f = 0.00f;
EEPROM.get(2, f);

La valeur de get est stockée dans le float F variable. Remarquez comment cela est initialisé avec 0.00f comme valeur. Les F permet au compilateur de savoir que vous souhaiterez peut-être stocker un grand nombre dans cette variable, il met donc en place des configurations supplémentaires lors de la compilation.

Les Documentation EEPROM sur le Site Web Arduino a beaucoup plus d'exemples.

Nivellement de l'usure

Le nivellement d'usure est une technique utilisée pour réduire l'usure et augmenter la durée de vie de l'EEPROM. Si vous ne travaillez que sur un petit projet, vous n'aurez peut-être pas à vous en soucier.

La chose la plus simple que vous puissiez faire pour préserver la durée de vie de l'EEPROM est de limiter vos écritures à un emplacement particulier. Vous pouvez le faire en lisant d'abord l'adresse, et si la valeur que vous voulez écrire est déjà présente, il n'est pas nécessaire de la réécrire (rappelez-vous, la lecture des données ne fait pas de mal). Voici comment procéder :

int safeWrite(int data, address) {
if(EEPROM.read(address) != data) {
EEPROM.write(address, data);
}
}

C'est un peu de code assez simple, mais cela ne fonctionne que pour les entiers ! Au lieu de réinventer la roue, utilisez la fonction intégrée à la bibliothèque Arduino EEPROM :

EEPROM.update(address, val);

Cette méthode a exactement la même signature que la écrivez méthode, bien qu'elle puisse réduire considérablement le nombre d'écritures nécessaires !

Si vous devez écrire beaucoup de données et que vous craignez d'user le silicium, vous pouvez suivre le nombre d'écritures que vous effectuez, bien que cela utilise plus de données. Voici une implémentation approximative dans pseudo-code :

var address = 0
var writeCount = 0
if(writeCount > 75,000)
writeCount = 0
address += 1
EEPROM.write(address, data)

Vous devrez stocker l'adresse et le compte d'écriture dans l'EEPROM (et le compte d'écriture devra être divisé entre les emplacements d'adresse). La plupart du temps, ce niveau de protection ne sera pas nécessaire. Les Arduinos sont également très bon marché, il vous sera donc peut-être plus facile d'acheter une sauvegarde !

Vous devriez maintenant en savoir assez pour faire des projets impressionnants. Faites-nous savoir si vous faites quelque chose de cool ! Pouvez-vous reconnaître tous les appareils sur les photos ? Laissez-nous un commentaire ci-dessous!

Partager Partager Tweeter E-mail 5 astuces pour booster vos machines Linux VirtualBox

Vous en avez assez des mauvaises performances offertes par les machines virtuelles ? Voici ce que vous devez faire pour améliorer les performances de votre VirtualBox.

Lire la suite
Rubriques connexes
  • DIY
  • Arduino
  • Électronique
A propos de l'auteur Joe Coburn(136 articles publiés)

Joe est diplômé en informatique de l'Université de Lincoln, au Royaume-Uni. C'est un développeur de logiciels professionnel, et lorsqu'il ne pilote pas de drones ou n'écrit pas de musique, on le trouve souvent en train de prendre des photos ou de produire des vidéos.

Plus de Joe Coburn

Abonnez-vous à notre newsletter

Rejoignez notre newsletter pour des conseils techniques, des critiques, des ebooks gratuits et des offres exclusives !

Cliquez ici pour vous abonner
Catégorie Diy