Рекомендации по подключению двух датчиков с соединениями SCL и SDA

У меня есть два разных датчика с соединениями SCL и SDA, которые я пытаюсь подключить к Arduino nano. Насколько я понимаю, подключение обоих этих датчиков к контактам A5 и A4 не имеет никакого смысла, учитывая, что мне нужно постоянно собирать данные с обоих датчиков. Более того, нет других контактов с такой же функциональностью, как A5 и A4. Я новичок в изучении микроконтроллеров, но мне кажется, что наилучшей практикой здесь будет использование двух Arduino nano. Это единственный способ или есть другой способ, о котором я не знаю?

, 👍0

Обсуждение

вы даже не можете непрерывно собирать данные с одного датчика... данные передаются последовательно... всегда есть задержка между показаниями, @jsotola

о каких датчиках вы говорите? ... какую пропускную способность вы ожидаете?, @jsotola

[I2C](https://en.wikipedia.org/wiki/I²C) — это шина, позволяющая подключать несколько датчиков (при условии, что они имеют разные адреса) к одной и той же шине с использованием двух проводов. Д, @hcheung

@jsotola У меня два разных датчика температуры. Под непрерывным я имел в виду, что мне нужно собирать данные каждые 10 мс., @nova

@hcheung, но не будут ли данные, которые я собираю, перемешанной версией данных, собранных разными датчиками?, @nova

Сначала прочитайте википедию I2C, чтобы понять, как работает I2C. В любой момент хост I2C (главный) общается с одним клиентом I2C (ведомым), то есть те датчики I2C, которые не были адресованы, не будут мешать обмену данными по шине. Лучший способ для вас, чтобы попробовать его в дополнение к чтению., @hcheung

@hcheung, не будет ли это означать, что я не могу получить одновременные данные с двух датчиков, или разница во времени не будет значительной? Кроме того, что вы подразумеваете под «использованием двух проводов»?, @nova

Определите «одновременный», если вы запускаете часы I2C на частоте 400 кГц, для отправки каждого бита требуется 1/400000 = 2,5 мкс (микросекунды). Чтение датчика температуры, вероятно, займет около 7,5 мкс, что более чем достаточно для считывания его каждые 10 миллисекунд., @hcheung

В вашем вопросе недостаточно подробностей для хорошего ответа. Пожалуйста, **отредактируйте вопрос** (не отвечайте в комментарии) и добавьте следующую информацию: **(1)** Каковы номера деталей двух датчиков? **(2)** Насколько они удалены от Arduino и друг от друга. **(3)** Как часто вы хотите собирать данные?, @Nick Gammon


1 ответ


1

Суть шины I2C заключается в том, чтобы обеспечить возможность подключения нескольких датчиков или устройств, если они имеют разные адреса I2C. Адреса обычно встроены в деталь, и часто в них предусмотрена возможность выбора адреса из диапазона.

Несмотря на то, что вы не можете одновременно собирать данные сразу с двух датчиков, вы, безусловно, можете запросить их в быстрой последовательности. Вам необходимо подключить SDA, SCL, заземление и +5 В к каждому датчику и Arduino.

Ваш код будет делать что-то вроде:

  • Датчик запросов по адресу 42
  • Датчик запросов по адресу 43
  • Что-то сделать с данными
  • Подождите немного, прежде чем делать это снова.

Общую информацию об I2C можно найти в Википедии, а также у меня есть страница об I2c, которая может вам помочь.

Обратите внимание, что вам также потребуется подтягивающий резистор как на SDA, так и на SCL (то есть два резистора), типичное значение будет 4,7 кОм (подсоедините резисторы 4,7 кОм между SDA/SCL и линией +5 В).

,