<\/a><\/p>\nEl ATmega328P<\/strong> \u2014el microcontrolador del Arduino UNO<\/strong>, el Nano<\/strong> y otros de la l\u00ednea Arduino\u2014 tiene una capacidad de 1.024 bytes<\/strong> (1 Kb) de memoria EEPROM<\/strong>. La hoja de datos nos indica que la EEPROM del ATmega328P acepta hasta 100.000 ciclos de lectura\/escritura. Parece mucho, pero el solo hecho de tener una cantidad de ciclos de escritura acotada ya nos indica que su funci\u00f3n no es en nada similar a una RAM. Es para guardar datos, y no en forma moment\u00e1nea y veloz, sino de manera durable. No ponga nunca operaciones con la EEPROM<\/strong> dentro de la funci\u00f3n loop()<\/strong>, ya que, dada la velocidad de trabajo del microcontrolador, llegar\u00e1 r\u00e1pidamente al l\u00edmite de 100.000.<\/p>\nTengamos tambi\u00e9n en cuenta otro dato importante: una operaci\u00f3n de escritura en la EEPROM<\/strong> requiere 3,3 ms<\/strong> para completarse frente a la velocidad miles de veces superior de la RAM<\/strong>, capaz de operar a 20 MHz<\/strong>.<\/p>\nPara acceder a la memoria EEPROM<\/strong> debemos usar la librer\u00eda EEPROM disponible de manera est\u00e1ndar desde el IDE<\/strong> de Arduino. La biblioteca \u2014o librer\u00eda\u2014 se llama EEPROM.h<\/strong>, y se debe incluir al inicio del programa.<\/p>\nFunciones en la biblioteca EEPROM:<\/strong><\/p>\nFUNCI\u00d3N<\/strong> EEPROM.read()<\/strong><\/font><\/p>\nLee un byte de la posici\u00f3n de memoria que indica su par\u00e1metro. De f\u00e1brica, todas las posiciones de memoria tienen escrito el valor 255 (0xFF).<\/p>\n
Sintaxis:<\/strong><\/p>\n EEPROM.read(direccion)<\/font><\/strong><\/p>\nPar\u00e1metros:<\/strong><\/p>\ndireccion<\/font>: la posici\u00f3n de memoria (de 0 a 1023 = 1024).<\/p>\nEjemplo con EEPROM.read()<\/font>, leer toda la EEPROM y mostrarla en Monitor Serie<\/h3>\n#include <EEPROM.h>\r\n\r\nbyte dato;\r\n \r\n void setup(){\r\n Serial.begin(9600); \/\/ inicializar puerto serie\r\n for (int direccion=0;direccion<1024;direccion++)\r\n {\r\n for(int columna=0;columna<10;columna++)\r\n { \r\n \/\/ escribe hileras de 10 valores por l\u00ednea\r\n \/\/ lee la posici\u00f3n EEPROM indicada por 'direccion'\r\n dato = EEPROM.read(direccion);\r\n Serial.print(direccion); \/\/ muestra la direccion del valor\r\n Serial.print(\" =\"); \/\/ separador\r\n Serial.print(\"\\t\"); \/\/ tabulacion\r\n Serial.print(dato); \/\/ muestra el valor en direccion\r\n Serial.print(\"\\t\"); \/\/ tabulacion\r\n direccion++; \/\/ incrementa direccion\r\n if(direccion==1024) break; \/\/ solo muestra hasta la direccion 1023\r\n }\r\n Serial.println(); \/\/ salto a la sig l\u00ednea\r\n direccion--; \/\/ decrementa direccion para la siguiente linea\r\n }\r\n}\r\n\r\nvoid loop(){ \/* no hay lazo - solo se ejecuta en setup() *\/ }\r\n<\/pre>\nFUNCI\u00d3N<\/strong> EEPROM.write()<\/strong><\/font><\/p>\nEsta funci\u00f3n escribe un byte en la posici\u00f3n indicada de la EEPROM. Tiene dos par\u00e1metros: el primero es la direcci\u00f3n de memoria (de 0 a 1023) donde se escribir\u00e1 el byte; el segundo es el valor que se va a escribir en la EEPROM, que debe ser un valor entero entre 0 y 255. La funci\u00f3n no retorna ning\u00fan valor.<\/p>\n
Sintaxis:<\/strong><\/p>\n EEPROM.write(direccion,valor)<\/font><\/strong><\/p>\nPar\u00e1metros:<\/strong><\/p>\ndireccion<\/font>: direcci\u00f3n en la memoria (de 0 a 1023)
\nvalor<\/font>: el valor a escribir en la memoria<\/p>\nEjemplo: Escribir valores en un sector de la memoria<\/h3>\n#include <EEPROM.h> \/\/ incluye la librer\u00eda para el manejo de la memoria EEPROM\r\n\r\nvoid setup(){\r\nfor (int i = 0; i < 255; i++) \/\/ se ejecuta 255 veces. El lazo\r\n EEPROM.write(i, i); \/\/ escribe en la direcci\u00f3n de memoria i el valor de i\r\n}\r\nvoid loop(){}<\/pre>\nFUNCI\u00d3N<\/strong> EEPROM.update()<\/strong><\/font><\/p>\nEscribe un byte en la EEPROM. El valor es escrito solo si es diferente al valor que esta previamente almacenado en esa posici\u00f3n de memoria.<\/p>\n
Sintaxis:<\/strong><\/p>\n EEPROM.update(direccion,valor)<\/font><\/strong><\/p>\nPar\u00e1metros:<\/strong><\/p>\ndireccion<\/font>: la direcci\u00f3n de la memoria (0 a 1023)
\nvalor<\/font>: el valor a escribir en la memoria
\n
\n