HƯỚNG DẪN LẬP TRÌNH ĐỌC GHI EEPROM NGOÀI

Lời đầu tiên, Arduino Shop kích chúc các bạn một ngày mới làm việc tràn đầy năng lượng. Hôm nay, Arduino Shop giới thiệu đến mọi người một bài viết mới, Hướng dẫn lập trình đọc ghi EEPROM ngoài. Ah, Vì sao lại có bài viết này? Chúng ta cùng nhau xem chi tiết bên dưới nhé. Nào, Let's Go! :)

Ngày đăng: 06-01-2017

4,065 lượt xem

Giới thiệu

Kinh thưa các bạn, Việc chúng ta sử dụng EEPROM của vi điều khiển cũng như của Arduino để thực hiện một số thao tác lưu giá trị vào các thanh ghi của bộ nhớ này. Tuy nhiên, có một hạn chế mà chúng ta cần phải quan tâm là, Với Arduino, nó chỉ cho phép chúng ta ghi vào EEPROM của nó chỉ với 100.000 lần. Do vậy, điều gì sẽ xãy ra nếu như quá 100.000 lần này? Đó là lí do vì sao chúng ta cần phải có 1 bài viết mới, làm sao ghi và lưu được các giá trị đó ở một con EEPROM ngoài. 

Ở đây, Arduino Shop lựa chọn con EEPROM ngoài là 24C32 để thực hiện việc này. Vì ở con này, nó cho phép bạn ghi và đọc lên tới 10.000.000 lần. Con số này là rất lớn. Hơn nữa, khi lở con này hư, chúng ta có thể mua một con IC khác gắn vào là có thể được( Mất dữ liệu) và sẽ đở chi phí hơn là mua một em Arduino đặt biệt nếu chúng ta mà sài con Mega hoặc những con đắt tiền hơn thì thật là lảng phí cho một nguyên nhân mà mình có thể khắc phục được đúng không nào?

Rồi, giờ chúng ta đi vào phần chi tiết bên dưới.

1. Chuẩn bị thiết bị

Để thực hiện được ghi đọc dữ liệu trên EEPROM ngoài 24C32 này, chúng ta cần có một số phần cứng hỗ trợ như sau:

 - 24LC256 EEPROM chip

 - 10KΩ resistor

 - Arduino microcontroller

2. Sơ đồ kết nối

Để hiểu được sơ đồ kết nối giữa Arduino với EEPROM ngoài, chúng ta cần quan tâm và biết datasheets của con EEPROM ngoài này. Để hiểu rõ về nó, tham khảo >>>tại đây<<< các bạn nhé: 

Sơ đồ chân như hình bên dưới nha:

So-do-chan

So-do-chan

Chú thích các chân như bên dưới:

Đầu tiên, cấp nguồn cho Chip. Pin số 8 VCC nối nguồn dương 5V và pin số 4 nối mass 0V. Con này có 3 bit địa chỉ để xác định địa chỉ của nó bằng phần cứng A0, A1, A2. Địa chỉ bắt đầu của nó là 0x50 và tổ hợp 2^3=8 con như thế. Do vậy, có thể nối 8 con EEPROM ngoài với Arduino từ địa chỉ 0x50 tới 0x57 nha các bạn. Một điều rất tiện lợi để mở rộng bộ nhớ EEPROM cho arduino.

Chân WP là chân cho phép đọc ghi, chúng ta để mặt định chúng nối đất nhé.

Sơ đồ kết nối giữa Arduino và eeprom ngoài như hình bên dưới các bạn:

So-do-ket-noi-eeprom-ngoai

So-do-ket-noi-eeprom-ngoai

Hoặc các bạn có thể mô phỏng trên protues và sơ đồ kết nối như bên dưới nhé:

So-do-ket-noi-eeprom-protues

So-do-ket-noi-eeprom-protues

Giờ chúng ta giải thích phần cứng đấu nối EEPROM ngoài với Arduino tí nhé:

- Giữa Arduino và EEPROM ngoài được kết nối qua chuẩn giao tiếp I2C. Ba chân A0, A1, A2 được nối với 0V để xác định địa chỉ con này là 0x50. tất nhiên bạn cũng có thể tự thay đổi không nhất thiết phải 3 chân này là 0V.

- Chân WP cho phép EEPROM hoạt động, do vậy, mình mặt định là nối đất các bạn nha.

- Kêt nối I2C nên các chân SDA và SCL nối điện trở kéo lên điện trở 10K nha các bạn hoặc 4.7K. Nối vào chân 20,21 của Arduino Mega hoặc A4, A5 của Arduino Uno.

3. Code lập trình

#include <Wire.h>
#define eeprom 0x50 //Xác d?nh d?a ch? c?a con 24c32

void setup(void){
Wire.begin(); //creates a Wire object
Serial.begin(9600);

unsigned int address ;//= 0; //first address of the EEPROM
// Bắt đầu ghi dữ liệu vào EEPROM địa chỉ 0
Wire.beginTransmission(0x50);
Wire.write((0 << 8)); //writes the MSB
Wire.write(0 & 0xFF); //writes the LSB
Wire.write(1);
Wire.endTransmission();
delay(10);
// Bắt đầu ghi dữ liệu vào EEPROM địa chỉ 1
Wire.beginTransmission(0x50);
Wire.write((1 << 8)); //writes the MSB
Wire.write(1 & 0xFF); //writes the LSB
Wire.write(2);
Wire.endTransmission();
delay(10);
// Bắt đầu ghi dữ liệu vào EEPROM địa chỉ 2
Wire.beginTransmission(0x50);
Wire.write((2 << 8)); //writes the MSB
Wire.write(2 & 0xFF); //writes the LSB
Wire.write(3);
Wire.endTransmission();
delay(10);
// Bắt đầu ghi dữ liệu vào EEPROM địa chỉ 3
Wire.beginTransmission(0x50);
Wire.write((3 << 8)); //writes the MSB
Wire.write(3 & 0xFF); //writes the LSB
Wire.write(4);
Wire.endTransmission();
delay(10);
// Bắt đầu ghi dữ liệu vào EEPROM địa chỉ 4
Wire.beginTransmission(0x50);
Wire.write((4 << 8)); //writes the MSB
Wire.write(4 & 0xFF); //writes the LSB
Wire.write(253);
Wire.endTransmission();
delay(10);
// Bắt đầu ghi dữ liệu vào EEPROM địa chỉ 5
Wire.beginTransmission(0x50);
Wire.write((5 << 8)); //writes the MSB
Wire.write(5 & 0xFF); //writes the LSB
Wire.write(6);
Wire.endTransmission();
delay(10);
for(address = 0; address< 5; address++) {
Serial.println(readEEPROM(eeprom, address), DEC);
}
}

void loop(){
// Khong làm gì ở đây cả, do nếu việc ghi nhiều lần ở đây sẽ gây tốn kém và giảm tuổi thọ của EEPROM các bạn nha. Chỉ được phép 10.000.000 lần thôi.
}

//Hàm đọc giá trị được lưu trong EEPROM 24C32
byte readEEPROM(int deviceaddress, int eeaddress ) {
byte rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
Wire.write((eeaddress << 8)); //writes the MSB
Wire.write((eeaddress & 0xFF)); //writes the LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,2);
if (Wire.available())
rdata = Wire.read();
return rdata;

4 Lời kết

Đến đây arduino Shop xin kết thúc bài viết hướng dẫn lập trình đọc ghi eeprom ngoài của mình. Chúc các bạn có được ứng dụng hay vào thực tế từ bài viết này. Nếu các bạn chưa làm được hoặc chưa rõ thì liên hệ với Mr Quốc theo thông tin bên dưới các bạn nhé. Cảm ơn các bạn rất nhiều.

GỌI NGAY - 0902 37 12 52 (Mr Quốc): Tư vấn KT

ĐỂ ĐƯỢC TƯ VẤN VÀ CUNG CẤP GIẢI PHÁP KỊP THỜI CHO BẠN

ARDUINO SHOP

Địa chỉ: Số 41 Gò Dưa, Phường Tam Bình, Quận Thủ Đức, TP. Hồ Chí Minh
Email: arduinoshophcm@gmail.com

Bình luận (0)

Gửi bình luận của bạn

Captcha
<