2016/05/09
Arduino Sketch Writing MakerSwitch Tail Settings to ATMEL AT24C02 I2C EEPROM
Wiring
1. AT24C02.P01 - GND
2. AT24C02.P02 - GND
3. AT24C02.P03 - GND
4. AT24C02.P04 - GND
5. AT24C02.P05 - ArduinoUno.A4
6. AT24C02.P06 - ArduinoUno.A5
7. AT24C02.P07 - GND
8. AT24C02.P08 - 5V
Sketch
// Modified by Befun Hung on May 9, 2016
//Write setting of MakerSwitch to ATMEL AT24C02
// Address 0-7 contains ID number, address 8 contains address storing switch status value '0' or '1'
// Modified by Befun Hung on May 2, 2016
// For writing string to ATMEL AT24C02 I2C EEPROM from address 0 once and display all values in the EEPROM on serial monitor once
// The ATMEL AT24C02 I2C EEPROM with 256 bytes (2K bits) need only one byte for addressing is suitable for storing short text message such as id and ip configuration
//
// ** Original comment in simplified Chinese, the original sketch write in EEPROM numbers equal to it's address, read the values and display on serial monitor repeatedly
//直接给你个24c02简单的程序吧 不用附加库 别的带附加库也可以
//byte 换为int也行, 多数据,大于255的数据自己for循环存吧,double float论坛有教程
#include <Wire.h>
#define colPerLine 8
// define idLen according the length of id value needed
#define idLen 8
char id[idLen+1] = "25610249";
int i = 0;
int val;
void Writebyte(byte DeviceAddress, byte DataAddress, byte Data)
{
int rData = Data;
Wire.beginTransmission(DeviceAddress);
Wire.write(DataAddress);
Wire.write(rData);
Wire.endTransmission();
delay(10);
}
byte Readbyte(int DeviceAddress, byte DataAddress)
{
byte rdata = 0xFF;
Wire.beginTransmission(DeviceAddress);
Wire.write(DataAddress);
Wire.endTransmission();
Wire.requestFrom(DeviceAddress, 1);
delay(10);
if (Wire.available())
{
rdata = Wire.read();
}
delay(10);
return rdata;
}
void setup()
{
Wire.begin();
Serial.begin(115200);
for (i=0;i<256;i++) {
if (i< idLen) {
Writebyte(0x50,i,id[i]);
}
else {
// comment out the following line if values in the address greater than idLen not to be overrided with 0
Writebyte(0x50,i,0);
}
}
// Address 8 contains address storing switch status value '0' or '1'
Writebyte(0x50,8,255);
for (i=0;i<256;i++) {
if ((i%colPerLine) == 0) Serial.println("");
val = Readbyte(0x50,i);
Serial.print(val);
Serial.print(" ");
}
}
void loop()
{
// if (i > 0xFF)
// {
// i = 0x00;
// }
// Writebyte(0x50, i, i);
// val = Readbyte(0x50, i);
// i++;
// Serial.print(val);
// Serial.print(" ");
// if ((i%8) == 0) Serial.println("");
}
2016/05/02
Writing String To ATMEL AT24C02 256 Bytes (2K bits) I2C EEPROM
Sometimes I need to store default data. Storing the data in external I2C EEPROM is suitable than in ATMEGA328P built-in EEPROM when you want to change the data values.
For ATMEGA328P built-in EEPROM, you have to upload a sketch to change the default data and re-upload the sketch for use.
For external I2C EEPROM, you just unplug the IC from IC socket and replace a new one with default data you need. Uploading sketches are not needed. And the chip is cheap, it costs only 0.03 USD.
Wiring
1. AT24C02.P01 - GND
2. AT24C02.P02 - GND
3. AT24C02.P03 - GND
4. AT24C02.P04 - GND
5. AT24C02.P05 - ArduinoUno.A4
6. AT24C02.P06 - ArduinoUno.A5
7. AT24C02.P07 - GND
8. AT24C02.P08 - 5V
Sketch
// Modified by Befun Hung on May 2, 2016
// For writing string to ATMEL AT24C02 I2C EEPROM from address 0 once and display all values in the EEPROM on serial monitor once
// The ATMEL AT24C02 I2C EEPROM with 256 bytes (2K bits) need only one byte for addressing is suitable for storing short text message such as id and ip configuration
//
// ** Original comment in simplified Chinese, the original sketch write in EEPROM numbers equal to it's address, read the values and display on serial monitor repeatedly
//直接给你个24c02简单的程序吧 不用附加库 别的带附加库也可以
//byte 换为int也行, 多数据,大于255的数据自己for循环存吧,double float论坛有教程
#include <Wire.h>
#define colPerLine 8
// define idLen according the length of id value needed
#define idLen 8
char id[idLen+1] = "25613804";
int i = 0;
int val;
void Writebyte(byte DeviceAddress, byte DataAddress, byte Data)
{
int rData = Data;
Wire.beginTransmission(DeviceAddress);
Wire.write(DataAddress);
Wire.write(rData);
Wire.endTransmission();
delay(10);
}
byte Readbyte(int DeviceAddress, byte DataAddress)
{
byte rdata = 0xFF;
Wire.beginTransmission(DeviceAddress);
Wire.write(DataAddress);
Wire.endTransmission();
Wire.requestFrom(DeviceAddress, 1);
delay(10);
if (Wire.available())
{
rdata = Wire.read();
}
delay(10);
return rdata;
}
void setup()
{
Wire.begin();
Serial.begin(115200);
for (i=0;i<256;i++) {
if (i< idLen) {
Writebyte(0x50,i,id[i]);
}
else {
// comment out the following line if values in the address greater than idLen not to be overrided with 0
Writebyte(0x50,i,0);
}
}
for (i=0;i<256;i++) {
if ((i%colPerLine) == 0) Serial.println("");
val = Readbyte(0x50,i);
Serial.print(val);
Serial.print(" ");
}
}
void loop()
{
// if (i > 0xFF)
// {
// i = 0x00;
// }
// Writebyte(0x50, i, i);
// val = Readbyte(0x50, i);
// i++;
// Serial.print(val);
// Serial.print(" ");
// if ((i%8) == 0) Serial.println("");
}
For ATMEGA328P built-in EEPROM, you have to upload a sketch to change the default data and re-upload the sketch for use.
For external I2C EEPROM, you just unplug the IC from IC socket and replace a new one with default data you need. Uploading sketches are not needed. And the chip is cheap, it costs only 0.03 USD.
Wiring
1. AT24C02.P01 - GND
2. AT24C02.P02 - GND
3. AT24C02.P03 - GND
4. AT24C02.P04 - GND
5. AT24C02.P05 - ArduinoUno.A4
6. AT24C02.P06 - ArduinoUno.A5
7. AT24C02.P07 - GND
8. AT24C02.P08 - 5V
Sketch
// Modified by Befun Hung on May 2, 2016
// For writing string to ATMEL AT24C02 I2C EEPROM from address 0 once and display all values in the EEPROM on serial monitor once
// The ATMEL AT24C02 I2C EEPROM with 256 bytes (2K bits) need only one byte for addressing is suitable for storing short text message such as id and ip configuration
//
// ** Original comment in simplified Chinese, the original sketch write in EEPROM numbers equal to it's address, read the values and display on serial monitor repeatedly
//直接给你个24c02简单的程序吧 不用附加库 别的带附加库也可以
//byte 换为int也行, 多数据,大于255的数据自己for循环存吧,double float论坛有教程
#include <Wire.h>
#define colPerLine 8
// define idLen according the length of id value needed
#define idLen 8
char id[idLen+1] = "25613804";
int i = 0;
int val;
void Writebyte(byte DeviceAddress, byte DataAddress, byte Data)
{
int rData = Data;
Wire.beginTransmission(DeviceAddress);
Wire.write(DataAddress);
Wire.write(rData);
Wire.endTransmission();
delay(10);
}
byte Readbyte(int DeviceAddress, byte DataAddress)
{
byte rdata = 0xFF;
Wire.beginTransmission(DeviceAddress);
Wire.write(DataAddress);
Wire.endTransmission();
Wire.requestFrom(DeviceAddress, 1);
delay(10);
if (Wire.available())
{
rdata = Wire.read();
}
delay(10);
return rdata;
}
void setup()
{
Wire.begin();
Serial.begin(115200);
for (i=0;i<256;i++) {
if (i< idLen) {
Writebyte(0x50,i,id[i]);
}
else {
// comment out the following line if values in the address greater than idLen not to be overrided with 0
Writebyte(0x50,i,0);
}
}
for (i=0;i<256;i++) {
if ((i%colPerLine) == 0) Serial.println("");
val = Readbyte(0x50,i);
Serial.print(val);
Serial.print(" ");
}
}
void loop()
{
// if (i > 0xFF)
// {
// i = 0x00;
// }
// Writebyte(0x50, i, i);
// val = Readbyte(0x50, i);
// i++;
// Serial.print(val);
// Serial.print(" ");
// if ((i%8) == 0) Serial.println("");
}
Labels:
Arduino,
AT24C02,
ATMEGA328,
ATMEGA328P,
ATMEL,
Data,
Default,
I2C EEPROM,
String,
Value,
Write,
Writing
Subscribe to:
Posts (Atom)