Сколько соединений может создать метод Arduino I2C?

Я только что изучал I2C между 2 Arduino, один в качестве отправителя, а другой в качестве получателя

Итак, мне любопытно узнать, сколько Arduino может быть подключено к последовательному соединению I2C?

Я имею в виду,

Arduino1 --> Arduino2

Тогда могу ли я подключить Arduino3 к Arduino 2, затем снова Arduino 4 на Arduino 3? До скольких Ардуино я могу продолжать это соединение?

, 👍2

Обсуждение

вы не можете подключить Arduino 3 к Arduino 2 как подчиненный к ведущему, потому что микроконтроллеры, которые вы отметили, имеют только один интерфейс I2C, а Arduino2 уже является подчиненным. но вы можете подключить множество подчиненных устройств к Arduino1, потому что I2C - это шина., @Juraj

@Juraj I2C позволяет использовать несколько мастеров. Хотя он редко используется и требует некоторой дополнительной работы для предотвращения столкновений., @Gerben

@Gerben это было бы действительно очень полезно, @Subha Jeet Sikdar

@Gerben, вопрос описывает цепочку, в которой 1 и 3 соединены только через 2. Я только пытаюсь понять разницу, @Juraj

@Gerben привет? У меня есть вопрос, может ли подчиненное устройство отправлять данные ведущему?, @Subha Jeet Sikdar

Не совсем. Мастер должен запросить данные. Некоторые устройства I2C имеют вывод прерывания, поэтому они могут "уведомлять" ведущего устройства о поступлении новых данных., @Gerben


2 ответа


Лучший ответ:

4

Ограничивающим фактором является емкость шины. Это предел общей емкости шины от всех подключенных к ней устройств плюс емкость используемых проводов.

На это также влияет значение подтягивающих резисторов.

Предел, согласно спецификациям, составляет 400 Пф. Arduino имеет входную емкость 10 Пф. Таким образом, игнорируя провода, это абсолютный предел в 40 Arduino, соединенных вместе.

Немного уменьшите это значение для проводов, так что, скажем, 30 - это разумная оценка. Затем снова уменьшите это значение, если вы используете внутренние подтягивания, которые примерно в 10 раз больше, чем должны быть. Это дает вам приблизительную оценку в 5-10 устройств.

Используйте правильные подтягивания вместо внутренних (почему, о, почему, о, почему Arduino когда-либо поощрял и даже делал по умолчанию такой глупый вариант ?!?!?!), Скажем, 1 коМ, и держите провода очень короткими, и вы, вероятно, будете в порядке до 20-25 устройств.

,

OP не понимает I2C и хочет подключить Arduino 3 к Arduino 2, а не к Arduino 1., @Juraj

@Juraj Только с одним интерфейсом I2C единственный способ - это использовать шину. Будь то 1-2, 1-3, 1-4 или 1-2, 2-3, 3-4, это все равно автобус. Отличается только расположение проводов. Я понимаю, что он имеет в виду подключение A4 / 5 на 1 к A4 / 5 на 2, затем A4 / 5 на 2 к A4 / 5 на 3 и т.д. Это всего лишь один автобус., @Majenko

с двумя интерфейсами MCU может быть ведущим и ведомым, @Juraj

@Juraj Действительно. Но у ООН есть только один, так что это наблюдение не имеет значения., @Majenko

Я должен подключить master arduinos scl и sda, используя те же провода для всех других подчиненных scl и sda?, @Subha Jeet Sikdar

@SubhaJeetSikdar Вы можете подключить его так, как вам нравится. Вы могли бы перейти с SDA / SCL на 1 на A4 / A5 на 2, затем с SDA / SCL на 2 на A4 / A5 на 3 и т. Д. A4 / A5 и SDA / SCL напрямую соединены друг с другом внутри печатной платы Arduino. Это то же самое, что соединить все A4 вместе и все A5 вместе, или соединить один A4 с другим A4 с другим A4 и т. Д., @Majenko

А добавление подтягивающего сопротивления означает, что для каждого подключения scl sda потребуется 2 резистора по 1 Ком?, @Subha Jeet Sikdar

Вам нужно ровно 2 резистора, один на SCL и один на SDA. Существует только один SCL и один SDA, независимо от того, как вы расположите провода., @Majenko

И последний вопрос, могу ли я вызвать Arduino 3 из master Arduino, когда Arduino 2 действует как подчиненный?, @Subha Jeet Sikdar

У вас будет один главный Arduino и несколько подчиненных Arduino. С каждым подчиненным устройством ведущий может связаться в любое время. Только хозяин может разговаривать с рабом, но он может разговаривать с любым рабом, которого выберет. У каждого подчиненного устройства должен быть уникальный адрес., @Majenko

Спасибо, вы развеяли все мои сомнения :), @Subha Jeet Sikdar

Алло? @Majenko может ли адрес быть строкой, отличной от целого числа?, @Subha Jeet Sikdar

Нет. Это должно быть число. Вот как работает i2c. Изучите протокол, прежде чем использовать его, @Majenko


1

Это число столько, сколько вы хотите. Существуют переключатели, которые позволяют выбирать различные шины, и каждая шина поддерживает свой полный комплект. С моей точки зрения, вы пытаетесь использовать решение до того, как полностью определили проблему. У меня такое чувство, что они не будут находиться на расстоянии нескольких дюймов друг от друга, поэтому рассмотрите альтернативу, предназначенную для такого типа использования. CAN, RS485 и другие интерфейсы будут работать намного лучше при гораздо меньших усилиях с вашей стороны.

,