Tca9548a arduino подключение

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

Как подключить к Arduino несколько устройств I2C с одним адресом с помощью TCA9548

Протокол связи I2C хорош тем, что для подключения микроконтроллера к одному, двум или нескольким датчикам требуется всего два провода. Но это работает только в том случае, если у каждого датчика есть собственный адрес I2C. Предположим, вы хотите подключить четыре (или более) датчика с одним фиксированным адресом. Один из способов – использовать вместо этого протокол SPI.

Но не каждый датчик или коммутационная плата позволяет использовать протокол SPI. Так что можно сделать? Просто используйте мультиплексор I2C, вроде микросхемы TCA9548A от Texas Instruments. Это устройство доступно в качестве коммутационной платы для облегчения процесса подключения.

Итак, у этого компонента 8 каналов, это означает, что мы можем подключить до 8 датчиков к шине I2C. Хотя, на самом деле гораздо большею Давайте подробнее рассмотрим это устройство и способы его использования.

Этот мультиплексор TCA9548A вы можете подключать его к своему Arduino, как и любое другое устройство I2C. Вот его линии для подключения к Arduino:

Остальные 16 контактов подключены к 8 каналам мультиплексора. Таким образом, контакты SD0 и SC0 соответствуют линии данных (SDA) и линии синхронизации (SCL) от первой шины I2C, контакты SD1 и SC1 соответствуют линиям от второй шины I2C и т. д.

Каждая шина I2C мультиплексора независима друг от друга, и, как и шина I2C от вашего Arduino, вы можете подключить несколько устройств с разными адресами I2C к каждой шине мультиплексора.

В этом простом руководстве вы увидите, как подключить и запрограммировать мультиплексор на четыре датчика BME280, у которых один и тот же адрес I2C (0x77). Мы хотим подключить четыре платы, приведенные на следующем изображении, к Arduino Uno по протоколу I2C.

Давайте сначала соединим их друг с другом. Сначала соедините все контакты GND всех плат друг с другом (синие провода). Поскольку все платы работают от 5 В или 3,3 В, мы можем использовать любой из этих уровней для питания всех плат. Итак, давайте подключим 5V ко всем платам красными проводами.

Теперь подключим первый датчик к первой шине I2C от мультиплексора. Для этого подключите вывод SDI датчика к SD0 мультиплексора. Теперь подключите SCK от датчика к SC0 от мультиплексора.

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

Наконец, подключите линии данных и часов от Arduino Uno к мультиплексору. В этом случае вывод A4 от Arduino идет на вывод SDA мультиплексора, а вывод A5 от Arduino подключается к выводу SCL мультиплексора. Как упоминалось ранее, мы используем 5 В для питания всех плат. Таким образом, вывод 5V от Arduino идет на вывод VIN мультиплексора, а также выводы VCC от каждой платы (красные провода). И конечно, соедините все контакты GND друг с другом (синие провода).

Датчики и мультиплексор теперь успешно подключены друг к другу и к Arduino Uno, поэтому теперь приступим к программированию. Мультиплексор TCA9548A не требует какой-либо библиотеки, а датчик BME280 требует. Если вы этого еще не сделали, скачайте библиотеку сейчас по этой ссылке. Если вы хотите подключить мультиплексор к другому датчику, просто пропустите этот шаг. Далее приведен код программы Arduino для взаимодействия с TCA9548 и получения данных от датчиков BME280.

Теперь загрузите код и откройте последовательный монитор на скорости 9600 бод, чтобы получить температуру, влажность и давление от всех четырех датчиков.

Источник

Tca9548a arduino подключение

Допустим, вам нужно подключить к одной шине I2C несколько устройств с одинаковым адресом. Это могут быть термометры, датчики газа, АЦП и прочие однотипные устройства без возможности смены адреса. В таком случае вам пригодится микросхема TCA9548А.

TCA9548A представляет собой двунаправленный мультиплексор 1-в-8, который управляется регистром состояния. Расширитель имеет три входа выбора собственного адреса, которые позволяют задать адрес микросхемы в диапазоне 0x70…0x77.

Это значит, что мы можем подключить на одну шину I2C восемь расширителей, к каждому из которых подключено по восемь устройств, итого 8×8=64 устройства с одинаковым адресом. Более того, мы ведь можем подключить к портам не одиночные устройства, а группы устройств. Например, группа может состоять из различных датчиков лабораторной установки. Допустим, вы подключили несколько одинаковых установок к портам TCA9548A. Несмотря на то, что в этих установках одинаковые наборы датчиков, установки не мешают друг другу, потому что подключены к разным портам, и в каждый момент времени микроконтроллер общается только с одной установкой.

Принцип работы расширителя:

  1. Микроконтроллер обращается по адресу расширителя и записывает в регистр конфигурации расширителя номер активного порта. Номер активного порта определяется единицей в соответствующем разряде регистра. Можно сделать активными несколько портов одновременно.
  2. Далее микроконтроллер обращается по адресу периферийного устройства, а физическое соединение происходит только с устройством, которое подключено к активному порту.
  3. Поочередно записывая в регистр состояния номера портов, можно опрашивать периферийные устройства с одинаковыми адресами.

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

Если адрес какого-либо периферийного устройства совпадает с адресом расширителя, не забудьте при помощи перемычек на плате изменить адрес расширителя.

Согласование логических уровней

Расширитель шины может работать как преобразователь логических уровней независимо по каждому каналу. К выводам SCL/SDA и выводам портов мультиплексора должны быть подключены подтягивающие резисторы. Например, общие выводы SCL/SDA можно подтягивать к линии питания +5 вольт, а выводы портов SC0/SD0…SC7/SD7 подтягивать к линии питания +3,3 вольт. Это удобно, если вы подключаете трехвольтовые периферийные модули к пятивольтовой плате Arduino. Причем не обязательно, чтобы рабочее напряжение всех портов расширителя было одинаковое.

Вход RESET

Вход RESET предназначен в основном для сброса расширителя в случае аварийной ситуации или “горячей” перезагрузки устройства. Подача низкого логического уровня на вход RESET приводит к обнулению регистра конфигурации (все порты отключены). В таком же состоянии по умолчанию регистр находится после подачи питания.

Источник

I2C мультиплексор TCA9548A Arduino

На днях возникла потребность подключить несколько датчиков угла поворота AS5600 к микроконтроллеру. У данных датчиков два интерфейса: аналоговый и I2C. При аналоговом подключении проблем со съемом данных нет, кроме помех, а вот при подключении по I2C интерфейсу возник вопрос! AS5600 имеют одинаковый адрес и изменить его невозможно, как осуществить подключение 4-х подобных датчиков? Немного разобравшись в вопросе, нашли решение: микросхема TCA9548A.

TCA9548A это переключатель I2C интерфейсов. На выходных линиях могут располагаться устройства с одинаковыми адресами, а их переключение производится управляющими командами по адресу самой микросхемы TCA9548A. Адрес TCA9548A для I2C интерфейса выбирается подачей на адресные контакты A0-A2 опрелеленных уровней: 000, это шестнадцатеричный адрес 0x70; 111 — 0х77. Если мы используем распаянную на плате микросхему как показано на рисунке ниже, то адресные контакты уже подтянуты к земле через резисторы и их можно не подключать, адрес устройства при этом будет 0х70.

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

Теперь технически можно подключить до 8 I2C устройств с одинаковыми адресами. Для примера подключим два гироприбора MPU6050 к ESP32 .

А теперь опишем этапы программной обработки данного решения.

Следующая программа опрашивает два гироприбора MPU6050, которые подключены согласно схемы изображенной выше. Перед обращением к гироприбору следует вызвать функцию void tcaselect ( uint8_t i ) , которая задает адрес подключения I2C устройства к TCA9548A. TCA9548A производит перекоммутацию, а дальше можно производить обмен, с прибором согласно его описанию.

Источник

Adafruit TCA9548A 1-to-8 I2C Multiplexer Breakout

Wiring & Test

New Subscription

Please sign in to subscribe to this guide.

You will be redirected back to this guide once you sign in, and can then subscribe to this guide.

The TCA9548A multiplexer is interesting in that it has an I2C address (0x70 by default) — and you basically send it a command to tell it which I2C multiplexed output you want to talk to, then you can address the board you want to address.

We suggest using this little helper to help you select the port

You can then call tcaselect(0) thru tcaselect(7) to set up the multiplexer.

Note that you if you happen to have I2C devices with I2C address 0x70, you will need to short one of the Addr pins on the TCA9548 breakout to Vin in order to make it not conflict. Given that you can have 0x70 thru 0x77, just find one that’s free and you’re good to go!

For example, say we want to talk to two HMC5883 breakouts. These magnetometers have a fixed address of 0x1E so you cannot have two on one I2C bus. Wire up the TCA9548 breakout so that:

  • Vin is connected to 5V (on a 3V logic Arduino/microcontroller, use 3.3V)
  • GND to ground
  • SCL to I2C clock
  • SDA to I2C data

Then wire up each of the other sensor breakouts to Vin, Ground and use one of the SCn / SDn multiplexed buses:

On an Arduino, which is what we’re using, we suggest running this handy scanner script which will tell you what the breakout detected

For example, running it on the above setup will give you:

Next up you will have to adjust whatever code you have to select the correct multiplexed port!

Make sure before you query from the sensor that you call tcaselect to get the right one

However, once you add all the tcaselect()‘s you will be able to talk to both sensors!

Since the TCA9548 is addressible, you can have more than one multiplexer on the bus. With 8 possible adresses, that means you can control as many as 64 separate i2c buses.

To avoid conflict between devices with the same address on different multiplexers, you can disable all channels on a multiplexer with the following code:

This guide was first published on Sep 11, 2015. It was last updated on Sep 11, 2015.

This page (Wiring & Test) was last updated on Oct 04, 2022.

Источник

Использование мультиплексора TCA9548A 1-to-8 I2C с Ардуино

Иногда вам может понадобиться использовать с Ардуино более одного устройства с одним и тем же адресом I2C шины. Например, четыре OLED-дисплея для большого дисплея или семь датчиков температуры в инкубаторе.

Проблемы такого типа можно решить с помощью мультиплексора TCA9548A 1-to-8, и в этой статье мы рассмотрим, как это сделать с некоторыми примерами.

Приступая к работе

Во-первых, рассмотрим сам мультиплексор TCA9548A. TCA9548A — это шлюз между вашим Ардуино и восемью отдельными I2C шинами.

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

TCA9548 может функционировать при напряжении от 1,8 до 5 В и работать с устройствами, которые имеют рабочее напряжение от 1,8 до 5 В. Это очень удобно, так как, например,вы можете использовать устройства с питанием 3,3В с 5 вольтовой Ардуино. Итак, приступим.

Вставьте модуль в макетную плату и подключите его, как показано ниже:

Мы используем красные и синие линии питания макетной платы как 5В и GND соответственно. Подключим 5В и GND от Ардуино к линии питания макетной платы. Выводы A0, A1 и A2 подключим к GND, а A4/A5 к SDA/SCL соответственно к модулю:

Электрические соединения следующие (модуль TCA9548 — Ардуино):

  • Vin к 5В
  • GND к GND
  • A0 к GND
  • A1 к GND
  • A2 к GND
  • SDA к A4
  • SCL к A5

Далее мы рассмотрим адрес I2C шины для TCA9548A. Используя схему подключения, показанную выше, адрес I2C шины будет 0x70. Вам нужно изменить его только в том случае, если одно из ваших устройств также имеет адрес 0x70.

Изменение адреса I2C TCA9548A

Адрес I2C шины TCA9548A путем подключения контактов A0, A1 и A2 модуля TCA9548A. По умолчанию мы используем адрес 0x70, подключив A0…A2 к GND (низкий уровень сигнала). Используя ниже приведенную таблицу, вы можете изменить конфигурацию, выбрав необходимый адрес из диапазона 0x70…0x77:

Тестирование

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

Скопируйте и вставьте этот скетч в Ардуино IDE и загрузите его:

Затем откройте монитор последовательного порта и установите скорость передачи данных 115200. Вы должны увидеть что-то вроде этого:

Как видите, наш сканер вернул адрес 0x70, что соответствует схеме подключения, описанной в таблице адресов шины, упомянутой ранее. Если вы не добились успеха, отключите Ардуино от компьютера и хорошенько проверьте проводку — затем попробуйте еще раз.

Управление селектором шины

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

Для этого мы отправляем байт данных в регистр шины TCA9548A, который указывает, какую из восьми шин мы хотим использовать. Каждый бит байта используется для включения или выключения определенной шины, причем MSB (старший значащий бит) — для шины 7 и LSB (младший значащий бит) — для шины 0.

Например, если вы отправили:

0b00000001 (в двоичном формате) — это активирует нулевую шину.

0b00010000 (в двоичном формате) — это активирует пятую шину.

Как только вы выбрали определенную шину, TCA9548A перенаправляет все данные из I2C Ардуино в эту шину.

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

Чтобы облегчить себе жизнь, мы можем написать небольшую функцию для легкого выбора необходимой шины:

Эта функция принимает номер шины и помещает «1» в регистр шины TCA9548A в соответствии с нашими требованиями. Затем вы просто вызываете эту функцию прямо перед тем, как потребуется получить доступ к устройству на определенной шине I2C. Например:

устройство на шине 0: TCA9548A (0)

устройство на шине 6: TCA9548A (6)

Краткое замечание о подтягивающих резисторах

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

В противном случае проверьте datasheet своих устройств, чтобы определить подходящее сопротивление подтягивающих резисторов. Если такая информация недоступна, попробуйте использовать резисторы сопротивлением 10 кОм.

Управляем нашим первым устройством

В качестве примера используем крошечный OLED-дисплей с диагональю 0,49 дюйма. Он имеет четыре контакта, которые необходимо подключить следующим образом (OLED — TCA9548A/Ардуино):

  • GND к GND
  • Vcc к Ардуино 3,3 В
  • CL к TCA9548A SC0 (шина № 0)
  • DA к TCA9548A SD0 (шина № 0)

OLED работает от 3,3В, поэтому мы запитываем его напрямую от вывода 3,3В Ардуино.

Теперь скопируйте и загрузите нижеприведенный скетч в Ардуино, и через мгновение на OLED-дисплее отобразятся некоторые числа, отсчитывающиеся в обратном порядке:

Как это работает? Мы вставили функцию выбора шины в строку 9 скетча, а затем вызвали функцию в строке 26, чтобы сообщить TCA9548A, что мы хотим использовать нулевую I2C шину. Затем остальная часть скетча – обычное использование OLED дисплея.

Управление двумя устройствами

Добавим еще одно устройство — модуль датчика атмосферного давления BMP180. Мы подключим его к седьмой I2C шине TCA5948A. В данном случае к предыдущей схеме нужно добавить еще два соединения, а именно (BMP180 — TCA9548A/Ардуино):

  • CL к TCA9548A SC7 (шина № 7)
  • DA к TCA9548A SD7 (шина № 7)

Теперь скопируйте и загрузите нижеприведенный скетч в Ардуино, и через мгновение на OLED дисплее появиться температура окружающей среды в целых градусах Цельсия:

Как это работает? Мы как обычно настраиваем библиотеки и необходимый код для OLED, BMP180 и TCA5948A.

Нам нужно инициализировать BMP180. Для этого сначала в строке 29 мы выбираем I2C шину №7 перед запуском BMP180.

В строке 40 мы снова запрашиваем I2C шину №7 у TCA9548A, а затем считываем температуру от BMP180. В строке 44 мы запрашиваем I2C шину №0 у TCA9548A, а затем отображаем температуру на OLED. Затем все повторяется снова.

Краткое примечание о контакте сброса

Более продвинутые пользователи будут рады узнать, что они могут сбросить статус TCA9548A, чтобы восстановиться работу после сбоя шины. Для этого просто подайте на контакт RESET низкий логический уровень.

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

Источник

Adblock
detector