PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Ghi dữ liệu vào eeprom 24c256 (http://www.picvietnam.com/forum/showthread.php?t=5296)

rikimaru87 13-11-2009 02:40 AM

Ghi dữ liệu vào eeprom 24c256
 
em xài 4 con 24c256 :
ghi dữ liệu vào 1 con (A0=0; A1=0) với hàm dưới đây .
em ghi dữ liệu theo thứ tự tăng dần của địa chỉ 16bit (address)
vậy address bắt đầu là =0x0000 , khi address = 0xFFFF, thì chuyển sang ghi vào con khác .
như vậy có đúng không ạ . và đã hết dung lượng eeprom chưa ạ ?
mong mọi người chỉ bảo ạ !

void write_ext_eeprom(long int address, BYTE data)
{
short int status;
i2c_start();
i2c_write(0xa0);
i2c_write(address>>8);
i2c_write(address);
i2c_write(data);
i2c_stop();
i2c_start();
status=i2c_write(0xa0);
while(status==1)
{
i2c_start();
status=i2c_write(0xa0);
}
i2c_stop();
}

namqn 13-11-2009 08:36 AM

Trích:

Nguyên văn bởi rikimaru87 (Post 31194)
em xài 4 con 24c256 :
ghi dữ liệu vào 1 con (A0=0; A1=0) với hàm dưới đây .
em ghi dữ liệu theo thứ tự tăng dần của địa chỉ 16bit (address)
vậy address bắt đầu là =0x0000 , khi address = 0xFFFF, thì chuyển sang ghi vào con khác .
như vậy có đúng không ạ . và đã hết dung lượng eeprom chưa ạ ?
mong mọi người chỉ bảo ạ !

void write_ext_eeprom(long int address, BYTE data)
{
short int status;
i2c_start();
i2c_write(0xa0);
i2c_write(address>>8);
i2c_write(address);
i2c_write(data);
i2c_stop();
i2c_start();
status=i2c_write(0xa0);
while(status==1)
{
i2c_start();
status=i2c_write(0xa0);
}
i2c_stop();
}

24C256 có dung lượng 256 kbit = 32 kB, do đó địa chỉ cuối cùng sẽ là 0x7FFF chứ không phải 0xFFFF.

Bạn nên đọc datasheet của 24C256 để biết các chế độ ghi dữ liệu được hỗ trợ. Không hiểu đoạn code sau khi ghi dữ liệu của bạn để làm gì.

Thân,

rikimaru87 13-11-2009 10:15 PM

cảm ơn anh Nam. em ghi dữ liệu nhiệt độ của lò sấy gỗ lưu vào eeprom. để sau này khi cần kết nối với máy vi tính vẽ đồ thị lên VB6 . em dùng ds1307 trong mạch.nên mỗi lần ghi giá trị nhiệt độ phải ghi thêm vào thời gian ghi . tốn 1 byte nhiệt độ và 3 byte ghi lại giờ phút giây . em làm vậy đc ko anh Nam

namqn 14-11-2009 11:40 AM

Trích:

Nguyên văn bởi rikimaru87 (Post 31215)
cảm ơn anh Nam. em ghi dữ liệu nhiệt độ của lò sấy gỗ lưu vào eeprom. để sau này khi cần kết nối với máy vi tính vẽ đồ thị lên VB6 . em dùng ds1307 trong mạch.nên mỗi lần ghi giá trị nhiệt độ phải ghi thêm vào thời gian ghi . tốn 1 byte nhiệt độ và 3 byte ghi lại giờ phút giây . em làm vậy đc ko anh Nam

Bạn hoàn toàn có thể làm như vậy. Tuy nhiên, ghi thông tin thời gian đầy đủ cho mỗi giây chẳng hạn thì lãng phí bộ nhớ. Theo tôi, bạn có thể quy định mỗi block 64 byte của EEPROM sẽ chứa 2 byte giờ và phút, cùng với nhiệt độ của các giây 0 đến 59 của phút đó. Hai byte còn lại có thể dùng cho checksum để dò lỗi và sửa lỗi nếu có.

Như vậy, mỗi phút bạn mới ghi 1 block 64-byte vào EEPROM, và một chip 24C256 có thể chứa dữ liệu của 512 phút (> 8 giờ).

Thân,

truong298 15-04-2012 12:35 PM

e cũng đang làm đề tài tương tự . a có thể up code với mạch lên được không. thanks a\


Múi giờ GMT. Hiện tại là 07:07 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam