Gravé dans le marbre, ça signifie écrit pour longtemps, intangible… Dans nos projets, il est parfois nécessaire de sauvegarder une donnée de manière non volatile. Pour cela, on mémorise la donnée en EEPROM. J’ai récemment mis en œuvre cette opération avec Arduino et avec PSoC. Je vous raconte ça ici…
Arduino et EEPROM
Avec Arduino, le projet était un compteur de vélo. J’avais besoin de sauvegarder en EEPROM la variable p, le périmètre de la roue en cm. Pour une roue de vélo normale cette grandeur est <255. En effet une roue de vélo de 700 ( diamètre 700 mm) correspond à un périmètre de π.D soit 220 cm environ. Le périmètre de la roue correspond à la distance parcourue avec 1 tour de roue. C’est un paramètre important ici à modifier en fonction de la taille des roue du vélo.
Nous allons utiliser la bibliothèque EEPROM (documentation ici), pour cela, dans le programme Arduino, il est nécessaire d’écrire dans l’en-tête du programme :
#include <EEPROM.h>
La taille de la mémoire EEPROM de l’Arduino UNO est de 1024 octets. Les adresses disponibles sont donc comprises entre 0 et 1023. Les données stockées sont sur un octet et donc comprises entre 0 et 255. Pour lire la donnée p stockée à l’adresse 0 , on utilisera l’instruction suivante :
p = EEPROM.read(0); // lecture perimetre de la roue à l'@0
Pour écrire la donnée p à l’adresse 0, on peut utiliser l’instruction suivante :
EEPROM.write(0,p);
Mais attention, la durée de vie de l’EEPROM de l’Arduino est limitée à 100.000 cycles ! C’est pas mal, mais ce n’est pas infini. C’est pourquoi j’ai préféré utiliser l’instruction suivante :
EEPROM.update(0,p);
L’instruction update n’écrit la donnée que si celle-ci est différente de la donnée présente. On économise ainsi la durée de vie de la mémoire en évitant les écritures inutiles.
Bon maintenant, si vous vous amusez à changer ce paramètre une fois par jour, 100.000 écritures, ça va marcher pendant 274 ans ! C’est pas mal !
Ecrire et lire dans l’EEPROM avec Arduino : pas si difficile finalement…
PSoC et EEPROM
Je n’avais jamais utilisé l’EEPROM sur un projet PSoC. Nous en avons besoin cette année sur un projet mené avec nos étudiants. J’ai donc fait un petit programme sur le kit PSoC-050 pour valider l’écriture et la lecture en EEPROM sur PSoC 5. Le PSoC de ce kit possède 2 ko (2048 octets) de mémoire EEPROM. Le design implémenté est le suivant :
Juste le minimum : 1 EEPROM (c’est ça qu’on teste), 1 afficheur LCD pour la visu, 2 boutons-poussoirs (pull-uppés en interne), 1 led.
Informations et tuto sur kit PSoC-050 disponibles sur ce site ici.
Le programme est le suivant :
Au démarrage, le programme va lire la case mémoire EEPROM d’adresse 0000 avec l’instruction EEPROM_1_ReadByte(adresse). Celle ci s’affiche pendant 4 s. Ensuite l’utilisateur peut incrémenter la valeur lue par appui sur BP1 (cette valeur repasse à 0 dès que la valeur est >255). Un appui sur BP2 permet de sauver dans la case mémoire d’adresse 0000 cette nouvelle valeur en utilisant l’instruction EEPROM_1_WriteByte(donnée,adresse). La led s’allume furtivement lors de l’écriture EEPROM.
Si on débranche puis on rebranche le kit on peut vérifier que la donnée a bien été écrite.
Sur PSoC, l’EEPROM est donnée pour 1 million de cycles d’écriture et 20 ans de rétention d’info !
Nos projets méritent bien ça, non ?
Et qui on est, hein ?