Sisukord:

TCA9548A I2C multipleksermoodul - koos Arduino ja sõlmega MCU: 11 sammu
TCA9548A I2C multipleksermoodul - koos Arduino ja sõlmega MCU: 11 sammu

Video: TCA9548A I2C multipleksermoodul - koos Arduino ja sõlmega MCU: 11 sammu

Video: TCA9548A I2C multipleksermoodul - koos Arduino ja sõlmega MCU: 11 sammu
Video: Solving I2C Address Conflicts - TCA9548A I2C Multiplexer 2024, November
Anonim
Image
Image

Kas olete kunagi sattunud olukorda, kus pidite oma Arduino külge ühendama kaks, kolm või enam I2C -andurit, et mõista, et anduritel on kindel või sama I2C -aadress. Veelgi enam, teil ei saa olla kahte sama aadressiga seadet samadel SDA/SCL -tihvtidel!

Niisiis, millised on teie võimalused? Pange need kõik TCA9548A 1 kuni 8 I2C multiplekserisse, et nad kõik saaksid sama bussiga omavahel rääkida! TCA9548A Breakout võimaldab suhelda mitme I2C seadmega, millel on sama aadress, mis muudab nendega liidestamise lihtsaks.

Samm: riistvaranõue

Kaetud teemad
Kaetud teemad

Selle õpetuse jaoks vajame:

- Leivalaud

- TCA9548A I2C multiplekser

- Arduino Uno/Nano, mis on käepärast

- NodeMCU

- Vähesed 0,91 ja 0,96 I2C OLED -ekraanid

- hüppajakaablid ja

- USB -kaabel koodi üleslaadimiseks

2. samm: kaetud teemad

Alustame oma arutelu I2C tehnoloogia põhitõdede mõistmisega

Seejärel õpime tundma multiplekserit TCA9548A ja seda, kuidas ülem ja alam saadab ja võtab vastu andmeid, kasutades tehnoloogiat I2C. Seejärel kontrollime, kuidas saame oma projektis multiplekserit programmeerida ja kasutada, kasutades Arduino ja NodeMCU. Järgmisena näitan teile kiiresti demo, kasutades 8 I2C OLED -ekraani ja lõpuks lõpetame õpetuse, arutades multiplekseri TCA9548A eeliseid ja puudusi

3. samm: I2C bussi põhitõed

I2C bussi põhitõed
I2C bussi põhitõed
I2C bussi põhitõed
I2C bussi põhitõed
I2C bussi põhitõed
I2C bussi põhitõed

Integreeritud vooluahela hääldatud I-kvadraat-C (I²C) või I2C on kahe juhtmega siinitehnoloogia (tegelikult 4 juhet, kuna vajate ka VCC-d ja maandust), mida kasutatakse mitme protsessori ja anduri vaheliseks suhtlemiseks.

Kaks juhtmest on:

* SDA - seeriaandmed (andmeside) ja

* SCL - jadakell (kellajoon)

Pidage meeles, et mõlemad liinid on sünkroonsed, kahesuunalised, avatud äravooluga ja on takistitega üles tõmmatud.

I2C siinitehnoloogia kujundas algselt Philips Semiconductors 80ndate alguses, et võimaldada hõlpsat suhtlust samal trükkplaadil asuvate komponentide vahel.

I2C abil saate ühendada mitu orja ühe masteriga (nt SPI) või teil võib olla mitu ülemat, kes kontrollivad ühte või mitut orja. Nii meistrid kui ka orjad saavad andmeid edastada ja vastu võtta. Niisiis võib I2C siinil olev seade olla ühes neljast olekust:

* Põhisaatmine - peasõlm saadab andmeid orjale* Põhivastus - peasõlm võtab orjast andmeid vastu

* Alamülekanne - orjasõlm saadab andmeid kaptenile

* Alamvastuvõtt - orjasõlm võtab masterilt andmeid vastu

I2C on „lühikese vahemaa” jadakommunikatsiooni protokoll, seega edastatakse andmeid „bitti haaval” mööda ühte traati või SDA-liini. Bittide väljund sünkroniseeritakse bittide proovivõtmisega kella signaali abil, mis on jagatud meistri ja alluva vahel. Kella signaali juhib alati kapten. Meister loob kella ja alustab sidepidamist orjadega.

Niisiis, kokkuvõtteks>

Kasutatud juhtmete arv: 2

Sünkroonne või asünkroonne: sünkroonne

Seeria või paralleel: jada

Kella signaali juhib: Master Node

Kasutatavad pinged: +5 V või +3,3 V

Maksimaalne meistrite arv: piiramatu

Maksimaalne orjade arv: 1008

Maksimaalne kiirus: standardrežiim = 100 kbps

Kiire režiim = 400 kbps

Kiire režiim = 3,4 Mbps

Ülikiire režiim = 5 Mbps

Samm: TCA9548A I2C multipleksermoodul

TCA9548A I2C multipleksermoodul
TCA9548A I2C multipleksermoodul
TCA9548A I2C multipleksermoodul
TCA9548A I2C multipleksermoodul
TCA9548A I2C multipleksermoodul
TCA9548A I2C multipleksermoodul

TCA9548A on kaheksakanaliline (kahesuunaline) I2C multiplekser, mis võimaldab ühe hosti I2C siiniga juhtida kaheksat eraldi I2C seadet. Peate lihtsalt ühendama I2C andurid SCn / SDn multipleksitud siinidega. Näiteks kui rakenduses on vaja kaheksat ühesugust OLED-ekraani, saab iga kuvariga ühendada ühe neist kanalitest: 0-7.

Multiplekser ühendub mikrokontrolleri VIN, GND, SDA ja SCL liinidega. Väljalülitusplaat aktsepteerib VIN -i vahemikus 1,65 kuni 5,5 volti. Nii SDA kui ka SCL sisendliinid on ühendatud VCC-ga 10K tõmbetakistuse kaudu (Tõmbetakisti suurus määratakse I2C liinide mahtuvuse järgi). Multiplekser toetab nii tavalisi (100 kHz) kui ka kiireid (400 kHz) I2C protokolle. Kõik TCA9548A sisend-/väljundpistikud on 5-voldise taluvusega ja neid saab kasutada ka kõrgepingest madalaks või madalaks kõrgeks pingeks.

TCA9548A kõikidele kanalitele on hea mõte panna tõmbetakistid, isegi kui pinge on sama. Selle põhjuseks on sisemine NMOS -lüliti. See ei edasta kõrgepinget väga hästi, teisest küljest aga väga hästi. TCA9548A-d võib kasutada ka pinge teisendamiseks, võimaldades igal SCn/SDn paaril kasutada erinevaid siinipingeid nii, et 1,8-V, 2,5-V või 3,3-V osad saaksid suhelda 5-V osadega. See saavutatakse väliste tõmbetakistite abil, et tõmmata siini ülem- ja iga alamkanali soovitud pingele.

Kui mikrokontroller tuvastab siini konflikti või muu ebaõige toimingu, saab TCA9548A lähtestada, kinnitades RESET-pinnile madala taseme.

5. samm:

Pilt
Pilt
Pilt
Pilt
Pilt
Pilt

TCA9548 võimaldab ühel mikrokontrolleril suhelda kuni '64 anduriga ', millel kõigil on sama või erinev I2C-aadress, määrates igale anduri alam-siinile ainulaadse kanali.

Kui me räägime andmete saatmisest üle kahe juhtme mitmesse seadmesse, siis vajame viisi nende lahendamiseks. See on sama, kui postiljon tuleb ühel teel ja viskab postipakid erinevatesse majadesse, sest neile on kirjutatud erinevad aadressid.

Teil võib olla kuni 8 sellist multiplekserit ühendatud 0x70-0x77 aadressidega, et juhtida 64 sama I2C aadressiga osa. Ühendades kolm aadressibitti A0, A1 ja A2 VIN -iga, saate erineva aadresside kombinatsiooni. Nii näeb välja TCA9548A aadressibait. Esimesed 7-bitised ühendavad alam-aadressi. Alam -aadressi viimane bitt määratleb toimingu (lugemise või kirjutamise). Kui see on kõrge (1), valitakse lugemine, madal (0) aga kirjutamisoperatsioon.

Samm: kuidas kapten andmeid saadab ja võtab vastu

Kuidas kapten andmeid saadab ja võtab vastu
Kuidas kapten andmeid saadab ja võtab vastu
Kuidas kapten andmeid saadab ja võtab vastu
Kuidas kapten andmeid saadab ja võtab vastu

Alljärgnev on üldine protseduur, kuidas kapten pääseb alamseadmele juurde:

1. Kui ülem soovib orjale andmeid saata (WRITES):

-Peasaatja saadab START-tingimuse, millele järgneb alam-vastuvõtja aadress ja R/W on seatud väärtusele 0

-Peasaatja saadab andmed alamvastuvõtjale 8-bitistes juhtregistrites, kui alam kinnitab, et on valmis

-Peasaatja lõpetab edastamise STOP-tingimusega

2. Kui ülem soovib orjalt andmeid vastu võtta või lugeda (READS):

-Ülem-vastuvõtja saadab START-tingimuse, millele järgneb alam-vastuvõtja aadress ja R/W on seatud väärtusele 1

-Master-vastuvõtja saadab nõutud registri alam-saatjale lugemiseks

-Master-vastuvõtja võtab andmeid alam-saatjalt

- Kui kõik baidid on vastu võetud, saadab kapten orjale NACK -signaali, et lõpetada side ja vabastada siin

- Peamine vastuvõtja lõpetab edastamise STOP-tingimusega

Siini loetakse jõudeolekuks, kui nii SDA- kui ka SCL -liin on pärast STOP -tingimust kõrgel.

Samm: kood

Kood
Kood

Nüüd lubab kood alustada, kaasates raamatukogu "Wire" ja määratledes multiplekserite aadressi.

#include "Wire.h"

#include "U8glib.h"

#define MUX_Address 0x70 // TCA9548A Kodeerijate aadress

Seejärel peame valima pordi, millega tahame suhelda, ja selle funktsiooni abil selle kohta andmed saatma:

void selectI2CChannels (uint8_t i) {

kui (i> 7) tagasi;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Järgmisena lähtestame seadistuste jaotises ekraani, helistades "u8g.begin ();" iga MUX -i külge kinnitatud ekraani "tcaselect (i);"

Kui oleme lähtestanud, saame teha kõike, mida tahame, kutsudes funktsiooni "tcaselect (i);" kus "i" on multipleksitud siini väärtus ja seejärel andmete ja kella saatmine vastavalt.

Samm: I2C skanner

I2C skanner
I2C skanner

Igaks juhuks, kui te pole kindel oma I2C -kilbi seadme aadressis, käivitage lisatud 'I2C -skanneri' kood, et leida oma seadme kuusnurkne aadress. Arduino laadimisel skaneerib sketš I2C võrgu, näidates vastavaid aadresse.

9. samm: juhtmestik ja demo

Juhtmed ja demo
Juhtmed ja demo
Juhtmed ja demo
Juhtmed ja demo

Juhtmestik:

Alustuseks ühendage multiplekser NodeMCU plaadiga. Ühenda:

VIN kuni 5V (või 3.3V)

GND maapinnale

SDA kuni D2 ja

SCL kuni D1 tihvtid

Arduino plaadi jaoks ühendage:

VIN kuni 5V (või 3.3V)

GND maapinnale

SDA kuni A4 ja

SCL kuni A5 tihvtid

Kui MUX on mikrokontrolleriga ühendatud, peate andurid lihtsalt ühendama SCn / SDn paaridega.

Nüüd vaatame seda kiiret demot, milles olen ühendanud 8 OLED -ekraani TCA9548A multiplekseriga. Kuna need kuvarid kasutavad I2C -ühendust, suhtlevad nad Arduinoga vaid 2 tihvti kasutades.

Samm: eelised ja puudused

Eelised ja puudused
Eelised ja puudused

EELISED

* Side nõuab ainult kahte bussiliini (juhtmeid)

* Kõikide komponentide vahel on lihtsad ülem -alam -suhted

* Rangeid edastuskiiruse nõudeid pole, nagu näiteks RS232 puhul, genereerib kapten siinikella

* Riistvara on vähem keeruline kui UART -id

* Toetab mitut meistrit ja mitut orja

* ACK/NACK bit kinnitab, et iga kaader on edukalt üle kantud

* I2C on tõeline mitme põhibuss, mis pakub vahekohtumenetlust ja kokkupõrke tuvastamist

* Iga siiniga ühendatud seade on tarkvaraliselt adresseeritav unikaalse aadressiga

* Enamik I2C seadmeid suudab suhelda 100 kHz või 400 kHz sagedusel

* I²C sobib välisseadmetele, kus lihtsus ja madalad tootmiskulud on tähtsamad kui kiirus

* Tuntud ja laialdaselt kasutatav protokoll

Miinused

* Aeglasem andmeedastuskiirus kui SPI

* Andmeraami suurus on piiratud 8 bitiga

* Rakendamiseks on vaja keerulisemat riistvara kui SPI -tehnoloogiat

Soovitan: