Подключение мультиплексора ардуино

Использование мультиплексора 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 через одну шину вашего Ардуино.

Источник

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 производит перекоммутацию, а дальше можно производить обмен, с прибором согласно его описанию.

Источник

Про Ардуино и не только

среда, 3 января 2018 г.

Аналоговый мультиплексор/демультиплексор CD4051 — увеличиваем количество аналоговых выводов Ардуино

Мультиплексором называется устройство, которое позволяет передавать сигнал с одного из нескольких входов на единственный выход. Демультиплексор, напротив, передает сигнал с единственного входа на один из информационных выходов. CD4051 совмещает в себе эти две функции, являясь по сути аналоговым коммутатором, принцип ее работы показан на следующей схеме:

Функциональная схема CD4051

Вывод COM подключается к аналоговому выводу микроконтроллера. Значения на цифровых входах A, B, C определяют какой из каналов будет соединен с выводом COM. Соединение возможно только при наличии разрешающего сигнала (низкого уровня) на входе INH.

Технические характеристики микросхемы CD4051 вы можете найти в Даташите.

Теперь о применении микросхемы. С ее помощью можно, например, управлять 8 светодиодами или считывать значения 8 потенциометров. Можно увеличить количество пьезоизлучателей, подключаемых к Ардуино для создания MIDI барабанной установки. Я для примера покажу, как можно подключить 8 фоторезисторов к Ардуино.

Схема подключения 8 фоторезисторов к Ардуино с использованием аналогового коммутатора CD4051

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

Источник

Using a multiplexer with Arduino

The multiplexer is an integrated circuit made up of logic circuits allowing several signals to be concentrated on the same output (mutiplexing or mux) or to connect an input to one of its N outputs (demultiplexing or demux). In this tutorial, we will see the use of the CD4051 integrated circuit which can be used as a multiplexer and demultiplexer from one to eight channels. It can be used to drive LEDs or to retrieve the state of several sensors.

Hardware

  • Computer
  • Arduino UNO
  • USB cable A Male to B Male
  • Multiplexer

Principle of operation

The multiplexer/demultiplexer is an electronic component containing a logic circuit allowing selection from 8 channels. If the miltiplexer is activated, the common (IN/OUT) is connected directly to the selected channel.

Schematics

The multiplexer requires 3 output pins from a microcontroller. Plus one channel to activate or deactivate the integrated circuit. It is possible to connect this signal to ground if the multiplexer is always connected to one channel.

  • VSS integrated circuit ground
  • Vcc power supply pin. Usually connected to 5V
  • A,B,C Channel selection signals
  • CH0-CH7 multiplexing channels
  • COM Common input/output. Common input/output. Pin to which the multiplexed signal or the signal to be demultiplexed arrives.
  • INH Inhibit, active LOW. Integrated circuit activation pin.

To further increase the number of inputs/outputs, it is possible to connect another multiplexer in parallel (several arrangements are possible).

To select a channel on the multiplexer, we need to activate the integrated circuit by setting the INH pin to LOW, and setting the channels A,B and C to the values descripbed in the logic table.

Results

It is possible with this simple component to increase the number of I/O of a microcontroller. Other circuit and code can be imagined to develop your own functionalities. Keep in mind that you can only select one channel at a time. This being said, make sure that this component correspond to your need

Applications

  • Manage 8 LEDS using only 3 pins from the microcontroller

Sources

Find other examples and tutorials in our Automatic code generator
Code Architect

How useful was this post?

Click on a star to rate it!

Average rating 4.2 / 5. Vote count: 14

No votes so far! Be the first to rate this post.

As you found this post useful.

Follow us on social media!

We are sorry that this post was not useful for you!

Источник

Adblock
detector