Out Of Stock
Description
This I2C EEPROM module is the finest option for data storage in your applications. This module is built around the AT24C256 EEPROM chip, which has a 256k bit capacity. It communicates with Arduino through the I2C bus, allowing you to store a lot more data.
The AT24C256C is a 256Kb Serial EEPROM with an I2C (2-wire) serial interface from Microchip. The device is structured as a single 32K x 8 block and is designed for consumer, industrial, and automotive applications that require stable nonvolatile memory storage. The EEPROM can be packaged in a variety of ways to save space.
Specifications:
32K x 8 (256 Kbit)
2-Wire Serial Interface, I2C Compatible
400 kHz and 1 MHz clock compatibility
Self-Timed Erase and Write Cycles (5 ms max.)
Low Power Consumption
Read current 1 mA (Typ), 2 mA (Max)
Write current 2 mA (Typ), 3 mA (Max)
Standby current 6 uA (Max)
Hardware Write-Protect Pin
More than 1 million erase/write cycles
Data retention > 100 years
Extended Temperature Ranges Available (Grade 1, 2, and 3 as defined in AEC-Q100)
Grade 1 Temperature Range: -40°C to 125°C
Grade 2 Temperature Range: -40°C to 105°C
Grade 3 Temperature Range: -40°C to 85°C
Qualified for Automotive Applications
Factory Programming Available
Documents
Dimensional drawing | ||
Pinout | ||
Schematic |
The Wire library allows you to pass an integer value so we could just make a bit-wise operation to device the integer variable into two bytes. There are already functions that simplify this operation HIGH BYTE and LOW BYTE. The following code allows you to write all 32000 bytes of memory.
Source Code 1
Sample Code fo the EEPROM Data Module - AT24C256 RobotDYN
/*
* Use the I2C bus with EEPROM 24LC64
* Sketch: eeprom.pde
*
* Author: hkhijhe
* Date: 01/10/2010
*
*
*/
#include //I2C library
void i2c_eeprom_write_byte( int deviceaddress, unsigned int eeaddress, byte data ) {
int rdata = data;
Wire.beginTransmission(deviceaddress);
Wire.send((int)(eeaddress >> 8)); // MSB
Wire.send((int)(eeaddress & 0xFF)); // LSB
Wire.send(rdata);
Wire.endTransmission();
}
// WARNING: address is a page address, 6-bit end will wrap around
// also, data can be maximum of about 30 bytes, because the Wire library has a buffer of 32 bytes
void i2c_eeprom_write_page( int deviceaddress, unsigned int eeaddresspage, byte* data, byte length ) {
Wire.beginTransmission(deviceaddress);
Wire.send((int)(eeaddresspage >> 8)); // MSB
Wire.send((int)(eeaddresspage & 0xFF)); // LSB
byte c;
for ( c = 0; c < length; c++)
Wire.send(data[c]);
Wire.endTransmission();
}
byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress ) {
byte rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
Wire.send((int)(eeaddress >> 8)); // MSB
Wire.send((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,1);
if (Wire.available()) rdata = Wire.receive();
return rdata;
}
// maybe let's not read more than 30 or 32 bytes at a time!
void i2c_eeprom_read_buffer( int deviceaddress, unsigned int eeaddress, byte *buffer, int length ) {
Wire.beginTransmission(deviceaddress);
Wire.send((int)(eeaddress >> 8)); // MSB
Wire.send((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,length);
<