Съдържание:
- Стъпка 1: Хардуерни изисквания
- Стъпка 2: Покрити теми
- Стъпка 3: Основи на I2C Bus
- Стъпка 4: TCA9548A I2C мултиплексен модул
- Стъпка 5:
- Стъпка 6: Как капитанът изпраща и получава данни
- Стъпка 7: Код
- Стъпка 8: I2C скенер
- Стъпка 9: Окабеляване и демонстрация
- Стъпка 10: Предимства и недостатъци
- Стъпка 11: Благодаря
Видео: TCA9548A I2C мултиплексен модул - с Arduino и NodeMCU: 11 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Изпадали ли сте в ситуация, в която трябва да свържете два, три или повече 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. демонстрация с помощта на 8 I2C OLED дисплея и накрая ще завършим урока, като обсъдим предимствата и недостатъците на мултиплексора TCA9548A
Стъпка 3: Основи на I2C Bus
Междуинтегрирана схема, изразена I-квадрат-C (I²C) или I2C е технология с две жични шини (добре 4 проводника, защото също се нуждаете от VCC и заземяване), която се използва за комуникация между множество процесори и сензори.
Двата проводника са:
* SDA - Серийни данни (ред данни) и
* SCL - Сериен часовник (часовник)
Не забравяйте, че и двете линии са „синхронни“„двупосочни“„отворен дренаж“и са „изтеглени с резистори“.
Технологията на шината I2C първоначално е проектирана от Philips Semiconductors в началото на 80 -те години, за да позволи лесна комуникация между компоненти, които се намират на една и съща платка.
С I2C можете да свържете множество подчинени устройства към един главен (като SPI) или можете да имате няколко главни устройства, контролиращи единични или множество подчинени устройства. И господарите, и подчинените могат да предават и получават данни. Така че, устройство на I2C шина може да бъде в едно от тези четири състояния:
* Главно предаване - главният възел изпраща данни към подчинено устройство* Главно приемане - главен възел получава данни от подчинено устройство
* Подчинено предаване - подчиненият възел изпраща данни към главния
* Получаване на подчинено устройство - подчиненият възел получава данни от главния
I2C е "протокол за серийна комуникация" на къси разстояния, така че данните се прехвърлят "бит по бит" по един проводник или SDA линия. Изходът на битове се синхронизира с извадката на битове чрез тактов сигнал, „споделен“между главния и подчинения. Сигналът на часовника винаги се контролира от капитана. Капитанът генерира часовника и инициира комуникация с подчинени.
И така, да обобщим>
Брой използвани проводници: 2
Синхронен или асинхронен: Синхронен
Сериен или паралелен: Сериен
Сигнал на часовника, контролиран от: Главен възел
Използвани напрежения: +5 V или +3.3 V
Максимален брой магистри: Неограничен
Максимален брой подчинени: 1008
Максимална скорост: Стандартен режим = 100kbps
Бърз режим = 400kbps
Високоскоростен режим = 3,4 Mbps
Ултра бърз режим = 5 Mbps
Стъпка 4: TCA9548A I2C мултиплексен модул
TCA9548A е осемканален (двупосочен) I2C мултиплексор, който позволява осем отделни I2C устройства да се управляват от една хост I2C шина. Просто трябва да свържете I2C сензорите към мултиплексираните шини SCn / SDn. Например, ако в приложение са необходими осем идентични OLED дисплея, един от всеки дисплей може да бъде свързан към всеки от тези канали: 0-7.
Мултиплексорът се свързва към VIN, GND, SDA и SCL линии на микроконтролера. Пробивната платка приема VIN от 1.65v до 5.5v. И двете входни SDA и SCL линии са свързани към VCC чрез 10K издърпващ резистор (Размерът на издърпващия резистор се определя от размера на капацитета на I2C линиите). Мултиплексорът поддържа както нормални (100 kHz), така и бързи (400 kHz) I2C протоколи. Всички I/O щифтове на TCA9548A са 5-волтови и могат да се използват и за превод от високо към ниско или ниско до високо напрежение.
Добра идея е да поставите издърпващи резистори на всички канали на TCA9548A, дори ако напреженията са еднакви. Причината за това е вътрешният NMOS ключ. Той не предава високо напрежение, от друга страна предава много добре ниско напрежение. TCA9548A може също да се използва за пренапрежение на напрежение, което позволява използването на различни напрежения на шината за всяка двойка SCn/SDn, така че 1,8-V, 2,5-V или 3,3-V части да могат да комуникират с 5-V части. Това се постига чрез използване на външни издърпващи се резистори за издърпване на шината до желаното напрежение за главния и всеки подчинен канал.
Ако микроконтролерът открие конфликт в шината или друга неправилна работа, 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
-Главният приемник изпраща искания регистър за четене на подчинения предавател
-Главният приемник получава данни от подчинения предавател
- След като всички байтове са получени, Master изпраща NACK сигнализация към подчиненото устройство, за да спре комуникацията и да освободи шината
- Главният приемник прекратява прехвърлянето със състояние СТОП
Автобусът се счита за празен, ако и SDA, и SCL линиите са високи след условие STOP.
Стъпка 7: Код
Сега Int кодът позволява да започнем, като включим библиотеката "Wire" и като дефинираме адреса на мултиплексорите.
#include "Wire.h"
#включва "U8glib.h"
#define MUX_Address 0x70 // TCA9548A Адрес на енкодерите
След това трябва да изберем порта, към който искаме да комуникираме, и да изпратим данните на него с помощта на тази функция:
void selectI2CChannels (uint8_t i) {
if (i> 7) връщане;
Wire.beginTransmission (MUX_Address);
Wire.write (1 << i);
Wire.endTransmission ();
}
След това ще инициализираме дисплея в секцията за настройка, като извикаме „u8g.begin ();“за всеки дисплей, прикрепен към MUX "tcaselect (i);"
След като се инициализираме, можем да правим каквото си искаме, само като извикаме функцията "tcaselect (i);" където "i" е стойността на мултиплексираната шина и след това изпраща данните и часовника съответно.
Стъпка 8: I2C скенер
За всеки случай, ако не сте сигурни за адреса на устройството на вашия I2C щит, стартирайте прикачения код „I2C скенер“, за да намерите шестнадесетичния адрес на вашето устройство. Когато се зареди в Arduino, скицата ще сканира мрежата I2C, показвайки адресите, които отговарят.
Стъпка 9: Окабеляване и демонстрация
Електрически инсталации:
Нека започнем, като свържем мултиплексора към платка NodeMCU. Свързване:
VIN до 5V (или 3.3V)
GND към земята
SDA към D2 и
SCL към D1 щифтове съответно
За платка Arduino свържете:
VIN до 5V (или 3.3V)
GND към земята
SDA към A4 и
SCL към A5 пинове съответно
След като MUX е свързан към микроконтролера, просто трябва да свържете сензорите към двойките SCn / SDn.
Сега нека проверим тази бърза демонстрация, в която съм свързал 8 OLED дисплея към мултиплексора TCA9548A. Тъй като тези дисплеи използват I2C комуникация, те комуникират с Arduino, използвайки само 2 пина.
Стъпка 10: Предимства и недостатъци
ПРЕДИМСТВА
* Комуникацията изисква само две автобусни линии (проводници)
* Прости отношения master/slave съществуват между всички компоненти
* Няма строги изисквания за скоростта на предаване на данни, като например при RS232, капитанът генерира тактовата шина
* Хардуерът е по -малко сложен от UART
* Поддържа множество господари и множество подчинени
* Битът ACK/NACK дава потвърждение, че всеки кадър е успешно прехвърлен
* I2C е „истинска мулти-мастер шина“, осигуряваща арбитраж и откриване на сблъсък
* Всяко устройство, свързано към шината, е софтуерно адресирано с уникален адрес
* Повечето I2C устройства могат да комуникират на 100kHz или 400kHz
* I²C е подходящ за периферни устройства, където простотата и ниските производствени разходи са по -важни от скоростта
* Добре известен и широко използван протокол
НЕДОСТАТЪЦИ
* По -бавна скорост на предаване на данни от SPI
* Размерът на рамката за данни е ограничен до 8 бита
* По -сложен хардуер, необходим за внедряване от SPI технологията
Препоръчано:
Урок: Как Arduino контролира множество устройства с един и същ адрес, използвайки TCA9548A I2C мултиплексор: 3 стъпки
Урок: Как Arduino контролира множество устройства с един и същ адрес, използвайки мултиплексор TCA9548A I2C: Описание: Модулът мултиплексор TCA9548A I2C трябва да даде възможност за свързване на устройства със същия I2C адрес (до 8 същия адрес I2C), свързани към един микроконтролер. Мултиплексорът действа като вратар, прехвърляйки командите към избрания набор от
I2C / IIC LCD дисплей - Използвайте SPI LCD към I2C LCD дисплея, използвайки SPI към IIC модул с Arduino: 5 стъпки
I2C / IIC LCD дисплей | Използвайте SPI LCD към I2C LCD дисплея Използване на SPI към IIC модул с Arduino: Здравейте момчета, тъй като нормалният SPI LCD 1602 има твърде много кабели за свързване, така че е много трудно да го свържете с arduino, но на пазара има един модул, който може конвертирате SPI дисплея в IIC дисплей, така че тогава трябва да свържете само 4 проводника
RF модул 433MHZ - Направете приемник и предавател от 433MHZ RF модул без микроконтролер: 5 стъпки
RF модул 433MHZ | Направете приемник и предавател от 433MHZ RF модул без никакъв микроконтролер: Искате ли да изпращате безжични данни? лесно и без нужда от микроконтролер? Ето, в тази инструкция ще ви покажа ми основен радиочестотен предавател и приемник, готов за употреба! В тази инструкция ще можете да изпращате и получавате данни, използвайки много вер
E32-433T Урок за модул LoRa - DIY Breakout Board за модул E32: 6 стъпки
E32-433T Урок за модул LoRa | DIY Breakout Board за модул E32: Хей, какво става, момчета! Akarsh тук от CETech, Този мой проект е по-скоро крива на обучение, за да се разбере работата на модула E32 LoRa от eByte, който е 1-ватов трансивър модул с висока мощност. След като разберем работата, имам дизайн
Мигащ светодиод чрез използване на ESP32 NodeMCU модул за WiFi и Bluetooth модул Урок: 5 стъпки
Мигащ светодиод чрез използване на ESP32 NodeMCU модул за WiFi и Bluetooth модул Урок: Описание NodeMCU е IoT платформа с отворен код. Програмира се с помощта на скриптовия език Lua. Платформата се основава на проекти с отворен код на eLua. Платформата използва много проекти с отворен код, като lua-cjson, spiffs. Този ESP32 NodeMc