Trích:
Nguyên văn bởi tiendungkct
nếu như anh nói thì sau mỗi lần truyền mình phải có thời gian delay >=4.7us hả anh
|
Bạn nên đảm bảo điều kiện này. Sau điều kiện STOP thì phải có thời gian để bus ở trạng thái IDLE tối thiểu là 4.7 us, rồi mới đến điều kiện START kế tiếp. Vòng lặp chính của bạn có thể chạy quá nhanh ở phần cuối, sau khi hoàn tất điều kiện STOP.
Trích:
Nguyên văn bởi tiendungkct
em chưa hỉu lắm ý của anh, anh có thể nói rõ hơn không anh ?.theo em biết thì địa chỉ trong thanh ghi I2CADD<6:0> được so sánh với I2CRSR<7:1> nên em chưa hỉu câu "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" .mong anh giải thích cho em hỉu ,em cám ơn anh nhìu
|
Trong lệnh đặt địa chỉ slave từ master gửi đi, bạn dùng 0xA0. Trong giá trị 0xA0 này, 7 bit cao nhất của nó là địa chỉ của slave, còn bit thấp nhất là bit R/W. Do đó, trong đoạn code cho slave, bạn phải đặt giá trị (0xA0 >> 1) = 0x50 vào I2CADD, chứ không phải 0xA0.
Thân,