Giao tiếp 2 dspic bằng I2C
em đọc TUT của anh Nam về giao tiếp i2c. em làm lại dùng 2 con dspic 30f2010 giao tiếp với nhau .code master em chỉ chỉnh 1 chút ,slave em viết ,nhưng không hỉu sao nó không chạy ji hết.
Master em gửi dữ kiệu xuống ,slave nhận và xuất ra port B em dùng ngắt để nhạn dữ liệu của master trong ngắt em bật led nối vào portE0 để kiểm tra nhưng cũng không thấy xẩy ra ngắt luôn .Mong các bác giúp đỡ em nhé.thanks Mater Code:
#include "p30f2010.h" Code:
#include "p30f2010.h" |
Trước hết, bạn đã chọn tốc độ là 100 kHz. Theo bảng 22-36 trong datasheet của dsPIC30F2010 (phiên bản DS70118G), thời gian bus rỗi tối thiểu là 4.7 us. Với code cho master hiện thời của bạn, tôi cho rằng thời gian này có thể bị vi phạm.
Đối với slave, bạn xem lại giá trị địa chỉ được nạp vào thanh ghi I2CADD (giá trị mà bạn đang dùng là 7-bit địa chỉ được dịch trái 1 bit và kết hợp với bit R/W, chứ không phải là 7-bit địa chỉ chính xác). Chú ý rằng các địa chỉ 7 bit hợp lệ nằm trong phạm vi 0x04 - 0x77. Thân, |
Trích:
Trích:
|
Trích:
Trích:
Thân, |
em đã thay địa chỉ của slave là 0x50 (vẫn giữ lại địa chỉ slave mà master truyền cho slave[0xA0] ) mà vẫn không được ,ngắt từ slave vẫn không xẩy ra .giờ em cũng chẳng biết sai ở đâu nữa mong được anh giúp.
master em đã bỏ đoạn truyền ra khỏi while(1) cảm ơn anh nhiều. |
Hình như chỉ có dòng 33F mới có: void _ISR_PSV _SI2C1Interrupt(void)
Còn dong 30F chỉ có 1 module I2C nên Bác dư một con số 1 thì phải : _SI2CInterrupt Mình thấy Code ví dụ của Microchip ở địa chỉ (http://www.microchip.com/stellent/id...GE&nodeId=2622) tài liệu :CE145 - Using I2C module as a Slave device thấy họ không có thiết lập tốc độ baund cho Slave. Mình chỉ thấy đến đó thôi chứ thực sự mình cũng đang gặp vấn đề hệt như bác. Mình cũng dùng địa chỉ Master và Slave như Anh Nam nói, cũng không cách nào cho Slave ngắt được mà cũng không biết cách nào kiểm tra xem thanh ghi I2CRSR (Thanh ghi tạm để đưa vào I2CRCV) xem Master có gởi xuống Bus đúng giá tri địa chỉ đó không? Anh Nam có cách nào chỉ em với ! Em mong Anh Nam chỉ giúp tụi em, Anh thử viết một bài mẫu có cả code cho Master và Slave tương thích với nhau (Dùng C30). Em đã tìm khắp các nơi, chỗ có code cho Slave thì không có code cho Master và ngược lại. Thực sự, kể cả trên Microchip không có cặp đôi nào tương thích cả. Mong Anh Nam và các Anh ai biết thì chỉ giúp cho đàn em. |
Không ai giúp em vụ này sao ?
|
Mình cũng đang làm giao tiếp 2 dspic, sau một hồi test đã chạy
bạn thử kiểm tra lại phần cầu hình các chân xem, đo điện áp 2 dây SCL và SDA lúc không truyền có bằng 5V không mình cấu hình cho slave như sau: Code:
_I2CEN = 1; // enable |
ah mà chữ kct sau nick bạn nghĩa là gì thê ;))
|
đúng là mình đo 2 chân SDA & SCL không có ji cả.
bạn gửi code của bạn cho minh tham khao dc không nhỉ ? thanks |
code của mình hơi dài, mình đang làm cái project mà, mail bạn là gì mình send vào mail cho
|
Chào bác mtuankct, mình vẫn không làm cách nào cho con Slave xảy ra ngắt cả.
Ngay cả khi cấu hình Slave giống(tương tự) như bác nói. Mình làm với master là 4011 và Slave là 4013. Bác làm nó chạy rồi, mong bác bỏ ít thời gian, tốt bụng post lên cho anh em học hỏi. Hoặc nếu được bác có thể gửi email cho mình được không ? nthanhluan87@yahoo.com Cảm tạ bác nhiều. |
1 Attachment(s)
mình viết cái đk động cơ BLDC, nó hơi dài ngại chia ra, thôi các bác cứ lấy cả về mà xem, trong này có 2 cai project, một cái cho Slave và một cái cho Master
|
lúc đầu mình làm nó cũng mắc một số lỗi, các bác nên test từng bước, xem nó đã truyền start được chưa, đã nhận đia chỉ chưa... thế sẽ dễ kiểm tra lỗi hơn
|
Trích:
bạn có treo điện trở 2 chân SDA & SCL lên là ok thui mà |
Múi giờ GMT. Hiện tại là 03:03 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