Diferencia entre revisiones de «EEPROM»
De ArduWiki
(→Comentarios) |
(→Ejemplo 1) |
||
Línea 24: | Línea 24: | ||
Leer y escribir un solo byte. | Leer y escribir un solo byte. | ||
− | < | + | <syntaxhighlight lang="c++"> |
#include <EEPROM.h> | #include <EEPROM.h> | ||
int Direccion = 0; //Variable con la posición de memoria | int Direccion = 0; //Variable con la posición de memoria | ||
Línea 52: | Línea 52: | ||
//Nada | //Nada | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
+ | |||
+ | == Ejemplo 2 == | ||
+ | Leer y escribir un dato tipo [[int]] osea dos bytes. | ||
+ | |||
+ | <syntaxhighlight lang="c++"> | ||
+ | #include <EEPROM.h> | ||
+ | int Direccion = 0; //Variable con la posición de memoria | ||
+ | |||
+ | void setup(){ | ||
+ | Serial.begin(9600); | ||
+ | //Escribir | ||
+ | int x = 800; | ||
+ | EEPROM.write(Direccion, highByte(x)); | ||
+ | EEPROM.write(Direccion+1, lowByte(x)); | ||
+ | //Leer | ||
+ | byte val = EEPROM.read(Direccion); | ||
+ | int dato1 = val; | ||
+ | dato1 = dato1 & << (8 * i); //Desplaza a la derecha | ||
+ | val = EEPROM.read(Direccion+1); | ||
+ | dato1 = val; | ||
+ | } | ||
+ | |||
+ | void loop(){ | ||
+ | //Nada | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Ejemplo 3 == | ||
+ | Leer y escribir un dato tipo [[long]] osea cuatro bytes. | ||
+ | |||
+ | <syntaxhighlight lang="c++"> | ||
+ | #include <EEPROM.h> | ||
+ | |||
+ | void setup(){ | ||
+ | Serial.begin(9600); | ||
+ | //Escribir | ||
+ | long dato = 123456789; | ||
+ | long AuxDato = dato; //Saco podia para no destruir dato | ||
+ | for (int i=0; i<sizeof(dato); i++) { | ||
+ | EEPROM.write(i, highByte(AuxDato)); | ||
+ | AuxDato = AuxDato & << 8; //Desplaza 8 bits a la izquierda | ||
+ | } | ||
+ | //Leer | ||
+ | long dato1 = 0; | ||
+ | for (int i=sizeof(dato1; i>0; i--) { | ||
+ | dato1 = EEPROM.read(i - 1); //Estrae los bits menos significativos | ||
+ | if (i != 1) { | ||
+ | dato1 = dato1 & << (8 * i); //Desplaza a la derecha menos el ultimo | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void loop(){ | ||
+ | //Nada | ||
+ | } | ||
+ | </syntaxhighlight> | ||
== Vea también == | == Vea también == |
Revisión del 22:18 25 abr 2019
Contenido
Descripción
Es una memoria no volátil para mantener datos después de apagado nuestro Arduino. Se puede grabar constantes desde un boceto con algunas instrucciones especiales. Al igual que la memoria Flash tiene una vida util de unas 100,000 ciclos de escritura. Esta memoria solo puede leerse byte a byte y su uso puede se un poco incómodo. También es algo más lenta que la SRAM.
Tipo | Arduino UNO | Arduino MEGA | Arduino MKR1000 |
---|---|---|---|
flash | 32K | 256K | 256K |
Flash-bootloader | 0.5K | 8K | - |
SRAM | 2K | 8K | 32K |
EEPROM | 1K | 4K | - |
Comentarios
- La EEPROM de tu Arduino es especialmente util para guardar datos como: MAC, IP, constantes de calibración de algún sensor y claves de usuario.
- Para actuar con esta memoria debes usar la libreria EEPROM.h que esta por defecto en el IDE.
- Debes trabajar con direcciones y hacerlo byte a byte, tanto para leer como para escribir.
- Las direcciones van de 0 a 999 y podrás almacenar datos de 0 a 255. Para datos mas grandes debes dividirlos en bytes. Por ejemplo si el dato es tipo unsigned int lo debes dividir entre 4 y luego de recuperar multiplicar por 4 (pierdes presicion).
Ejemplo 1
Leer y escribir un solo byte.
#include <EEPROM.h>
int Direccion = 0; //Variable con la posición de memoria
void setup(){
Serial.begin(9600);
//Escribir
byte data = B11001; //25 en binario
EEPROM.write(Direccion, data);
int sensor = analogRead(0) / 4; //Recuerda que el valor debe estar entre 0~1024.
EEPROM.write(Direccion + 1, sensor);
//Leer
byte val1 = EEPROM.read(Direccion);
Serial.print(“En la dirección “);
Serial.print(Direccion);
Serial.print(” se encuentra la información: “);
Serial.println(val1, DEC);
delay(100);
byte val2 = EEPROM.read(Direccion + 1);
Serial.print(“En la dirección “);
Serial.print(Direccion + 1);
Serial.print(” se encuentra la información: “);
Serial.println(4*val2, DEC);
}
void loop(){
//Nada
}
Ejemplo 2
Leer y escribir un dato tipo int osea dos bytes.
#include <EEPROM.h>
int Direccion = 0; //Variable con la posición de memoria
void setup(){
Serial.begin(9600);
//Escribir
int x = 800;
EEPROM.write(Direccion, highByte(x));
EEPROM.write(Direccion+1, lowByte(x));
//Leer
byte val = EEPROM.read(Direccion);
int dato1 = val;
dato1 = dato1 & << (8 * i); //Desplaza a la derecha
val = EEPROM.read(Direccion+1);
dato1 = val;
}
void loop(){
//Nada
}
Ejemplo 3
Leer y escribir un dato tipo long osea cuatro bytes.
#include <EEPROM.h>
void setup(){
Serial.begin(9600);
//Escribir
long dato = 123456789;
long AuxDato = dato; //Saco podia para no destruir dato
for (int i=0; i<sizeof(dato); i++) {
EEPROM.write(i, highByte(AuxDato));
AuxDato = AuxDato & << 8; //Desplaza 8 bits a la izquierda
}
//Leer
long dato1 = 0;
for (int i=sizeof(dato1; i>0; i--) {
dato1 = EEPROM.read(i - 1); //Estrae los bits menos significativos
if (i != 1) {
dato1 = dato1 & << (8 * i); //Desplaza a la derecha menos el ultimo
}
}
}
void loop(){
//Nada
}
Vea también
Referencias
- Memoria EEPROM - Luis Llamas
- Como usar EEPROM - EducaChip