Outils pour utilisateurs

Outils du site


start:arduino:eeprom

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
start:arduino:eeprom [2020/12/15 11:41] – créée gerardadminstart:arduino:eeprom [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1
Ligne 3: Ligne 3:
  
 ===== Utiliser la mémoire EEPROM interne de l'Arduino ===== ===== Utiliser la mémoire EEPROM interne de l'Arduino =====
 +
 +[[https://fr.wikibooks.org/wiki/Fonctionnement_d%27un_ordinateur/Les_m%C3%A9moires_ROM#Les_m%C3%A9moires_EPROM_et_EEPROM|fonctionnement  d une EEPROM]]
 +
 +[[https://fr.qaz.wiki/wiki/EEPROM| Doc generalites sur EEPROM]]
 +
 +https://electroniqueamateur.blogspot.com/2020/01/utiliser-la-memoire-eeprom-interne-de.html
 +
 +[[http://78.204.53.180:16557/share/AMANGpzrQrHxbjZ2/gestion-de-la-memoire-sur-arduino.pdf |gestion-de-la-memoire-sur-arduino.pdf]]
  
 Les cartes Arduino disposent d'une mémoire EEPROM ("Electrically-Erasable Programmable Read-Only Memory"): il s'agit d'un endroit où vous pouvez stocker des informations qui demeureront disponibles même après que l'Arduino ait été mis hors tension pendant un certain temps, ou après que vous ayez téléversé un nouveau sketch dans l'Arduino. Les cartes Arduino disposent d'une mémoire EEPROM ("Electrically-Erasable Programmable Read-Only Memory"): il s'agit d'un endroit où vous pouvez stocker des informations qui demeureront disponibles même après que l'Arduino ait été mis hors tension pendant un certain temps, ou après que vous ayez téléversé un nouveau sketch dans l'Arduino.
Ligne 57: Ligne 65:
 La méthode EEPROM.update() est donc identique à la méthode EEPROM.write(), sauf que la nouvelle valeur sera écrite uniquement si elle est différente de la valeur déjà présente à cette adresse. La méthode EEPROM.update() est donc identique à la méthode EEPROM.write(), sauf que la nouvelle valeur sera écrite uniquement si elle est différente de la valeur déjà présente à cette adresse.
  
-EEPROM.update(adresse, valeur)+    EEPROM.update(adresse, valeur)
  
 Par exemple, l'instruction EEPROM.update(22,144) inscrira la valeur "144" à l'adresse "22", mais seulement si la valeur déjà stockée à l'adresse 22 est différente de 144. Par exemple, l'instruction EEPROM.update(22,144) inscrira la valeur "144" à l'adresse "22", mais seulement si la valeur déjà stockée à l'adresse 22 est différente de 144.
Ligne 63: Ligne 71:
 Personnellement, je ne vois aucune raison valable de ne pas utiliser EEPROM.update() plutôt qu'EEPROM.write() chaque fois que vous désirez écrire une valeur en mémoire. Personnellement, je ne vois aucune raison valable de ne pas utiliser EEPROM.update() plutôt qu'EEPROM.write() chaque fois que vous désirez écrire une valeur en mémoire.
  
-Écrire une variable de n'importe quel type: EEPROM.put()+Écrire une variable de n'importe quel type:  
 + 
 +    EEPROM.put()
  
 Les 3 méthodes que nous avons explorées jusqu'à maintenant impliquent l'enregistrement ou la lecture d'un octet: un nombre à 8 bits dont la valeur se situe entre 0 et 255. Les 3 méthodes que nous avons explorées jusqu'à maintenant impliquent l'enregistrement ou la lecture d'un octet: un nombre à 8 bits dont la valeur se situe entre 0 et 255.
Ligne 75: Ligne 85:
 La syntaxe est similaire à celle d'EEPROM.write(): La syntaxe est similaire à celle d'EEPROM.write():
  
-EEPROM.put(adresse, valeur)+    EEPROM.put(adresse, valeur)
  
 Dans l'exemple ci-dessous, j'enregistre une variable de type "long" contenant le nombre 123456789 à l'adresse 4 de l'EEPROM: Dans l'exemple ci-dessous, j'enregistre une variable de type "long" contenant le nombre 123456789 à l'adresse 4 de l'EEPROM:
  
-Lire une variable de n'importe quel type: la méthode EEPROM.get()+Lire une variable de n'importe quel type: __la méthode EEPROM.get()__
  
 Le complément de la méthode EEPROM.put() est EEPROM.get(), qui nous permet de lire sur l'EEPROM la valeur d'une variable de n'importe quel type. Le complément de la méthode EEPROM.put() est EEPROM.get(), qui nous permet de lire sur l'EEPROM la valeur d'une variable de n'importe quel type.
Ligne 85: Ligne 95:
 La syntaxe est: La syntaxe est:
  
-EEPROM.get(adresse, valeur)+    EEPROM.get(adresse, valeur)
  
 Par exemple, dans le sketch ci-dessous, je récupère la valeur de la variable de type "long" précédemment enregistrée à l'adresse 4, et je l'affiche dans le moniteur série. Par exemple, dans le sketch ci-dessous, je récupère la valeur de la variable de type "long" précédemment enregistrée à l'adresse 4, et je l'affiche dans le moniteur série.
Ligne 110: Ligne 120:
 Utiliser l'EEPROM comme un tableau d'octets: l'objet EEPROM[] Utiliser l'EEPROM comme un tableau d'octets: l'objet EEPROM[]
  
-Un objet EEPROM[] vous permet d'écrire et lire des octets comme si la mémoire EEPROM était un tableau d'octets.  Ainsi, l'expression "valeur = EEPROM[5]" aura le même effet que l'expression "valeur = EEPROM.read(5)", et l'expression "EEPROM[7] = 123" aura le même effet que l'expression "EEPROM.update(7, 123)".+Un objet EEPROM[] vous permet d'écrire et lire des octets comme si la mémoire EEPROM était un tableau d'octets. 
 + 
 +Ainsi, l'expression "valeur = EEPROM[5]" aura le même effet que l'expression "valeur = EEPROM.read(5)",  
 + 
 +et l'expression "EEPROM[7] = 123" aura le même effet que l'expression "EEPROM.update(7, 123)". 
 + 
 +Connaître la taille de l'EEPROM grâce à 
 + 
 +    EEPROM.length() 
 + 
 +Tel que précisé un peu plus haut, la taille de la mémoire EEPROM n'est pas la même pour tous les modèles d'Arduino. __La méthode EEPROM.length()__ retourne cette taille (en octets), ce qui permet à votre sketch d'utiliser la totalité de la mémoire disponible, peu importe le modèle de carte utilisé. 
 + 
 +=== Exemple de programme de test === 
 + 
 +<code c EEPROM_Structure.ino> 
 +//------------------Test structure  -- EEPROM ------------- 
 +typedef struct 
 +  char a[32]; 
 +  int b; 
 +  float c; 
 +  String d; 
 +  bool e; 
 +} sensor; 
 + 
 + char g[20] = " "; 
 +  
 +void setup() { 
 +  Serial.begin(115200); 
 +   
 +  sensor mySensor; 
 + 
 +  char  g[] = "bonjour ca va bien"; 
 + 
 +  /* 
 +  for (int i=0; i <7 ;i++){ 
 +  mySensor.a[i]  =  g[i]; 
 +  } 
 +  */ 
 +  strcpy(mySensor.a,g); 
 +  mySensor.b = 255; 
 +  mySensor.c= 20.4; 
 +  mySensor.d = "autre nom"; 
 +  mySensor.e = 1; 
 + 
 +  Serial.println(sizeof(g)); 
 +  Serial.println("--------------"); 
 +  Serial.println(sizeof(mySensor.a)); 
 +  Serial.println("--------------"); 
 +   for (int j = 0 ; j < sizeof(g) ; j++ ) { 
 +       Serial.print(mySensor.a[j]); 
 +   } 
 +  Serial.println(" ");  
 +  Serial.println(mySensor.b); 
 +  Serial.println(mySensor.c); 
 +  Serial.println(mySensor.d); 
 +  Serial.println(mySensor.e); 
 +  
 +
 +  
 +void loop() {} 
 + 
 +</code> 
 + 
 + 
 +<code c Tableau_pointeur.ino > 
 +#include <stdio.h> 
 + 
 +int main(void) { 
 + 
 +    // Pointeur sur tableau de char 
 +    char * ptr = "Foobar"; 
 +    printf("sizeof(ptr) = %d\n", sizeof(ptr)); 
 +     
 +    // Tableau de char 
 +    char array[] = "Foobar"; 
 +    printf("sizeof(array) = %d\n", sizeof(array)); 
 +    return 0; 
 + 
 +</code> 
 + 
 + 
 + 
 +[[http://fablab37110.ovh/doku.php?id=start:arduino:esp32#eeprom_et_esp32| EEPROM et esp32 ]] 
 +====== Autres liens web ====== 
 + 
 +[[https://www.locoduino.org/spip.php?article72|EEPROM sur Locoduino]]
  
-Connaître la taille de l'EEPROM grâce à EEPROM.length()+[[https://www.carnetdumaker.net/articles/stocker-des-donnees-en-memoire-eeprom-avec-une-carte-arduino-genuino/|EEPROM sur Arduino]]
  
-Tel que précisé un peu plus haut, la taille de la mémoire EEPROM n'est pas la même pour tous les modèles d'ArduinoLa méthode EEPROM.length() retourne cette taille (en octets), ce qui permet à votre sketch d'utiliser la totalité de la mémoire disponible, peu importe le modèle de carte utilisé.+[[https://lesiteferroviaire.pagesperso-orange.fr/Memoire%2024LC512.htm|EEPROM I2C 2024LC512  64 Ko]]
  
/home/chanteri/www/fablab37110/data/attic/start/arduino/eeprom.1608028876.txt.gz · Dernière modification : 2023/01/27 16:08 (modification externe)