Table des matières

Utiliser l'EEPROM

Exemple 1: Lecture - Ecriture d'un octet

#include <avr/io.h>
#include <avr/eeprom.h>		//Pour pouvoir utiliser les fonctions d'acces à l'EEPROM
#include <avr/interrupt.h> 	//Pour pouvoir utiliser cli et sei
 
int main (void)
{
	unsigned char port;
 
	DDRB = 0x00; 					//Met le port B en entrée
        DDRC = 0xFF; 					//Met le port C en sortie 
 
	port = PINB; 					//Lit le PORTB et met la valeur dans la variable port
 
	while(!eeprom_is_ready()); 			//On attend que l'EEPROM soit prête
 
	cli(); 						//Désactive les intéruptions
        eeprom_write_byte (0x00, port); 		//On écrit la valeur de port dans l'EEPROM à l'adresse 0x00
	sei(); 						//Active les intéruptions
 
	while(!eeprom_is_ready()); 			//On attend que l'EEPROM soit prête
 
	cli();
        PORTC = eeprom_read_byte (0x00);		//On lit l'adresse 0x00 de l'EEPROM et on l'envoie sur le port C
        sei();
 
	return 1;
}

:avr:winavr:eeprom1.jpg

Exemple 2: Initialiser des valeurs dans l'EEPROM

Pour fixer une valeur à une variable située dans l'EEPROM lors de la programmation du microcontrôleur, il vous suffit d'indiquer EEMEM (zone mémoire EEPROM) après votre type de variable.
L'accès à cette variable se fait de la même manière que dans l'exemple précèdent, sauf qu'au lieu de mettre directement l'adresse on utilise la notation &un (adresse de un).

#include <avr/io.h>
#include <avr/eeprom.h>
 
unsigned char EEMEM un = 1; 	//On déclare un dans l'EEPROM et on lui donne la valeur 1
unsigned char EEMEM deux = 2;	//On déclare deux dans l'EEPROM et on lui donne la valeur 2
 
int main (void)
{
	DDRB = 0xFF;
 
	PORTB = eeprom_read_byte (&un) + eeprom_read_byte (&deux); 	//1+2=3 :p
 
	return 1;
}

:avr:winavr:eeprom2.jpg

Exemple 3: Initialisation, lecture et écriture

On lit un et deux et on met la somme dans resultat.

#include <avr/io.h>
#include <avr/eeprom.h>
 
unsigned char EEMEM un = 1; 	
unsigned char EEMEM deux = 2;	
unsigned char EEMEM resultat;	
 
int main (void)
{
	eeprom_write_byte(&resultat,eeprom_read_byte (&un) + eeprom_read_byte (&deux));
	return 1;
}

:avr:winavr:eeprom.gif