Съдържание:

TCA9548A I2C мултиплексен модул - с Arduino и NodeMCU: 11 стъпки
TCA9548A I2C мултиплексен модул - с Arduino и NodeMCU: 11 стъпки

Видео: TCA9548A I2C мултиплексен модул - с Arduino и NodeMCU: 11 стъпки

Видео: TCA9548A I2C мултиплексен модул - с Arduino и NodeMCU: 11 стъпки
Видео: PCF8574 GPIO Extender - With Arduino and NodeMCU 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. демонстрация с помощта на 8 I2C OLED дисплея и накрая ще завършим урока, като обсъдим предимствата и недостатъците на мултиплексора TCA9548A

Стъпка 3: Основи на I2C Bus

Основи на автобуса I2C
Основи на автобуса I2C
Основи на автобуса I2C
Основи на автобуса I2C
Основи на автобуса I2C
Основи на автобуса I2C

Междуинтегрирана схема, изразена 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 мултиплексен модул
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.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 скенер

За всеки случай, ако не сте сигурни за адреса на устройството на вашия 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 технологията

Препоръчано: