Vừa nãy tôi nhận ra rằng dữ liệu I 2 C và các dòng đồng hồ (SDA và SCL) phải có điện trở pullup.
Vâng, tôi đã xây dựng một vài đồng hồ sử dụng DS1307 RTC (xem biểu dữ liệu ) theo sơ đồ dưới đây. Lưu ý rằng tôi đã bỏ qua cả hai điện trở pullup.
Cả hai đồng hồ hoạt động tốt, một trong số họ đang làm việc hơn 3 tháng nay. Làm thế nào là có thể? Trong mọi trường hợp, tôi muốn biết:
Điều gì xảy ra khi pullups I 2 C bị bỏ qua?
Có phải việc thiếu pullups có khả năng làm hỏng bất kỳ hai IC nào trong bảng của tôi không?
Tôi đang trả lời câu hỏi giải quyết trường hợp cụ thể của tôi về việc kết nối ATmega328P với DS1307 RTC như trong sơ đồ tôi đã cung cấp, nhưng nếu câu hỏi không quá rộng, sẽ rất hữu ích khi biết những gì xảy ra khi bỏ qua nói chung , tức là trong các kịch bản khác của hoạt động I 2 C.
Tái bút Tôi đã tìm kiếm trên mạng để tìm câu trả lời, nhưng chỉ có thể tìm thấy các bài viết về kích thước của pullups.
Cập nhật: Tôi đang sử dụng Arduino IDE 1.03 và phần sụn của tôi xử lý RTC bằng cách sử dụng DS1307RTC Arduino lib (thông qua các chức năng của nó RTC.read()
và RTC.write()
). Lib đó lần lượt sử dụng Wire.h
để nói chuyện với RTC.
Cập nhật 2: Dưới đây là một loạt các ảnh chụp phạm vi tôi đã chụp để giúp giải thích cách I 2 C hoạt động mà không cần các pullups bên ngoài.
Cập nhật 3 (sau khi thêm I 2 C pullups): Dưới đây là một loạt ảnh phạm vi khác tôi đã chụp sau khi thêm điện trở pullup (4K7) thích hợp vào các dòng I 2 C (trên cùng một bảng). Thời gian tăng giảm từ khoảng 5 khúc xuống còn 290 ns. Tôi 2 C bây giờ hạnh phúc hơn nhiều.