View Single Post
Old 01-03-16, 02:21 PM   #17
Acuario
Apprentice EcoRenovator
 
Join Date: May 2011
Location: Tortosa, Spain
Posts: 221
Thanks: 2
Thanked 81 Times in 46 Posts
Default

3. 24C34EEPROM.ino

#define AT24C32_I2C_ADDRESS 0x50 // the I2C address of Tiny RTC AT24C32 EEPROM

void EEPROM_write_byte(unsigned int uiAddress, byte bData)
{
int iCount = 0;
do
{
Wire.beginTransmission(AT24C32_I2C_ADDRESS);
Wire.write((byte)(uiAddress >> 8)); // MSB
Wire.write((byte)uiAddress); // LSB
Wire.write(bData);
} while (Wire.endTransmission() != 0 && ++iCount<10);
}

void EEPROM_read_byte(unsigned int uiAddress, byte *pbData)
{
int iCount = 0;
do
{
Wire.beginTransmission(AT24C32_I2C_ADDRESS);
Wire.write((byte)(uiAddress >> 8)); // MSB
Wire.write((byte)uiAddress); // LSB
} while (Wire.endTransmission() != 0 && ++iCount<10);
Wire.requestFrom(AT24C32_I2C_ADDRESS, 1);
*pbData = Wire.read();
}


//////////////////////////////////////////////////////////////////////////////////////
// read long from EEPROM, give starting address
unsigned long EEPROM_readlong(int address) {
byte data[1];
unsigned long dword = 0;

EEPROM_read_byte(address, data);
dword = data[0];
dword = dword << 8;
EEPROM_read_byte(address+1, data);
dword = dword + data[0];
dword = dword << 8;
EEPROM_read_byte(address+2, data);
dword = dword + data[0];
dword = dword << 8;
EEPROM_read_byte(address+3, data);
dword = dword + data[0];
return dword;
}

void EEPROM_writelong(int address, unsigned long dword) {
byte data;

data = dword & 0xff;
EEPROM_write_byte(address + 3, data);
dword = dword >> 8;
data = dword & 0xff;
delay(100);
EEPROM_write_byte(address + 2, data);
dword = dword >> 8;
data = dword & 0xff;
delay(100);
EEPROM_write_byte(address + 1, data);
dword = dword >> 8;
data = dword & 0xff;
delay(100);
EEPROM_write_byte(address, data);
}
Acuario is offline   Reply With Quote