Giao tiếp với ROM ngoài với PIC!
Xin hỏi các bác.
Em muốn lưu dữ liệu đo vào bộ nhớ ngoài không mất nội dung. Khi cần có thể cập nhật và có thể đọc giá trị đó lên máy tính hoặc LCD. Các bác hướng dẫn em với nhé. Thanks. |
thế thì bạn có thể dùng EEPROM như 24Cxx (giao tiếp nối tiếp) hoặc NVRAM (giao tiếp song song) , EEPROM thì rẻ hơn NVRAM, bạn hỏi ở Nhật tảo có rất nhiều. hồi trước tôi mua EEPROM cũ 24C64 chỉ có 1000d/1con, khoái quá tôi mua liền 10 con để dành...
|
anh ơi cho em hỏi kết nối thêm bộ nhớ với Pic 16F877A thì qua cổng nào vậy anh.à mà code lập trình kết nối khó lắm nhỉ
|
Trích:
- Nếu RAM thì khá nhiều chân. - Nếu ROM thì tùy loại. Dễ tìm nhất là ROM hỗ trợ giao tiếp I2C (họ 24CXX). Bạn hãy down datasheet của 1 con ROM về đọc để hiểu giao thức I2C là như thế nào, sau đó đọc tiếp tutorial của anh Nam về I2C của dsPIC thì sẽ hiểu và ứng dụng tốt. |
16f877 có eeprom 256 byte. nếu bạn cần eeprom cao hơn có thế dùng 18f4680 1M.
còn nếu dùng eeprom ngoài có thế dùng 24Cxx nối theo chuẩn I2c. có thể dùng bất cứ chân nào của PIC vẫn được (chỉ cần 2 chân). còn nếu dùng eeprom theo chuẩn // AT28Cxx thì cần đến 19 chân của PIC. dùng cái nào thì code cũng đơn giản cả. nếu bạn dùng CCS cho PIC thì tôi có thể hổ trợ code cho bạn được |
Làm eeprom 24cxx đi anh. em cũng đang muốn làm con này. mà em ko hiểu tại sao em ko ghi được vào rom. em noi 2 chan A0,A1 voi dat. su dung CCs để viết
Code:
#include <16F877A.h> các cao thu xem họ em hai hàm ghi và đọc rom(24c512) có gì sai ko mà em ko đoc được với a. |
24cxx
đoạn chương trình dưới tôi đã dùng và chạy hoàn chỉnh bạn tham khảo nhé. cái này tôi chỉnh lại từ file 2464.c của CCS.
để viết vào 1 byte bạn gọi hàm: write_ext_eeprom(add,data); để đọc ra 1 byte từ 24cxx gọi hàm data = read_ext_eeprom(add) để 24cxx có địa chỉ nhận 0xa0 bạn cần nối chân A0,1,2 xuống GND. lưu ý là ko chạy mô phỏng được nhé chúc vui Code:
#use i2c(master, fast, sda=EEPROM_SDA, scl=EEPROM_SCL) |
vâng cám ơn anh nhiều. em test lai đây
|
hic hôm nay em ngồi test cả ngày mà ko được. em làm giống như trên mà cũng ko được(em dùng con 24c64 va 24c32). em đọc các giá trị ghi vào trong rom lên mánh tình nhưng ko thấy gì.
Code:
void testrom() |
Hình như 24c64 cần 2 byte địa chỉ, trong khi đó 24c32 thì chỉ cần 1 byte địa chỉ. Bạn xem lại thử. Mà phần cứng của bạn đã nối giống như đề nghị của datasheet chưa?
|
mình dùng 2 byte địa chỉ mà (int16), các chân A0,A1,A2 nối suống đất nên địa chỉ thiết bị là a0.
|
được rồi các bác a. hôm gì cái mạch của em nhầm nhục quá đi mất.
|
24cxx
Trích:
|
em cũng làm như ở trên thôi. Hàm đọc và ghi rom thì dùng hàm của em hay của anh đều được.sử dụng hàm testrom(đã post ở trên) để test. khi máy tính gửi xuống chữ "b" thì dọc dữ liệu từ rom lên. khi máy tính gửi xuống chữ "t" thì ghi dữ liệu vào rom
hôm gì ko làm được là do em bị chết phần cứng. con Pic6f877 của em bị chết đúng chân I2C nên em ko phát hiện ra được(các chân khác vẫn hoạt động bình thường). hôm gì dùng con pic khác thế là chạy luôn. hic mừng quá mà các bác cho em hỏi có cách nào test pic còn sống hay chết kô nhỉ |
Múi giờ GMT. Hiện tại là 12:49 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam