Как подключить несколько устройств с интерфейсом i2c к одному контакту A4 (SDA) и A5 (SCL) на Arduino?


32

Я хочу добавить модуль часов реального времени в мой маленький проект. Я хочу отображать время и дату на моем существующем ЖК-модуле i2c 2x16.

Модуль часов реального времени с интерфейсом i2c и ЖК-модуль 2x16 используют один и тот же вывод A4 (SDA) и A5 (SCL) на Arduino Uno. После нескольких часов поиска в сети шина i2c может фактически занять много последовательных устройств. Это возможно, потому что каждое устройство имеет свой уникальный адрес.

У меня вопрос, как физически подключить два устройства с интерфейсом i2c к одному A4 и A5? Спасибо.


3
Краткий ответ: соедините их параллельно. Свяжите SDA вместе и подключите к A4, а SCL к A5. Тогда, конечно, есть проблема подтягивания, которая иногда помогает.
SDsolar

Ответы:


32

Некоторым людям трудно визуализировать вещи, связанные вместе, поэтому вот картинка:

(Предложение по подаче)

схематический

смоделируйте эту схему - Схема, созданная с использованием CircuitLab I2C, представляет собой шину, поэтому одноименные сигналы соединяются вместе. Схема адресации позволяет микроконтроллеру выбирать, с каким устройством он разговаривает. На Arduino подтягивающие резисторы 10 кОм переходят в «VDD», то есть 5В или 3,3В выводы.


Привет, это может быть очень простой, но я новичок в электронике и получил эту страницу из поиска Google, что uC относится?
Ciasto piekarz

Я полагаю, что ссылка относится к любому ОК, поскольку схема подключения должна быть такой же, если не указано иное.
KingsInnerSoul

ОК может быть Arduino. SDA - это вывод A4, а SCL - это вывод A5.
SDsolar

9
@Ciastopiekarz, µC - это сокращение от «микроконтроллер». Греческая буква μ - это сокращение от микро. Поскольку μ выглядит как ты, многие люди просто пишут "uC".
Барбекю

9

Для I2C, если все подчиненные устройства имеют разные адреса устройств, все контакты SDA должны быть соединены вместе, и все контакты SCL должны быть соединены вместе. Это так просто.

Естественно, вы должны также включить подтягивающие резисторы на обеих линиях, как требуется для I2C. Как выбрать значения резистора, обсуждалось здесь ранее .


Я обнаружил, что, если одним из устройств является DS3231 RTC, то никаких внешних подтягиваний не требуется.
SDsolar

3
@Sdsolar, это, вероятно, означает, что DS3231 имеет внутренние подтягивания, поэтому, используя это устройство, вы обеспечиваете подтягивания для шины. Это не обязательно хорошая вещь, потому что это ограничивает вашу свободу настройки сопротивления подтягиванию в зависимости от количества устройств в шине.
Фотон

Мои мысли точно. Добавление внешних подтягиваний будет происходить параллельно с тем, что есть в DS3231, и поэтому может оказаться недостаточным для I2C, чтобы быть счастливым.
SDsolar

@ SDolar, Какое это имеет отношение к вопросу ОП или моему ответу? Это не сайт общего обсуждения. Если вы хотите просто поговорить о чем-то, вы можете присоединиться к нашей комнате чата .
Фотон

3

Подключите два контакта A4-sda к A5-scl (на обеих платах uno-uno) и подключите резистор от 5 В от каждой соответствующей линии sda-scl.

введите описание изображения здесь


отказался, потому что ответ не отвечает на первоначальный вопрос, а именно «физически соединить два устройства с интерфейсом i2c в один А4 и А5».
Олег Мазуров

Я не мог удалить, поэтому я отредактировал (возможно) более удовлетворительный ответ
daedalucian

Разделение напряжения не требуется, верно?
clankill3r

0

I2C - это протокол передачи данных, разработанный Philips. Также известен как двухпроводной интерфейс, поскольку он использует два провода для связи. SCL-Serial Clock Line. SDL-Serial Data Line. Поэтому вам необходимо подключить соответствующие контакты устройств i2c, будь то eeprom или lcd, к контактам SCL и SDL микроконтроллера, который вы используете с нагрузочным резистором, к VDD. Поскольку это протокол адресов, имеющий 7-битный адрес для каждого подключенного устройства, вы можете адресовать до 2 ^ 7 различных устройств. Но обычно адрес I2C подчиненного устройства предопределен с некоторыми битами, которые должны быть встроены разработчиком. Это помогает при подключении к одной шине устройств одного типа с разной проводной адресной частью.


1
Все верно, но это отстой, если вы хотите более одного, как, например, блок освещения BH1750. Я хочу 4 из них и не хочу иметь дело с переключением двух шин I2C. Кроме того, некоторые устройства, такие как DS3231, имеют внутренние подтяжки, поэтому любые внешние подтяжки параллельны с ними.
SDsolar

0

Также вы должны проверить подтягивающие резисторы. Если вы используете уже изготовленные платы, а не только микросхему, на этих платах обычно есть подтягивающие резисторы между шинами и vcc. Таким образом, когда вы подключаете все параллельно, резисторы также параллельны, поэтому общее значение резистора падает, и ваша связь может перестать работать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.