Jak podłączyć wiele urządzeń interfejsu i2c do jednego styku A4 (SDA) i A5 (SCL) na Arduino?

31

Chcę dodać moduł zegara czasu rzeczywistego do mojego małego projektu. Chcę wyświetlać godzinę i datę na moim istniejącym module LCD i2c 2x16.

Zarówno moduł zegara czasu rzeczywistego z interfejsem i2c, jak i moduł LCD 2x16 wykorzystują ten sam pin A4 (SDA) i A5 (SCL) w Arduino Uno. Po wielu godzinach wyszukiwania w sieci magistrala i2c może w rzeczywistości zająć wiele urządzeń szeregowych. Jest to możliwe, ponieważ każde urządzenie ma swój unikalny adres.

Moje pytanie brzmi: jak fizycznie połączyć dwa urządzenia interfejsu i2c w jedno A4 i A5? Dzięki.

Banksia
źródło
3
Krótka odpowiedź: połącz je równolegle. Połącz SDA razem i połącz z A4, a SCL z A5. Potem oczywiście jest problem z podciąganiem, który czasem pomaga.
SDsolar

Odpowiedzi:

32

Niektórzy ludzie mają trudności z wizualizacją rzeczy połączonych ze sobą, więc oto zdjęcie:

(Sugestia podania)

schematyczny

symuluj ten obwód - Schemat utworzony za pomocą CircuitLab I2C jest magistralą, więc sygnały o podobnych nazwach są ze sobą połączone. Schemat adresowania pozwala mikrokontrolerowi wybrać urządzenie, z którym rozmawia. W Arduino 10k rezystory podciągające mają „VDD”, czyli piny 5 V lub 3,3 V.

gbarry
źródło
Cześć, to może być bardzo proste, ale jestem nowy w elektronice i trafiłem na tę stronę z wyszukiwarki Google, do czego odnosi się uC?
Ciasto piekarz
Uważam, że odnosi się to do dowolnego UC, ponieważ schemat połączeń powinien być taki sam, chyba że zaznaczono inaczej.
KingsInnerSoul
UC może być Arduino. SDA to pin A4, a SCL to pin A5.
SDsolar
9
@Ciastopiekarz, μC to skrót od „mikrokontroler”. Grecka litera μ jest skrótem dla mikro. Ponieważ μ wygląda jak u, wiele osób pisze po prostu „uC”.
foobarbecue
9

W przypadku I2C, jeśli wszystkie urządzenia podrzędne mają różne adresy urządzeń, wszystkie piny SDA powinny być połączone razem, a wszystkie piny SCL powinny być połączone razem. To takie proste.

Oczywiście należy również uwzględnić rezystory podciągające na obu liniach, zgodnie z wymaganiami dla I2C. Jak wybrać wartości rezystorów zostały omówione tutaj wcześniej .

The Photon
źródło
Przekonałem się, że dopóki jedno z urządzeń to DS3231 RTC, nie są wymagane żadne zewnętrzne podciągnięcia.
SDsolar
3
@ SDsolar, prawdopodobnie oznacza to, że DS3231 ma wewnętrzne podciągnięcia, więc używając tego urządzenia, zapewniasz podciągnięcia dla magistrali. Niekoniecznie jest to dobra rzecz, ponieważ ogranicza swobodę dostosowywania oporu podciągania w zależności od liczby urządzeń w magistrali.
Photon
Dokładnie moje myśli. Dodanie zewnętrznych podciągnięć byłoby równoległe z tym, co jest w DS3231, a więc może nie być wystarczające, aby I2C był szczęśliwy.
SDsolar
@ SDsolar, Co to ma wspólnego z pytaniem OP lub moją odpowiedzią? To nie jest ogólna strona dyskusji. Jeśli chcesz po prostu porozmawiać o różnych rzeczach, możesz dołączyć do naszego pokoju rozmów .
Photon
3

Podłącz dwa piny A4-sda do A5-scl (na obu płytkach uno-uno) i podłącz rezystor od 5v z każdej odpowiedniej linii sda-scl.

wprowadź opis zdjęcia tutaj

daedalucian
źródło
głosował za odrzuceniem, ponieważ odpowiedź nie odpowiada na pierwotne pytanie, a mianowicie „fizycznie połącz dwa urządzenia interfejsu i2c w jedno A4 i A5”.
Oleg Mazurov
Nie mogłem usunąć, więc
zmieniam
Dzielenie napięcia nie jest wymagane, prawda?
clankill3r
0

I2C to protokół przesyłania danych opracowany przez firmę Philips. Znany również jako interfejs dwuprzewodowy, ponieważ wykorzystuje dwa przewody do komunikacji. Linia zegara szeregowego SCL. Linia danych szeregowych SDL. Musisz więc podłączyć odpowiednie styki urządzeń i2c, czy to eeprom, czy lcd do styków SCL i SDL mikrokontrolera, którego używasz z rezystorem podciągającym do VDD. Ponieważ jest to protokół adresowy mający 7-bitowy adres dla każdego podłączonego urządzenia, można adresować do 2 ^ 7 różnych urządzeń. Ale zwykle adres I2C urządzenia podrzędnego jest wstępnie zdefiniowany z pewnymi bitami, które programista powinien podłączyć na stałe. Pomaga to w podłączeniu tego samego typu urządzeń z inną częścią adresu przewodowego na tej samej magistrali.

Antony Tom Mathews
źródło
1
Wszystko prawda, ale jest do bani, jeśli chcesz więcej niż jednego, takiego jak jednostka natężenia światła BH1750. Chcę 4 z nich i nie chcę zajmować się przełączaniem podwójnej magistrali I2C. Ponadto niektóre urządzenia, takie jak DS3231, mają wewnętrzne podciągnięcia, więc wszelkie zewnętrzne podciągnięcia są równoległe z nimi.
SDsolar
0

Powinieneś również sprawdzić rezystory podciągające. Jeśli używasz już wykonanych płyt, nie tylko układu, płyty te zwykle mają rezystory podciągające na płycie między magistralą a vcc. Kiedy więc połączysz wszystko równolegle, rezystory również są równoległe, więc całkowita wartość rezystora spadnie, a komunikacja może się nie powieść.

Petre O.
źródło