EEPROM

http://arduino.cc/en/Tutorial/EEPROMWrite

http://arduino.cc/en/Tutorial/EEPROMRead

Le microprocesseur des cartes Arduino possède 512 bytes (adresse allant de 0 à 511) d’EEPROM ce qui permet de stocker 512 valeurs allant de 0 à 255. Soit un byte = 1 octet = 8 bits donc 256 valeurs de 0 à 255 soit en hexadécimal de #00 à #FF

0 = 00000000

 1 = 00000001
 2 = 00000010
   ...
254 = 11111110
255 = 11111111

Par défaut, la valeur stockée dans les bytes est de 255.

Un integer (int) est stocké dans deux byte. Il est possible d’obtenir la décomposition en utilisant les fonctions highByte et lowByte. La première donnant la valeur > à 255 et la seconde < à 255. Un entier long (long) est stocké sur 4 bytes.

Exemple de sketch lisant la valeur de l’adresse 0 de l’EEPROM puis stockant la valeur 10. Lors de la première exécution du sketch l’affichage restitue 255 la 2nd fois que le programme est lancé affichage de 10.

 //-- Write and read EEPROM Value  
 #include <EEPROM.h>  
 void setup()  
 {int addr=0;  
  byte value;  
  //-- initialize serial and wait for port to open:  
  Serial.begin(9600);  
  while (!Serial) {  
   ; // wait for serial port to connect. Needed for Leonardo only  
  }  
  //-- read the value of the adress 0 of the EEPROM   
  value=EEPROM.read(addr);  
  Serial.print(addr);  
  Serial.print("\t");  
  Serial.print(value, DEC);  
  Serial.println();  
  //-- write at address 0 the value 10 in the EEPROM  
  EEPROM.write(addr, 10);  
 }  
 void loop()  
 {}  

Autre exemple permettant de stocker sur 2 byte des valeurs > à 256 :

 int channel[12];  
 /*-- Exemple d'appel  
 readChannelsFromEEPROM();  
 channel[channelNumber] = currentChannel;  
 saveChannel(channelNumber, currentChannel);  
 */  
 void saveChannel(int i, int channel)  
 {  
  byte high = highByte(channel);  
  byte low = lowByte(channel);  
  EEPROM.write(i * 2, high);   
  EEPROM.write(i * 2 + 1, low);   
 }  
 void readChannelsFromEEPROM()  
 {  
  for (int i = 0; i < 12; i++)  
  {  
   byte high = EEPROM.read(i*2);  
   byte low = EEPROM.read(i*2 + 1);  
   int ch = high * 256 + low;  
   if (ch > 700 && ch < 1500)  
   {  
    channel[i] = ch;  
   }  
  }   
 }  
 /*************************************  
 int test = 0xABCD;  // 16 bits  
 byte hi, lo;     // 8 bits each  
 hi = HighByte(test); // 0xAB  
 lo = LowByte(test);  // 0xCD.   
 *************************************/  

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Articles récents
Commentaires récents
fatima sur Bienvenue !
AdminDroid sur Bienvenue !
fatima sur Bienvenue !
Archives
Catégories
%d blogueurs aiment cette page :