Оглавление:

TCA9548A Модуль мультиплексора I2C - с Arduino и NodeMCU: 11 шагов
TCA9548A Модуль мультиплексора I2C - с Arduino и NodeMCU: 11 шагов

Видео: TCA9548A Модуль мультиплексора I2C - с Arduino и NodeMCU: 11 шагов

Видео: TCA9548A Модуль мультиплексора I2C - с Arduino и NodeMCU: 11 шагов
Видео: Связь Arduino и Android через Bluetooth 2024, Июнь
Anonim
Image
Image

Бывали ли вы когда-нибудь в ситуации, когда вам приходилось подключать два, три или более датчиков I2C к Arduino, чтобы понять, что датчики имеют фиксированный или одинаковый адрес I2C. Более того, у вас не может быть двух устройств с одним и тем же адресом на одних и тех же выводах SDA / SCL!

Итак, какие у вас есть варианты? Поместите их все в мультиплексор TCA9548A 1-8 I2C, чтобы они все общались друг с другом на одной шине! TCA9548A Breakout обеспечивает связь с несколькими устройствами I2C, имеющими один и тот же адрес, что упрощает взаимодействие с ними.

Шаг 1. Требования к оборудованию

Темы охватывали
Темы охватывали

Для этого урока нам понадобятся:

- Макетная плата

- Мультиплексор TCA9548A I2C

- Arduino Uno / Nano, что угодно

- NodeMCU

- Несколько дисплеев 0.91 и 0.96 I2C OLED

- кабели-перемычки и

- USB-кабель для загрузки кода

Шаг 2. Рассматриваемые темы

Мы начнем наше обсуждение с понимания основ технологии I2C.

Затем мы узнаем о мультиплексоре TCA9548A и о том, как ведущее и ведомое устройства отправляют и получают данные с использованием технологии I2C. Затем мы проверим, как мы можем программировать и использовать мультиплексор в нашем проекте с использованием Arduino и NodeMCU. демонстрация с использованием 8 дисплеев I2C OLED и, наконец, мы закончим руководство, обсудив преимущества и недостатки мультиплексора TCA9548A.

Шаг 3: Основы шины I2C

Основы шины I2C
Основы шины I2C
Основы шины I2C
Основы шины I2C
Основы шины I2C
Основы шины I2C

Межинтегральная схема, произносимая I-squared-C (I²C) или I2C, представляет собой технологию двухпроводной шины (на самом деле 4-х проводную, потому что вам также нужны VCC и земля), которая используется для связи между несколькими процессорами и датчиками.

Два провода:

* SDA - последовательные данные (линия данных) и

* SCL - последовательные часы (линия часов)

Помните, что обе эти линии являются «синхронными», «двунаправленными», «с открытым стоком» и «подтянуты резисторами».

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

С помощью I2C вы можете подключить несколько подчиненных устройств к одному мастеру (например, SPI), или у вас может быть несколько мастеров, управляющих одним или несколькими подчиненными. И ведущие, и ведомые устройства могут передавать и получать данные. Итак, устройство на шине I2C может находиться в одном из следующих четырех состояний:

* Передача ведущего - ведущий узел отправляет данные ведомому * Прием ведущего - ведущий узел получает данные от ведомого

* Slave transfer - подчиненный узел отправляет данные мастеру

* Slave receive - подчиненный узел получает данные от мастера

I2C - это «протокол последовательной связи на короткие расстояния», поэтому данные передаются «побитно» по одиночному проводу или линии SDA. Вывод битов синхронизируется с выборкой битов тактовым сигналом, «совместно используемым» между ведущим и ведомым. Тактовый сигнал всегда контролируется мастером. Мастер генерирует часы и инициирует связь с подчиненными.

Итак, подведем итоги>

Количество используемых проводов: 2

Синхронный или асинхронный: синхронный

Последовательный или параллельный: последовательный

Сигнал часов, управляемый: Главный узел

Используемые напряжения: +5 В или +3,3 В

Максимальное количество Мастеров: Неограниченно

Максимальное количество подчиненных: 1008

Максимальная скорость: стандартный режим = 100 кбит / с

Быстрый режим = 400 кбит / с

Высокоскоростной режим = 3,4 Мбит / с

Сверхбыстрый режим = 5 Мбит / с

Шаг 4: Модуль мультиплексора TCA9548A I2C

TCA9548A Модуль мультиплексора I2C
TCA9548A Модуль мультиплексора I2C
TCA9548A Модуль мультиплексора I2C
TCA9548A Модуль мультиплексора I2C
TCA9548A Модуль мультиплексора I2C
TCA9548A Модуль мультиплексора I2C

TCA9548A - это восьмиканальный (двунаправленный) мультиплексор I2C, который позволяет управлять восемью отдельными устройствами I2C с одной шины I2C хоста. Вам просто нужно подключить датчики I2C к мультиплексированным шинам SCn / SDn. Например, если в приложении требуются восемь идентичных OLED-дисплеев, по одному из каждого дисплея можно подключить к каждому из этих каналов: 0–7.

Мультиплексор подключается к линиям VIN, GND, SDA и SCL микроконтроллера. Коммутационная плата принимает VIN от 1,65 до 5,5 В. Обе входные линии SDA и SCL подключены к VCC через подтягивающий резистор 10 кОм (размер подтягивающего резистора определяется величиной емкости на линиях I2C). Мультиплексор поддерживает как обычные (100 кГц), так и быстрые (400 кГц) протоколы I2C. Все контакты ввода / вывода TCA9548A допускают 5-вольтное напряжение и могут также использоваться для перевода напряжения с высокого на низкое или с низкого на высокое.

Рекомендуется установить подтягивающие резисторы на всех каналах TCA9548A, даже если напряжения одинаковы. Причина этого кроется во внутреннем переключателе NMOS. Он не очень хорошо передает высокое напряжение, с другой стороны, он очень хорошо передает низкие напряжения. TCA9548A также может использоваться для преобразования напряжения, что позволяет использовать разные напряжения на шине на каждой паре SCn / SDn, так что компоненты с напряжением 1,8, 2,5 или 3,3 В могут обмениваться данными с элементами с напряжением 5 В. Это достигается за счет использования внешних подтягивающих резисторов для повышения напряжения на шине до желаемого напряжения для ведущего и каждого ведомого каналов.

Если микроконтроллер обнаруживает конфликт шины или другую неправильную работу, TCA9548A может быть сброшен, установив низкий уровень на выводе RESET.

Шаг 5:

Изображение
Изображение
Изображение
Изображение
Изображение
Изображение

TCA9548 позволяет одному микроконтроллеру обмениваться данными с «64 датчиками», все с одинаковыми или разными адресами I2C, путем присвоения уникального канала каждой подчиненной под-шине датчика.

Когда мы говорим об отправке данных по 2 проводам на несколько устройств, нам нужен способ их адресации. Это то же самое, что почтальон, идущий по одной дороге и бросающий почтовые пакеты по разным домам, потому что на них написаны разные адреса.

У вас может быть максимум 8 из этих мультиплексоров, соединенных вместе по адресам 0x70-0x77 для управления 64 частями с одинаковыми адресами I2C. Подключив три адресных бита A0, A1 и A2 к VIN, вы можете получить различную комбинацию адресов. Так выглядит байт адреса TCA9548A. Первые 7 битов объединяются, чтобы сформировать адрес подчиненного устройства. Последний бит адреса ведомого определяет выполняемую операцию (чтение или запись). Когда он высокий (1), выбирается чтение, а низкий (0) выбирает операцию записи.

Шаг 6: Как Мастер отправляет и получает данные

Как Мастер отправляет и получает данные
Как Мастер отправляет и получает данные
Как Мастер отправляет и получает данные
Как Мастер отправляет и получает данные

Ниже приводится общая процедура доступа главного устройства к подчиненному устройству:

1. Если ведущий хочет отправить данные ведомому (ЗАПИСЫВАЕТ):

- Мастер-передатчик отправляет условие START, за которым следуют адреса подчиненного приемника и R / W, установленные на 0

- Мастер-передатчик отправляет данные в '8-битных регистрах управления' подчиненному-приемнику, когда подчиненное устройство подтверждает, что оно готово

- Мастер-передатчик завершает передачу с условием СТОП

2. Если ведущий хочет получать или читать данные от ведомого (ЧИТАЕТ):

- Мастер-получатель отправляет условие START, за которым следуют адреса подчиненного получателя и R / W, равные 1

- Мастер-приемник отправляет запрошенный регистр для чтения подчиненному передатчику

- Мастер-приемник получает данные от подчиненного-передатчика

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

- Мастер-получатель завершает передачу с условием STOP

Шина считается бездействующей, если на линиях SDA и SCL высокий уровень после состояния STOP.

Шаг 7: Код

Код
Код

Теперь код Int позволяет начать с включения библиотеки Wire и определения адреса мультиплексора.

#include "Wire.h"

#include "U8glib.h"

#define MUX_Address 0x70 // Адрес кодировщика TCA9548A

Затем нам нужно выбрать порт, с которым мы хотим связаться, и отправить данные по нему с помощью этой функции:

void selectI2CChannels (uint8_t i) {

если (i> 7) возврат;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Затем мы инициализируем отображение в разделе настройки, вызвав "u8g.begin ();" для каждого дисплея, подключенного к MUX "tcaselect (i);"

После инициализации мы можем делать все, что захотим, просто вызывая функцию «tcaselect (i);» где «i» - значение мультиплексированной шины с последующей отправкой данных и часов соответственно.

Шаг 8: сканер I2C

I2C сканер
I2C сканер

На всякий случай, если вы не уверены в адресе устройства вашего щита I2C, запустите прилагаемый код «I2C Scanner», чтобы найти шестнадцатеричный адрес вашего устройства. При загрузке в Arduino скетч просканирует сеть I2C, показывая отвечающие адреса.

Шаг 9: Подключение и демонстрация

Электромонтаж и демонстрация
Электромонтаж и демонстрация
Электромонтаж и демонстрация
Электромонтаж и демонстрация

Электропроводка:

Начнем с подключения мультиплексора к плате NodeMCU. Соединять:

VIN до 5 В (или 3,3 В)

GND на землю

SDA к D2 и

SCL к контактам D1 соответственно

Для платы Arduino подключите:

VIN до 5 В (или 3,3 В)

GND на землю

SDA в A4 и

SCL к контактам A5 соответственно

Как только MUX подключен к микроконтроллеру, вам просто нужно подключить датчики к парам SCn / SDn.

Теперь давайте посмотрим на эту быструю демонстрацию, в которой я подключил 8 OLED-дисплеев к мультиплексору TCA9548A. Поскольку эти дисплеи используют связь I2C, они взаимодействуют с Arduino, используя всего 2 контакта.

Шаг 10: преимущества и недостатки

Преимущества и недостатки
Преимущества и недостатки

ПРЕИМУЩЕСТВА

* Для связи требуется только две линии шины (провода)

* Между всеми компонентами существуют простые отношения ведущий / ведомый

* Нет строгих требований к скорости передачи данных, как, например, в случае RS232, мастер генерирует тактовую частоту шины

* Аппаратное обеспечение менее сложное, чем UART.

* Поддерживает несколько мастеров и несколько подчиненных

* Бит ACK / NACK подтверждает, что каждый кадр успешно передан

* I2C - это настоящая шина с несколькими мастерами, обеспечивающая арбитраж и обнаружение коллизий.

* Каждое устройство, подключенное к шине, имеет программную адресацию по уникальному адресу.

* Большинство устройств I2C могут обмениваться данными на частотах 100 или 400 кГц.

* I²C подходит для периферийных устройств, где простота и низкая стоимость производства важнее скорости

* Хорошо известный и широко используемый протокол

НЕДОСТАТКИ

* Более медленная скорость передачи данных, чем SPI

* Размер кадра данных ограничен 8 битами

* Более сложное оборудование, необходимое для реализации, чем технология SPI

Рекомендуемые: