Turinys:
- 1 žingsnis: aparatinės įrangos reikalavimas
- 2 veiksmas: aptariamos temos
- 3 žingsnis: I2C magistralės pagrindai
- 4 žingsnis: TCA9548A I2C multiplekserio modulis
- 5 žingsnis:
- 6 veiksmas: kaip kapitonas siunčia ir priima duomenis
- 7 žingsnis: kodas
- 8 veiksmas: „I2C“skaitytuvas
- 9 žingsnis: laidai ir demonstracija
- 10 žingsnis: privalumai ir trūkumai
- 11 žingsnis: ačiū
Video: TCA9548A I2C multiplekserio modulis - su „Arduino“ir „Node“MCU: 11 žingsnių
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Ar kada patekote į situaciją, kai turėjote prijungti du, tris ar daugiau I2C jutiklių prie „Arduino“, kad suprastumėte, jog jutikliai turi fiksuotą arba tą patį I2C adresą. Be to, jūs negalite turėti dviejų įrenginių tuo pačiu adresu tame pačiame SDA/SCL kaištyje!
Taigi, kokios yra jūsų galimybės? Įdėkite juos visus į TCA9548A nuo 1 iki 8 I2C multiplekserį, kad jie visi kalbėtųsi tuo pačiu autobusu! „TCA9548A Breakout“suteikia galimybę bendrauti su keliais I2C įrenginiais, turinčiais tą patį adresą, todėl su jais paprasta bendrauti.
1 žingsnis: aparatinės įrangos reikalavimas
Šiai pamokai mums reikia:
- Bandomoji Lenta
- TCA9548A I2C multiplekseris
- „Arduino Uno“/„Nano“viskas, kas jums patogu
- „NodeMCU“
- Keletas 0,91 ir 0,96 I2C OLED ekranų
- jungiamieji kabeliai ir
- USB kabelis, skirtas įkelti kodą
2 veiksmas: aptariamos temos
Diskusiją pradėsime suprasdami I2C technologijos pagrindus
Tada mes sužinosime apie TCA9548A multiplekserį ir tai, kaip šeimininkas ir vergas siunčia ir gauna duomenis naudojant I2C technologiją. Tada patikrinsime, kaip galime užprogramuoti ir naudoti multiplekserį savo projekte, naudodami „Arduino“ir „NodeMCU“. Toliau parodysiu jums greitai demonstracinė versija naudojant 8 „I2C OLED“ekranus ir galiausiai baigsime vadovėlį aptardami „TCA9548A Multiplexer“pranašumus ir trūkumus
3 žingsnis: I2C magistralės pagrindai
Interintegruota grandinė, išreikšta I kvadratu-C (I²C) arba I2C, yra dviejų laidų magistralės technologija (iš tikrųjų 4 laidai, nes jums taip pat reikia VCC ir įžeminimo), naudojama komunikacijai tarp kelių procesorių ir jutiklių.
Du laidai yra:
* SDA - serijiniai duomenys (duomenų linija) ir
* SCL - serijinis laikrodis (laikrodžio linija)
Atminkite, kad abi šios linijos yra „sinchroninės“„dvikryptės“„atviro nutekėjimo“ir yra „ištrauktos su rezistoriais“.
I2C magistralės technologiją iš pradžių sukūrė „Philips Semiconductors“devintojo dešimtmečio pradžioje, kad būtų galima lengvai bendrauti tarp komponentų, esančių toje pačioje plokštėje.
Naudodami „I2C“galite prijungti kelis vergus prie vieno pagrindinio tinklo (pvz., SPI) arba turėti kelis valdiklius, valdančius vieną ar kelis vergus. Tiek šeimininkai, tiek vergai gali perduoti ir gauti duomenis. Taigi, I2C magistralės įrenginys gali būti vienoje iš šių keturių būsenų:
* Pagrindinis perdavimas - pagrindinis mazgas siunčia duomenis į vergą* Pagrindinis priėmimas - pagrindinis mazgas gauna duomenis iš vergo
* Slave perdavimas - vergas mazgas siunčia duomenis pagrindiniam
* Vergas priimamas - vergas mazgas gauna duomenis iš pagrindinio
„I2C“yra „trumpo atstumo“„nuoseklaus ryšio protokolas“, todėl duomenys perduodami „po bitą“vienu laidu arba SDA linija. Bitų išvestis sinchronizuojama su bitų atranka pagal laikrodžio signalą, „bendrinamą“tarp pagrindinio ir pavaldinio. Laikrodžio signalą visada valdo meistras. Šeimininkas sukuria laikrodį ir inicijuoja ryšį su vergais.
Taigi, apibendrinant>
Naudotų laidų skaičius: 2
Sinchroninis arba asinchroninis: sinchroninis
Serijinis arba lygiagretusis: serijinis
Laikrodžio signalą valdo: pagrindinis mazgas
Naudojama įtampa: +5 V arba +3,3 V
Maksimalus meistrų skaičius: neribotas
Maksimalus vergų skaičius: 1008
Maksimalus greitis: standartinis režimas = 100 kbps
Greitas režimas = 400 kbps
Didelio greičio režimas = 3,4 Mbps
Itin greitas režimas = 5 Mbps
4 žingsnis: TCA9548A I2C multiplekserio modulis
TCA9548A yra aštuonių kanalų (dvikryptis) I2C multiplekseris, leidžiantis aštuonis atskirus I2C įrenginius valdyti vienu I2C magistraliniu prietaisu. Jums tiesiog reikia prijungti I2C jutiklius prie SCn / SDn multipleksuotų magistralių. Pavyzdžiui, jei programoje reikalingi aštuoni identiški OLED ekranai, prie kiekvieno iš šių kanalų galima prijungti po vieną ekraną: 0-7.
„Multiplexer“jungiasi prie mikrovaldiklio VIN, GND, SDA ir SCL linijų. Išardymo plokštė priima VIN nuo 1.65v iki 5.5v. Tiek įvesties SDA, tiek SCL linijos yra prijungtos prie VCC per 10K ištraukiamąjį rezistorių (ištraukimo rezistoriaus dydį lemia I2C linijų talpa). Multiplekseris palaiko tiek įprastus (100 kHz), tiek greitus (400 kHz) I2C protokolus. Visi TCA9548A įvesties/išvesties kaiščiai yra 5 voltų tolerancijos ir taip pat gali būti naudojami iš aukštos įtampos į žemą arba žemą į aukštą įtampą.
Patartina į visus TCA9548A kanalus įdėti traukiamus rezistorius, net jei įtampa yra vienoda. To priežastis yra vidinis NMOS jungiklis. Jis ne itin gerai perduoda aukštą įtampą, kita vertus, jis labai gerai perduoda žemą įtampą. TCA9548A taip pat gali būti naudojamas įtampos vertimui, leidžiant kiekvienoje SCn/SDn poroje naudoti skirtingą magistralės įtampą, kad 1,8 V, 2,5 V arba 3,3 V dalys galėtų bendrauti su 5 V dalimis. Tai pasiekiama naudojant išorinius traukiamus rezistorius, kad magistralė būtų pritraukta iki norimos pagrindinio ir kiekvieno pavaldinio kanalo įtampos.
Jei mikrovaldiklis aptinka magistralės konfliktą ar kitą netinkamą veikimą, TCA9548A galima atkurti iš naujo nustatant žemą RESET kaiščio tašką.
5 žingsnis:
TCA9548 leidžia vienam mikrovaldikliui bendrauti su iki „64 jutiklių“, turinčių tą patį arba skirtingą I2C adresą, priskiriant unikalų kanalą kiekvienam jutiklio antriniam magistraliui.
Kai mes kalbame apie duomenų siuntimą dviem laidais į kelis įrenginius, mums reikia būdo juos spręsti. Tas pats, kaip paštininkas, atėjęs vienu keliu ir numetęs pašto paketus į skirtingus namus, nes ant jų parašyti skirtingi adresai.
Galite valdyti ne daugiau kaip 8 iš šių multiplekserių, sujungtų 0x70-0x77 adresais, kad galėtumėte valdyti 64 tas pačias I2C adresuotas dalis. Prijungę tris adresų bitus A0, A1 ir A2 prie VIN, galite gauti skirtingą adresų derinį. Taip atrodo TCA9548A adreso baitas. Pirmieji 7 bitai sujungiami ir sudaro vergo adresą. Paskutinis pavaldinio adreso bitas apibrėžia atliekamą operaciją (skaitymą ar rašymą). Kai jis yra aukštas (1), pasirenkamas skaitymas, o žemas (0) - rašymo operacija.
6 veiksmas: kaip kapitonas siunčia ir priima duomenis
Toliau pateikiama bendra tvarka, kaip kapitonas gali pasiekti slaptąjį įrenginį:
1. Jei šeimininkas nori siųsti duomenis vergui (WRITES):
-Pagrindinis siųstuvas siunčia START sąlygą, po kurios seka pavaldinio imtuvo adresai ir R/W nustatyta į 0
-Pagrindinis siųstuvas siunčia duomenis iš „8 bitų valdymo registrų“į verginį imtuvą, kai vergas pripažįsta, kad yra pasirengęs
-Pagrindinis siųstuvas nutraukia perdavimą su STOP sąlyga
2. Jei šeimininkas nori gauti ar perskaityti duomenis iš vergo (READS):
-Pagrindinis imtuvas siunčia START sąlygą, o po to-verginio imtuvo adresus ir R/W nustatytą į 1
-Pagrindinis imtuvas siunčia prašomą registrą skaityti vergui-siųstuvui
-Pagrindinis imtuvas gauna duomenis iš vergo siųstuvo
- Gavęs visus baitus, meistras siunčia NACK signalą vergui, kad nutrauktų ryšius ir atleistų magistralę
- Pagrindinis imtuvas nutraukia perdavimą su STOP sąlyga
Autobusas laikomas nenaudojamu, jei tiek STA, tiek SCL linijos yra aukštos po STOP.
7 žingsnis: kodas
Dabar „Int“kodą galima pradėti įtraukiant „Wire“biblioteką ir nustatant multiplekserių adresą.
#įtraukti „Wire.h“
#include "U8glib.h"
#define MUX_Address 0x70 // TCA9548A Kodavimo adresas
Tada turime pasirinkti prievadą, su kuriuo norime bendrauti, ir siųsti duomenis apie jį naudodami šią funkciją:
void selectI2CChannels (uint8_t i) {
jei (i> 7) grįžti;
Wire.beginTransmission (MUX_Address);
Wire.write (1 << i);
Wire.endTransmission ();
}
Toliau inicijuosime ekraną sąrankos skiltyje, paskambinę „u8g.begin ();“kiekvienam ekranui, prijungtam prie MUX "tcaselect (i);"
Kai inicijuojame, tada galime daryti viską, ką norime, tiesiog paskambinę funkcijai „tcaselect (i);“kur „i“yra multipleksuotos magistralės vertė, o tada atitinkamai siunčiami duomenys ir laikrodis.
8 veiksmas: „I2C“skaitytuvas
Tik tuo atveju, jei nesate tikri dėl savo I2C skydo įrenginio adreso, paleiskite pridėtą „I2C Scanner“kodą, kad surastumėte savo prietaiso šešioliktainį adresą. Įkeltas į „Arduino“eskizas nuskaitys I2C tinklą ir parodys atsakančius adresus.
9 žingsnis: laidai ir demonstracija
Laidai:
Pradėkime prijungdami multiplekserį prie „NodeMCU“plokštės. Prisijungti:
VIN iki 5V (arba 3.3V)
GND į žemę
SDA į D2 ir
SCL į D1 atitinkamai
Norėdami prijungti „Arduino“plokštę, prijunkite:
VIN iki 5V (arba 3.3V)
GND į žemę
SDA į A4 ir
SCL į A5 kaiščius atitinkamai
Kai MUX prijungtas prie mikrovaldiklio, jums tereikia prijungti jutiklius prie SCn / SDn porų.
Dabar patikrinkime šią greitą demonstraciją, kurioje aš prijungiau 8 OLED ekranus prie TCA9548A multipleksoriaus. Kadangi šie ekranai naudoja I2C ryšį, jie bendrauja su „Arduino“naudodami tik 2 kaiščius.
10 žingsnis: privalumai ir trūkumai
PRIVALUMAI
* Ryšiui reikia tik dviejų magistralinių linijų (laidų)
* Tarp visų komponentų egzistuoja paprasti šeimininko/vergo santykiai
* Nėra griežtų duomenų perdavimo spartos reikalavimų, pavyzdžiui, naudojant RS232, pagrindinis generuoja magistralės laikrodį
* Aparatūra yra mažiau sudėtinga nei UART
* Palaiko kelis šeimininkus ir kelis vergus
* ACK/NACK bitas patvirtina, kad kiekvienas kadras sėkmingai perkeltas
* „I2C“yra tikra kelių magistralių magistralė, suteikianti arbitražo ir susidūrimo aptikimo galimybę
* Kiekvienas prie magistralės prijungtas įrenginys yra programinės įrangos adresas unikaliu adresu
* Dauguma I2C įrenginių gali bendrauti 100 kHz arba 400 kHz dažniu
* I²C tinka periferiniams įrenginiams, kuriuose paprastumas ir mažos gamybos sąnaudos yra svarbesnės už greitį
* Gerai žinomas ir plačiai naudojamas protokolas
TRŪKUMAI
* Lėtesnis duomenų perdavimo greitis nei SPI
* Duomenų rėmelio dydis yra apribotas iki 8 bitų
* Įdiegti reikia sudėtingesnės aparatūros nei SPI technologija
Rekomenduojamas:
Sąsajos GPS modulis su „Raspberry Pi“: 10 žingsnių
Sąsajos GPS modulis su „Raspberry Pi“: Ei, vaikinai !! Ar norite sujungti GPS modulį su „Raspberry Pi“? Tačiau susiduriate su tam tikrais sunkumais tai padaryti? „Nesijaudink, aš čia tau padėsiu! Galite pradėti naudodami šias dalis:
Pamoka: Kaip „Arduino“valdo kelis to paties adreso įrenginius naudodami TCA9548A I2C multiplekserį: 3 žingsniai
Pamoka: Kaip „Arduino“valdo kelis to paties adreso įrenginius naudodami TCA9548A I2C multiplekserį: Aprašymas: „TCA9548A I2C Multiplexer“modulis leidžia prijungti įrenginius, turinčius tą patį I2C adresą (iki 8 to paties adreso I2C), prijungtus prie vieno mikrovaldiklio. Multiplekseris veikia kaip vartininkas, perkelia komandas į pasirinktą rinkinį
SPWM generatoriaus modulis (nenaudojant mikrovaldiklio): 14 žingsnių
SPWM generatoriaus modulis (nenaudojant mikrovaldiklio): Sveiki visi, sveiki atvykę į mano instrukciją! Tikiuosi, kad jums visiems puikiai sekasi. Neseniai susidomėjau eksperimentuoti su PWM signalais ir susidūriau su SPWM (arba sinusoidinio impulsų pločio moduliacijos) koncepcija, kai impulsų traukinio darbo ciklas
SD kortelės modulis su „Arduino“: kaip skaityti/rašyti duomenis: 14 žingsnių
SD kortelės modulis su „Arduino“: kaip skaityti/rašyti duomenis: apžvalga Duomenų saugojimas yra viena iš svarbiausių kiekvieno projekto dalių. Yra keli būdai saugoti duomenis pagal duomenų tipą ir dydį. SD ir „micro SD“kortelės yra vienos praktiškiausių tarp atminties įrenginių, naudojamų
„Pasidaryk pats“lazerinis vairavimo modulis „Arduino“: 14 žingsnių (su nuotraukomis)
„Pasidaryk pats“lazerio valdymo modulis „Arduino“: šioje instrukcijoje parodysiu dviejų ašių vieno veidrodžio lazerio spindulio valdymo modulio konstrukciją, naudojant 3D spausdintas dalis ir nebrangius „eBay“komponentus. Šis projektas panašus į „Arduino“lazerių šou su „Full XY“Valdykite