INFORMACIÓN
El AT24C256 es una memoria EEPROM (Electrically Erasable Programmable Read-Only Memory) de 256 Kbits, organizada en 32,768 palabras de 8 bits cada una, que se utiliza para almacenar datos de manera no volátil, es decir, que no se borran al apagar el dispositivo. Funciona a través de la interfaz de comunicación I2C (Inter-Integrated Circuit), lo que permite conectarla fácilmente a microcontroladores, utilizando solo dos líneas: SDA (datos) y SCL (reloj). Durante su operación, el microcontrolador envía comandos de lectura o escritura a través del bus I2C, y la memoria responde almacenando la información en sus celdas internas o devolviendo los datos previamente guardados.
El AT24C256 se utiliza principalmente en proyectos donde se requiere almacenamiento externo y permanente de datos, como en sistemas de registro de eventos, dispositivos de control de acceso, calibración de sensores, almacenamiento de configuraciones, contraseñas, bitácoras, menús de dispositivos electrónicos y en general en aplicaciones que necesitan guardar información que persista tras un apagado. Gracias a su comunicación mediante I2C, es ampliamente compatible con tarjetas de desarrollo como Arduino (Uno, Mega, Nano, Leonardo), ESP8266, ESP32, Raspberry Pi, STM32, PIC, BeagleBone y prácticamente cualquier microcontrolador que soporte este protocolo. Su facilidad de integración y bajo consumo lo hacen ideal para proyectos de electrónica embebida, IoT y sistemas portátiles.
ESPECIFICACIONES Y CARACTERÍSTICAS
- Tipo: Módulo Memoria EEPROM.
- Chip: AT24C256.
- Interfaz: I2C.
- Pines: 8.
- Capacidad: 256 Kbit.
- Voltaje de alimentación: 2.7 V a 5.5 VDC.
- Tiempo de escritura: 5 ms.
- Ciclos de escritura: 1,000,000.
- Dirección I2C: 0x50 (0|1|0|1|A2|A1|A0|0).
- Led indicador power.
- Dimensiones: 36 mm x 12 mm x 15 mm.
- Peso: 5 g.
DOCUMENTACIÓN Y RECURSOS
INFORMACIÓN ADICIONAL
¿Cómo probar la AT24C256 Memoria EEPROM 24C256 interfaz I2C?
Aquí tienes un paso a paso sencillo para probar un AT24C256 (EEPROM I²C) usando un Arduino (Uno/Nano). Incluye conexión, comprobación I²C, escribir/leer un byte y escribir/leer una cadena.
Materiales Necesarios:
- AT24C256 Memoria EEPROM 24C256 interfaz I2C.
- Arduino Uno / Nano (o similar).
- Cables dupont y protoboard.
Conexiones.
- VCC → 5V (o 3.3V).
- GND → GND.
- SDA → A4 (Arduino Uno/Nano).
- SCL → A5 (Arduino Uno/Nano).
- A0, A1, A2 → GND (si las dejas a GND, la dirección I²C base será 0x50).
- WP (Write Protect) → GND para permitir escritura (si WP = VCC las escrituras estarán bloqueadas).
Nota: en ESP32/ESP8266/Raspberry Pi los pines SDA/SCL son distintos (ESP32 suele usar 21/22; RPi: SDA GPIO2, SCL GPIO3).
Verificar Respuesta del Bus I2C.
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(115200);
while(!Serial);
Serial.println("I2C Scanner");
for (byte address = 1; address < 127; ++address) {
Wire.beginTransmission(address);
byte error = Wire.endTransmission();
if (error == 0) {
Serial.print("Dispositivo I2C en 0x");
if (address < 16) Serial.print("0");
Serial.println(address, HEX);
}
}
}
void loop() {}
Resultado esperado si A0..A2 = GND: aparecerá 0x50 (puede aparecer 0x50..0x57 según A0..A2).
Escribir y leer 1 byte.
- El AT24C256 usa dirección de memoria de 16 bits (dos bytes: high, low).
- Después de escribir, hay que esperar el ciclo de escritura (~5–10 ms) antes de leer.
Funciones y ejemplo completo (sketch) que hace: escanea, escribe un byte, lo lee, escribe una cadena por páginas y la lee:
#include <Wire.h>
const uint8_t EEPROM_ADDR = 0x50; // A0..A2 = GND
void setup() {
Wire.begin();
Serial.begin(115200);
delay(200);
Serial.println("AT24C256 - prueba");
// Scan I2C (opcional)
Serial.println("Escaneando I2C...");
for (byte addr=1; addr<127; addr++) {
Wire.beginTransmission(addr);
if (Wire.endTransmission() == 0) {
Serial.print("Encontrado: 0x");
if (addr < 16) Serial.print("0");
Serial.println(addr, HEX);
}
}
// Escribir un byte
uint16_t testAddr = 10;
writeByte(testAddr, 'Z');
Serial.println("Escrito 'Z' en addr 10");
// Leer el byte
byte c = readByte(testAddr);
Serial.print("Leído de addr 10: ");
Serial.println((char)c);
// Escribir una cadena (manejo de páginas)
const char *msg = "Hola AT24C256! Prueba de escritura por páginas.";
writeString(0, msg);
Serial.println("Cadena escrita en addr 0");
// Leer la cadena (tamaño de msg)
char buf[80];
readData(0, buf, strlen(msg));
Serial.print("Cadena leída: ");
Serial.println(buf);
}
void loop() {}
// --- utilidades ---
void writeByte(uint16_t memAddr, byte data) {
Wire.beginTransmission(EEPROM_ADDR);
Wire.write((uint8_t)(memAddr >> 8));
Wire.write((uint8_t)(memAddr & 0xFF));
Wire.write(data);
Wire.endTransmission();
delay(10); // esperar ciclo de escritura
}
byte readByte(uint16_t memAddr) {
Wire.beginTransmission(EEPROM_ADDR);
Wire.write((uint8_t)(memAddr >> 8));
Wire.write((uint8_t)(memAddr & 0xFF));
Wire.endTransmission();
Wire.requestFrom((int)EEPROM_ADDR, 1);
if (Wire.available()) return Wire.read();
return 0;
}
void writeString(uint16_t addr, const char* str) {
const uint8_t PAGE_SIZE = 64; // tamaño de página del AT24C256
uint16_t i = 0;
while (str[i]) {
uint8_t pageOffset = addr % PAGE_SIZE;
uint8_t canWrite = PAGE_SIZE - pageOffset;
uint8_t count = 0;
Wire.beginTransmission(EEPROM_ADDR);
Wire.write((uint8_t)(addr >> 8));
Wire.write((uint8_t)(addr & 0xFF));
while (str[i] && count < canWrite) {
Wire.write(str[i++]);
count++;
}
Wire.endTransmission();
delay(10); // ciclo de escritura
addr += count;
}
}
void readData(uint16_t addr, char* out, size_t len) {
size_t idx = 0;
const size_t CHUNK = 32; // límite típico del buffer Wire en AVR (Arduino UNO)
while (idx < len) {
size_t toRead = min(CHUNK, len - idx);
Wire.beginTransmission(EEPROM_ADDR);
Wire.write((uint8_t)((addr+idx) >> 8));
Wire.write((uint8_t)((addr+idx) & 0xFF));
Wire.endTransmission();
Wire.requestFrom((int)EEPROM_ADDR, (int)toRead);
size_t got = 0;
while (Wire.available() && got < toRead) {
out[idx++] = Wire.read();
got++;
}
}
out[len] = '\0';
}
Puntos Importantes.
- WP en HIGH → no podrás escribir; conéctalo a GND para permitir escritura.
- A0–A2 cambian la dirección I²C (0x50..0x57).
- Pull-ups: si no usas módulo, añade 4.7k en SDA/SCL a VCC.
- Ciclo de escritura: esperar ~5–10 ms tras cada endTransmission() que escribe datos.
- Page write: máximo 64 bytes por página; no cruces el límite de página en una sola operación de escritura.
- Limite Wire: en Arduino UNO/Nano la librería Wire tiene buffer ≈32 bytes; usa lecturas/escrituras en bloques ≤32 bytes o usa otra MCU con más buffer.
- Si el escáner no encuentra el dispositivo: revisa VCC/GND, pull-ups, SDA/SCL invertidos, A0..A2, y WP.

Programador USBASP ISP para ATMEL AVR
























Valoraciones
No hay valoraciones aún.