Obsah:

Modul multiplexeru TCA9548A I2C - s Arduino a NodeMCU: 11 kroků
Modul multiplexeru TCA9548A I2C - s Arduino a NodeMCU: 11 kroků

Video: Modul multiplexeru TCA9548A I2C - s Arduino a NodeMCU: 11 kroků

Video: Modul multiplexeru TCA9548A I2C - s Arduino a NodeMCU: 11 kroků
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Listopad
Anonim
Image
Image

Dostali jste se někdy do situace, kdy jste museli připojit dva, tři nebo více I2C senzorů k vašemu Arduinu, abyste si uvědomili, že senzory mají pevnou nebo stejnou I2C adresu. Kromě toho nemůžete mít dvě zařízení se stejnou adresou na stejných pinech SDA/SCL!

Jaké jsou tedy vaše možnosti? Dejte je všechny do multiplexeru TCA9548A 1 až 8 I2C, aby si všichni navzájem povídali na stejné sběrnici! TCA9548A Breakout umožňuje komunikaci s více zařízeními I2C, které mají stejnou adresu, a usnadňuje tak propojení s nimi.

Krok 1: Hardwarový požadavek

Pokrytá témata
Pokrytá témata

Pro tento tutoriál potřebujeme:

- prkénko

- Multiplexor TCA9548A I2C

- Arduino Uno/Nano, co je po ruce

- NodeMCU

- Několik 0,91 a 0,96 I2C OLED displejů

- propojovací kabely a

- USB kabel pro nahrání kódu

Krok 2: Zahrnutá témata

Naši diskusi zahájíme porozuměním základům technologie I2C

Poté se dozvíme o multiplexeru TCA9548A a o tom, jak master a slave odesílá a přijímá data pomocí technologie I2C. Poté se podíváme na to, jak můžeme programovat a používat multiplexor v našem projektu pomocí Arduino a NodeMCU. Dále vám ukážu rychlý demo pomocí 8 I2C OLED displejů a nakonec tutoriál dokončíme diskusí o výhodách a nevýhodách multiplexeru TCA9548A

Krok 3: Základy sběrnice I2C

Základy sběrnice I2C
Základy sběrnice I2C
Základy sběrnice I2C
Základy sběrnice I2C
Základy sběrnice I2C
Základy sběrnice I2C

Inter-integrated Circuit výrazný I-squared-C (I²C) nebo I2C je dvouvodičová sběrnicová technologie (vlastně 4vodičová, protože potřebujete také VCC a Ground), která se používá pro komunikaci mezi více procesory a senzory.

Dva dráty jsou:

* SDA - Sériová data (datová linka) a

* SCL - Sériové hodiny (hodinový řádek)

Pamatujte, že obě tyto řádky jsou „synchronní“, „obousměrné“, „vypouštěcí“a jsou „vytažené s odpory“.

Technologie sběrnice I2C byla původně navržena společností Philips Semiconductors na začátku 80. let, aby umožňovala snadnou komunikaci mezi součástmi, které jsou umístěny na stejném obvodovém panelu.

S I2C můžete připojit více podřízených k jednomu hlavnímu (jako SPI) nebo můžete mít více hlavních ovládajících jeden nebo více podřízených. Master i slave mohou přenášet a přijímat data. Zařízení na sběrnici I2C tedy může být v jednom z těchto čtyř stavů:

* Hlavní přenos - hlavní uzel odesílá data slave* Hlavní příjem - hlavní uzel přijímá data od slave

* Podřízený přenos - podřízený uzel odesílá data do nadřízeného

* Slave příjem - podřízený uzel přijímá data z masteru

I2C je „sériový komunikační protokol“na „krátkou vzdálenost“, takže data jsou přenášena „bit-by-bit“po jednom vodiči nebo lince SDA. Výstup bitů je synchronizován se vzorkováním bitů hodinovým signálem „sdíleným“mezi masterem a slave. Hodinový signál je vždy řízen masterem. Master generuje hodiny a zahajuje komunikaci s otroky.

Když to tedy shrnu>

Počet použitých vodičů: 2

Synchronní nebo asynchronní: Synchronní

Sériové nebo paralelní: Sériové

Hodinový signál ovládaný: Master Node

Použité napětí: +5 V nebo +3,3 V

Maximální počet Masters: Neomezený

Maximální počet otroků: 1008

Maximální rychlost: Standardní režim = 100 kb / s

Rychlý režim = 400 kbps

Vysokorychlostní režim = 3,4 Mb / s

Ultra rychlý režim = 5 Mbps

Krok 4: Modul multiplexeru TCA9548A I2C

Modul multiplexeru TCA9548A I2C
Modul multiplexeru TCA9548A I2C
Modul multiplexeru TCA9548A I2C
Modul multiplexeru TCA9548A I2C
Modul multiplexeru TCA9548A I2C
Modul multiplexeru TCA9548A I2C

TCA9548A je osmikanálový (obousměrný) multiplexor I2C, který umožňuje ovládat osm samostatných zařízení I2C pomocí jedné hostitelské sběrnice I2C. Stačí připojit senzory I2C k multiplexovaným sběrnicím SCn / SDn. Pokud je například v aplikaci potřeba osm identických OLED displejů, může být jeden z každého displeje připojen ke každému z těchto kanálů: 0-7.

Multiplexer se připojuje k linkám VIN, GND, SDA a SCL mikrořadiče. Breakout board přijímá VIN od 1,65v do 5,5v. Vstupní linky SDA i SCL jsou připojeny k VCC přes 10K pull-up odpor (velikost pull-up rezistoru je dána velikostí kapacity na I2C linkách). Multiplexer podporuje jak normální (100 kHz), tak rychlé (400 kHz) protokoly I2C. Všechny I/O piny TCA9548A jsou tolerantní k 5 voltům a lze je také použít k překladu z vysokého na nízké nebo nízké na vysoké napětí.

Je dobré umístit výsuvné odpory na všechny kanály TCA9548A, i když jsou napětí stejná. Důvodem je interní přepínač NMOS. Vysoké napětí nepřenáší příliš dobře, na druhou stranu velmi dobře přenáší nízké napětí. TCA9548A lze také použít pro napěťový překlad, což umožňuje použití různých sběrnicových napětí na každém páru SCn/SDn tak, že části 1,8 V, 2,5 V nebo 3,3 V mohou komunikovat s částmi 5 V. Toho je dosaženo použitím externích výsuvných odporů k vytažení sběrnice na požadované napětí pro hlavní a každý podřízený kanál.

Pokud mikrokontrolér detekuje konflikt sběrnice nebo jinou nesprávnou činnost, lze TCA9548A resetovat nastavením nízké hodnoty na pin RESET.

Krok 5:

obraz
obraz
obraz
obraz
obraz
obraz

TCA9548 umožňuje jedinému mikrokontroléru komunikovat až s '64 senzory ', všechny se stejnou nebo odlišnou adresou I2C, a to přiřazením jedinečného kanálu každé sub-sběrnici senzoru.

Když mluvíme o odesílání dat přes 2 dráty na více zařízení, potřebujeme způsob, jak je řešit. Je to stejné, jako když pošťák přijíždí po jediné silnici a odhodí poštovní pakety do různých domů, protože na nich mají napsané různé adresy.

Můžete mít maximálně 8 těchto multiplexorů spojených dohromady na adresách 0x70-0x77, abyste mohli ovládat 64 stejných adresovaných částí I2C. Připojením tří adresových bitů A0, A1 a A2 k VIN můžete získat různé kombinace adres. Takto vypadá adresový bajt TCA9548A. Prvních 7 bitů se spojí a vytvoří adresu slave. Poslední bit adresy slave definuje operaci (čtení nebo zápis), která má být provedena. Když je vysoká (1), je vybráno čtení, zatímco nízká (0) vybere operaci zápisu.

Krok 6: Jak mistr odesílá a přijímá data

Jak mistr odesílá a přijímá data
Jak mistr odesílá a přijímá data
Jak mistr odesílá a přijímá data
Jak mistr odesílá a přijímá data

Následuje obecný postup pro master pro přístup k podřízenému zařízení:

1. Pokud chce mistr odesílat data podřízenému systému (WRITES):

-Hlavní vysílač vysílá podmínku START, za níž následují adresy podřízeného přijímače a R/W nastaveny na 0

-Hlavní vysílač odesílá data v '8bitových řídicích registrech' do podřízeného přijímače, když podřízený potvrdí, že je připraven

-Hlavní vysílač ukončí přenos s podmínkou STOP

2. Pokud chce mistr přijímat nebo číst data z podřízeného zařízení (READS):

-Master-receiver odešle podmínku START následovanou adresami slave-přijímače a R/W nastavenými na 1

-Master-receiver odešle požadovaný registr ke čtení do podřízeného vysílače

-Hlavní přijímač přijímá data z podřízeného vysílače

- Jakmile jsou přijaty všechny bajty, Master odešle signalizaci NACK podřízenému, aby zastavil komunikaci a uvolnil sběrnici

- Master-receiver ukončí přenos s podmínkou STOP

Sběrnice je považována za nečinnou, pokud jsou linky SDA i SCL po stavu STOP vysoké.

Krok 7: Kód

Kód
Kód

Nyní kód Int umožňuje začít zahrnutím knihovny „Wire“a definováním adresy multiplexerů.

#include "Wire.h"

#include "U8glib.h"

#define Adresa MUX_Address 0x70 // TCA9548A Adresa kodéru

Poté musíme vybrat port, se kterým chceme komunikovat, a odeslat na něj data pomocí této funkce:

zrušit selectI2CChannels (uint8_t i) {

if (i> 7) return;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Dále budeme inicializovat zobrazení v sekci nastavení voláním „u8g.begin ();“pro každý displej připojený k MUX "tcaselect (i);"

Po inicializaci si pak můžeme dělat, co chceme, jen zavoláním funkce „tcaselect (i);“kde „i“je hodnota multiplexované sběrnice a podle toho odesílá data a hodiny.

Krok 8: Skener I2C

Skener I2C
Skener I2C

V případě, že si nejste jisti adresou zařízení vašeho I2C štítu, spusťte přiložený kód 'I2C Scanner' a najděte hexadecimální adresu vašeho zařízení. Po načtení do Arduina skica naskenuje síť I2C a zobrazí adresy, které odpovídají.

Krok 9: Zapojení a ukázka

Elektroinstalace a ukázka
Elektroinstalace a ukázka
Elektroinstalace a ukázka
Elektroinstalace a ukázka

Elektrické vedení:

Začněme připojením multiplexeru k desce NodeMCU. Připojit:

VIN až 5 V (nebo 3,3 V)

GND k zemi

SDA až D2 a

Piny SCL až D1

Pro desku Arduino připojte:

VIN až 5 V (nebo 3,3 V)

GND k zemi

SDA na A4 a

Piny SCL až A5

Jakmile je MUX připojen k mikrořadiči, stačí připojit senzory k párům SCn / SDn.

Nyní se podívejme na toto rychlé demo, ve kterém jsem k multiplexeru TCA9548A připojil 8 OLED displejů. Jelikož tyto displeje používají komunikaci I2C, komunikují s Arduino pomocí pouhých 2 pinů.

Krok 10: Výhody a nevýhody

Výhody a nevýhody
Výhody a nevýhody

VÝHODY

* Komunikace vyžaduje pouze dvě sběrnicové linky (dráty)

* Mezi všemi komponentami existuje jednoduchý vztah master/slave

* Žádné přísné požadavky na přenosovou rychlost, jako například u RS232, master generuje hodiny sběrnice

* Hardware je méně komplikovaný než UART

* Podporuje více mistrů a více otroků

* Bit ACK/NACK dává potvrzení, že každý snímek je úspěšně přenesen

* I2C je „skutečná sběrnice s více mastery“, která poskytuje detekci arbitráží a kolizí

* Každé zařízení připojené ke sběrnici je softwarově adresovatelné jedinečnou adresou

* Většina zařízení I2C může komunikovat na frekvenci 100 kHz nebo 400 kHz

* I²C je vhodný pro periferie, kde je jednoduchost a nízké výrobní náklady důležitější než rychlost

* Známý a široce používaný protokol

NEVÝHODY

* Pomalejší přenos dat než SPI

* Velikost datového rámce je omezena na 8 bitů

* K implementaci je zapotřebí složitější hardware než technologie SPI

Doporučuje: