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.

UShieldX Shield de Expansión para Arduino UNO
Sonoff MINIR4M Switch WiFi
ESP32 S2 Mini Tarjeta de Desarrollo 4MB Flash
Push Button 2 Pines MicroSwitch
Soldador de Gas Tipo Bolígrafo con Accesorios
Maletin de Soldadura con Cautín Regulable 60W
Lilypad ATmega32U4 USB Compatible con Arduino
Raspberry Pi Pico 2 RP2350
MUL-281 Multímetro Profesional RMS con Detector de Voltaje
Fuente Conmutada 24V 5A
Espejo Reflectante 20x3mm para Máquina Láser CO2
Par de Cables Hembra Macho conector JST RC
Pasta Limpiadora para Puntas de Cautín 6g
SN65HVD230 Transceptor CAN 3.3V
L293D Shield Controlador de Motor
UNIT Kit ESP32 Básico con 10 practicas
Sonoff RF Control Remoto 433 Mhz Sin Función de Clonación
ESP-01S Módulo WiFi ESP8266
Kit Soldador Eléctrico 60W 110V Cautín Multímetro
Alicates de Pico de Pato Multifuncionales
MT3608 Elevador de Voltaje Boost Step Up 6W 2A
























Valoraciones
No hay valoraciones aún.