Оглавление:
- Шаг 1. Требования к оборудованию
- Шаг 2. Рассматриваемые темы
- Шаг 3: Основы шины I2C
- Шаг 4: Модуль мультиплексора TCA9548A I2C
- Шаг 5:
- Шаг 6: Как Мастер отправляет и получает данные
- Шаг 7: Код
- Шаг 8: сканер I2C
- Шаг 9: Подключение и демонстрация
- Шаг 10: преимущества и недостатки
- Шаг 11: Спасибо
Видео: TCA9548A Модуль мультиплексора I2C - с Arduino и NodeMCU: 11 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Бывали ли вы когда-нибудь в ситуации, когда вам приходилось подключать два, три или более датчиков 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
Межинтегральная схема, произносимая 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, который позволяет управлять восемью отдельными устройствами 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 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
Рекомендуемые:
Камера видеонаблюдения с NodeMCU + Модуль камеры старого ноутбука (с использованием Blynk и без него): 5 шагов
Камера видеонаблюдения с модулем камеры старого ноутбука NodeMCU + (с использованием и без использования Blynk): Привет, ребята! В этом руководстве я покажу вам, как я использовал модуль камеры старого ноутбука и nodeMCU, чтобы сделать что-то похожее на CCTV
Учебное пособие: как Arduino управлять несколькими устройствами с одинаковым адресом с помощью мультиплексора TCA9548A I2C: 3 шага
Учебное пособие: Как Arduino управлять несколькими устройствами с одинаковыми адресами с помощью мультиплексора TCA9548A I2C: Описание: Модуль мультиплексора I2C TCA9548A предназначен для подключения устройств с одним и тем же адресом I2C (до 8 одинаковых адресов I2C), подключенных к одному микроконтроллеру. Мультиплексор действует как привратник, доставляя команды выбранному набору
Модуль ЖК-контроллера Uber I2C: 6 шагов
Модуль контроллера ЖК-дисплея Uber I2C: Преамбула В этом руководстве подробно рассказывается, как создать модуль контроллера на основе ЖК-дисплея HD44780 (рис. 1 выше). Модуль позволяет пользователю управлять всеми аспектами ЖК-дисплея программно через I2C, включая: ЖК-дисплей и дисплей, контрастность и яркость подсветки
1602 Экранный модуль ЖК-клавиатуры с рюкзаком I2C: 6 шагов
Модуль 1602 LCD Keypad Shield с I2C Backpack: В рамках более крупного проекта я хотел иметь ЖК-дисплей и клавиатуру для навигации по некоторым простым меню. Я буду использовать множество портов ввода / вывода на Arduino для других задач, поэтому мне нужен интерфейс I2C для ЖК-дисплея. Итак, я купил какое-то оборудование
ESP8266-NODEMCU WiFi-модуль №2 за 3 доллара - беспроводное управление контактами через веб-страницу: 9 шагов (с изображениями)
ESP8266-NODEMCU WiFi-модуль №2 за 3 доллара - беспроводное управление контактами через веб-страницу. Наступил новый мир этих микрокомпьютеров, и эта вещь - ESP8266 NODEMCU. Это первая часть, которая показывает, как вы можете установить среду esp8266 в вашу IDE Arduino через видео о начале работы и как части в