AT24C32 EEPROM
and arduino
หลังจากที่ได้ทดลองกับ module RTC มันดันมี IC ติดมาด้วย 1 ตัวคือ AT24C32 เป็น IC ที่ใช้เก็บข้อมูลแบบ EEPROM ที่เชื่อมต่อผ่าน I2C ขนาดหน่วยความจำภายใน 32kbits ไม่ใช้ bite นะครับ ก็สามมารถเก็บข้อมูลได้ 4kbytes ละครับตัวนี้
สำคัญเลย คือ EEPROM มีจำนวนในการอ่านเขียนที่ีมีขีดจำกัด ควรดู datasheet ไปด้วยนะครับ แต่ถ้าถึงขีดจำกัดแล้ว IC ใช้ไม่ได้เลยหรือไม่ ตอบว่า ไม่ครับมันจะเสียแค่ Address ตัวนั้นเท่านั้น Address ที่ไม่ได้ใช้งานก็สามารถนำมาใช้งานได้อยู่ครับ
เราไปดูรายละเอียดต่างๆ กันครับ
AT24C32 device addressing (ใช้เชื่อมต่อ)
ในการตั้งค่าของระบบในมาตรฐาน I2C นั้นจำเป็นจะต้องมีรหัสที่ใช้ในการเชื่อมต่อระหว่าง
Master กับ slave โดยรหัสนั้นจะใช้เป็นเลขฐาน16
โดยการตั้งค่า จะใช้บิต 5 – 7 เป็นบิตที่ทำการตั้งค่ารหัส
Address นั้นคือ A0 - A2 โดยในการตั้งค่านั้นจะทำการใช้ pull - resister เพื่อให้สถานะทางลอจิกเป็น
HIGH หรือ LOW ต่อที่ขา 1(A0),
2(A1) และ 3(A2) การคิด Address ออกมาเป็นเลขฐานสอง
ตั้งตารางด้านล่างนี้ แล้วในการแปลงเป็นเลขฐานสิบหกก็จะคิดโดยการเพิ่ม 0 ไปที่ก่อนรีจีสเตอร์บิตแรก ก็จะได้เป็น 01010111B แล้วแปลงเป็นเลขฐานสิบหก 0x57H แล้วในบิตสุดท้ายเป็นการกกำหนดการเขียนหรืออ่านข้อมูลใน
EEPROM นั้น
อ่านและเขียนข้อมูลใน EEPROM
ตัวอย่างที่ 1
เป็นการเลือก Address และการส่งข้อมูลที่ละ byte
วิธีการเลือก Address ที่ทำการเก็บข้อมูลจะอธิบายในภานหลัง
มาดูตัวอย่างแรกกันก่อน
#include <Wire.h>
#define address 0x57
int val = 100;
byte data;
void setup()
{
Wire.begin();
Serial.begin(9600);
delay(1000);
//WRITE(เขียน)!!!!*******************************
Wire.beginTransmission(address);
Wire.write(0x00); //First
Word Address
Wire.write(0x00); //Second
Word Address
Wire.write(0x41); //Write
an 'A'
delay(10);
Wire.endTransmission();
delay(10);
//READ!!!!*********************************
Wire.beginTransmission(address);
Wire.write(0x00); //First
Word Address
Wire.write(0x00); //Second
Word Address
Wire.endTransmission();
delay(10);
Wire.requestFrom(address, 1);
delay(10);
data = Wire.read();
Serial.write(data); //Read
the data and print to Serial port
Serial.println();
delay(10);
}
void
loop()
{
}
ตัวอย่างที่ 2 ลำดับการอ่าน
สามารถอ่านและเขียน EEPROM ในหน่วยความจำได้ไปเรื่อยๆ
จนกว่าจะสิ้นสุดขนาด ของหน่วยความจำ 4kbytes และเริ่มอ่านจาก bite แรกจนสุด ตามตัวอย่างข้างล่างนี้
#include <Wire.h>
#define address 0x50
const int val = 26;
byte data;
void setup()
{
Wire.begin();
Serial.begin(9600);
delay(1000);
//WRITE!!!!*******************************
Serial.println("Writing to EEPROM:");
Wire.beginTransmission(address);
Wire.write(0x00);
Wire.write(0x00);
for(byte i=0; i//Write 26 data bytes
{
Wire.write(i+65);
Serial.write(i+65);
Serial.println();
}
delay(10);
Serial.println();
Wire.endTransmission();
delay(10);
//READ!!!!*********************************
Serial.println("Reading from EEPROM:");
Wire.beginTransmission(address);
Wire.write(0x00);
Wire.write(0x00);
Wire.endTransmission();
delay(10);
Wire.requestFrom(address, val);
delay(10);
for(byte i=0; i//Read 26 data bytes
{
data = Wire.read();
Serial.write(data);
Serial.println();
}
delay(10);
}
void loop()
{
}
ตัวอย่างที่ 3 ลำดับการอ่าน
จาก
code ที่ผ่านมา ยังไม่สามารควบคุมการเขียนและอ่านในตำแหน่งที่ต้องการได้ถ้าเราต้องการที่จะควบคุมการเขียนและอ่านในตำแหน่งที่เราต้องการ
ก็แค่กำหนด ดังโค๊ดด้านล่างนี้
Wire.write(0x00); // Matic regitter
Wire.write(0x00); // Matic regitter
ให้เปลี่ยนจาก 0x00, เปลี่ยนเป็นแลขฐานสิบหก
ตัวอื่น โดยคิดแบบเมทริก X คูณ Y ดังด่านล่างนี้
A(First, Second)
จบละครับ เราก็สามารถอ่านและเขียนข้อมูลไปเก็บไวที่ EEROM AT24C32 ของเราได้แล้วหลังจากนี้ก็แล้วแต่ละครับว่าจะนำไปใช้อะไรกัน อ๋อลืมไปตัว Address ของ EEPROM ตัวนี้เขียนได้ ถึง(0x0F,0xFF) ก็จะได้ 4kbytes พอดี
ถ้าใครมีปัญหาด้านงานออกแบบหรือน้องที่สนใจหาที่ปรึกษาฟรีๆ หรือต้องการเขียน 3D componentต่าง ๆ สามารถ สอบถามได้ทีี่
Tal. 094-787-1126
Line ID : saksakkiki
facebook : saksan Momo
ความคิดเห็น
แสดงความคิดเห็น