Thông báo

Collapse
No announcement yet.

Đọc ghi 24C16

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Đọc ghi 24C16

    Tớ có một con 24C16 ( mới mua ), hì hì, bây giờ tớ mới học đến cách giao tiếp giữa AVR và 24C16. Tất nhiên là dùng giao tiếp I2C rùi. Nhưng điều tớ băn khoăn và không rõ ( tất nhiên là tớ hơi kém ) là : với 24C16 có dung lượng là 16K bit = 2K byte ( có đúng không các cậu ? ). Như vậy thì nó sẽ có bao nhiêu địa chỉ?. Mỗi địa chỉ ghi được bao nhiêu byte?. Ví dụ : tớ có một số ( hoặc ký tự ) là 123456 hoặc abcde tớ muốn ghi vào 24C16 thì tại một địa chỉ của nó có ghi hết không?. Các cậu giúp tớ với

  • #2
    Mình cũng đã làm thành công với họ 24xx và tham khảo thêm 1 số thông tin từ anh Sphinx,và datasheet.
    -Cấu trúc sơ lược về bộ nhớ của 24xx:
    Xem 256 bytes là 1 page thì 8 bit thấp là dùng trong 1 page bạn còn cần thếm 1 số bit cao hơn để quyết định là page nào.
    việc truyền thêm các bit này không cần phải truyền thêm 1 byte địa chỉ nữa mà đã đuợc truyền ngay lúc truyền địa chỉ của EEPROM.
    Cách truyền địa chỉ:
    -Địa chỉ của 24XX(với AT) thì địa chỉ là 1010A2A1A0B,3 bit A2A1A0 dùng để truyền thêm,đối với các 2401,2402 thì các bit này tuơng ứng với 3 chân A0,A1,A2 ở ngoài,còn từ 24C04 trở lên thì do tổ chức bộ nhớ lớn hơn 256 (8bit) nên cần thêm 1 số bit để có thể truy xuất được,nên các bit A2A1A0 đuợc tận dụng
    Với 2404 thì có 512B(Kbyte):2 page->9bit nên dùng thêm bit A0(MSB của 9bit)
    Với 2408 thì có 1024B:4 page->10bit dùng thêm A1A0(MSB của 10 bit là A1)
    Tương tự cho 24C16:2KB->11bit nên dùng hết 3 bit còn lại (A2A1A0).
    Do đó khi sử dụng bạn chỉ cần chỉ ra đúng địa chỉ ô nhớ bạn cần sau đó thực hiện công việc đọc ghi như bình thường.
    Còn chế độ page wrirte mình sẽ tiếp tục viết sau,đây là 1 code mình viết giao tiếp với AT24C04 dùng 8051,theo chế độ ghi ngẫu nhiên,với hàm display để hiện dữ liệu đọc đuợc từ eeprom ra ngoài đèn led:
    Code:
    	unsigned char d;
    	start_i2c();
    	if (tx_i2c(0xA0)) goto error;//chế độ ghi với bit A0 là 0:256 byte thấp
    	tx_i2c(0x01);//địa chỉ 0x01
    	tx_i2c(99); //ghi giá trị 0x99 vào 0x01;
    	stop_i2c();	
    	delay(1);//delay cho Twr (time write cycle) để cho EEPROM ghi dữ liệu 
    	start_i2c();
    	tx_i2c(0xA0);//write
    	tx_i2c(0x01);//dummy sequence
    	start_i2c();
    	tx_i2c(0xA1);//read
    	d=rx_i2c(0);//doc 1 byte voi xung  N_ACK
    	stop_i2c();
    	display(d);
    	while(1);
    	error:
    		//Error process
    	display(-1);
    	while(1);

    Sông dài, Thuyền lớn, Biển rộng bao la.
    Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

    Comment


    • #3
      anh cho em hỏi ở HN thì mua con này và mạch nạp của nó ở đâu ah
      em cám ơn anh nhiều..
      |

      Comment

      Về tác giả

      Collapse

      hocAVR Tìm hiểu thêm về hocAVR

      Bài viết mới nhất

      Collapse

      Đang tải...
      X