Làm cách nào để kết nối nhiều thiết bị giao diện i2c vào một pin A4 (SDA) và A5 (SCL) trên Arduino?


31

Tôi muốn thêm một mô-đun đồng hồ thời gian thực vào dự án nhỏ của mình. Tôi muốn hiển thị cả thời gian và ngày trên mô-đun LCD i2c 2x16 hiện có của mình.

Cả mô-đun đồng hồ thời gian thực giao diện i2c và mô-đun LCD 2x16 đều sử dụng cùng một pin A4 (SDA) và A5 (SCL) trên Arduino Uno. Sau nhiều giờ tìm kiếm trên mạng, xe buýt i2c thực sự có thể mất nhiều thiết bị nối tiếp. Điều này là có thể bởi vì mỗi thiết bị có địa chỉ duy nhất của riêng mình.

Câu hỏi của tôi là làm thế nào để kết nối vật lý hai thiết bị giao diện i2c vào một A4 và A5? Cảm ơn.


2
Câu trả lời ngắn: Dây chúng song song. Buộc các SDA lại với nhau và kết nối với A4 và SCL với A5. Sau đó, tất nhiên có vấn đề kéo lên đôi khi giúp.
SDsolar

Câu trả lời:


32

Một số người gặp khó khăn khi hình dung mọi thứ được kết nối với nhau, vì vậy đây là một hình ảnh:

(Phục vụ đề xuất)

sơ đồ

mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab I2C là một bus, vì vậy các tín hiệu giống như được kết nối với nhau. Sơ đồ địa chỉ cho phép vi điều khiển chọn thiết bị mà nó đang nói đến. Trên Arduino, điện trở kéo lên 10k goto "VDD", đó là chân 5V hoặc 3.3V.


Xin chào, điều này có thể rất cơ bản nhưng tôi chưa quen với thiết bị điện tử và đã tìm thấy trang này từ tìm kiếm google, uC đề cập đến điều gì?
Ciasto piekarz

Tôi tin rằng tài liệu tham khảo là cho bất kỳ uC nào, vì sơ đồ kết nối phải giống nhau, trừ khi có ghi chú khác.
KingsInnerSoul

uC có thể là một Arduino. SDA là chân A4 và SCL là chân A5.
SDsolar

8
@Ciastopiekarz, C là viết tắt của "vi điều khiển." Chữ Hy Lạp là tên viết tắt của micro. Bởi vì μ trông giống như bạn, rất nhiều người chỉ viết "uC".
foobarbiru

9

Đối với I2C, nếu tất cả các thiết bị phụ thuộc có địa chỉ thiết bị khác nhau, tất cả các chân SDA sẽ được kết nối với nhau và tất cả các chân SCL phải được kết nối với nhau. Nó đơn giản như vậy.

Đương nhiên, bạn cũng nên bao gồm các điện trở kéo lên trên cả hai dòng, theo yêu cầu cho I2C. Làm thế nào để chọn các giá trị điện trở đã được thảo luận ở đây trước đây .


Tôi đã phát hiện ra rằng miễn là một trong các thiết bị là DS3231 RTC thì không cần phải kéo ra bên ngoài.
SDsolar 22/03/2017

3
@SDsolar, điều đó có lẽ có nghĩa là DS3231 có pull-up bên trong, vì vậy bằng cách sử dụng thiết bị đó, bạn đang cung cấp pull-up cho xe buýt. Đó không hẳn là một điều tốt, bởi vì nó giới hạn sự tự do của bạn để điều chỉnh lực cản kéo lên tùy thuộc vào số lượng thiết bị trên xe buýt.
Photon

Suy nghĩ của tôi chính xác. Việc thêm các pullups bên ngoài sẽ song song với bất cứ thứ gì có trong DS3231, và do đó có thể cuối cùng không đủ để I2C hạnh phúc.
SDsolar

@SDsolar, Điều này có liên quan gì đến câu hỏi của OP hoặc câu trả lời của tôi? Đây không phải là một trang web thảo luận chung. Nếu bạn muốn chỉ nói về công cụ, bạn có thể tham gia phòng trò chuyện của chúng tôi .
Photon

3

Kết nối hai chân A4-sda với A5-scl (trên cả hai bảng uno-uno) và kết nối điện trở từ 5v từ mỗi dòng sda-scl tương ứng.

nhập mô tả hình ảnh ở đây


đã bỏ phiếu vì câu trả lời không trả lời câu hỏi ban đầu, cụ thể là "kết nối vật lý hai thiết bị giao diện i2c vào một A4 và A5".
Oleg Mazurov

Tôi không thể xóa, vì vậy tôi chỉnh sửa thành một câu trả lời (có thể) thỏa đáng hơn
daedalucian

Chia sẻ điện áp là không bắt buộc phải không?
clankill3r

0

I2C là giao thức truyền dữ liệu được phát triển bởi Philips. Còn được gọi là giao diện hai dây vì nó sử dụng hai dây để liên lạc. Dòng đồng hồ SCL-serial. SDL-Dòng dữ liệu nối tiếp. Vì vậy, bạn cần kết nối các chân tương ứng của các thiết bị i2c có thể là chân eeprom hoặc LCD với chân SCL và SDL của bộ điều khiển vi mô bạn đang sử dụng với điện trở pullup với VDD. Vì nó là giao thức địa chỉ có địa chỉ 7 bit cho mỗi thiết bị được kết nối, bạn có thể giải quyết tối đa 2 ^ 7 thiết bị khác nhau. Nhưng thông thường địa chỉ I2C của thiết bị nô lệ được xác định trước với một số bit được nhà phát triển cung cấp. Điều này giúp kết nối cùng loại thiết bị với phần địa chỉ cứng khác nhau trên cùng một xe buýt.


1
Tất cả đều đúng, nhưng nó hút nếu bạn muốn nhiều hơn một, như đơn vị cường độ ánh sáng BH1750. Tôi muốn 4 người trong số họ và không muốn đối phó với chuyển đổi bus kép I2C .. Ngoài ra, một số thiết bị như DS3231 có pullups bên trong để bất kỳ pullups bên ngoài nào song song với chúng.
SDsolar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.