Turinys:

Pristatome „I2C“su „Zio“moduliais ir „Qwiic“: 6 žingsniai
Pristatome „I2C“su „Zio“moduliais ir „Qwiic“: 6 žingsniai

Video: Pristatome „I2C“su „Zio“moduliais ir „Qwiic“: 6 žingsniai

Video: Pristatome „I2C“su „Zio“moduliais ir „Qwiic“: 6 žingsniai
Video: „Garmin“: pristatome „quatix® 6“ seriją 2024, Lapkritis
Anonim
Pristatome „I2C“su „Zio“moduliais ir „Qwiic“
Pristatome „I2C“su „Zio“moduliais ir „Qwiic“

Robin Sharma sakė: „Maži kasdieniai patobulinimai laikui bėgant duoda stulbinančių rezultatų“. Galbūt galvojate: „O, dar vienas I2C įrašas?“. Žinoma, yra tūkstančiai informacijos apie I2C. Tačiau sekite naujienas, tai ne tik dar vienas I2C straipsnis. „Qwiic Connect System“ir periferinės „Zio“perjungimo plokštės tikrai yra „I²C“žaidimų keitikliai!

Įvadas

Jei kuriate elektroninius projektus ir darote nuostabius dalykus, galbūt supratote, kad didėjant jūsų projektams jūsų duonos lenta pradeda atrodyti kaip gyvatės duobė (šiek tiek netvarkinga, tiesa?).

Be to, jei vykdote kelis projektus, praleidžiate krūvą laiko perjungdami laidus iš vieno projekto į kitą.

Mes esame kūrėjai, todėl suprantame kovą. Naujausias mūsų indėlis į OHS bendruomenę yra modulinė prototipų sistema, vadinama ZIO, pritaikanti „Qwiic“jungiamąją sistemą. „Qwiic“yra labai patogus būdas perduoti programuojamą plokštę su jutikliais, pavaromis ir pertraukimo plokštėmis per I²C.

1 žingsnis: kas yra I²C ir kodėl mums tai patinka

Kas yra I²C ir kodėl mums tai patinka
Kas yra I²C ir kodėl mums tai patinka

„I²C“yra plačiausiai naudojama kelių magistralių magistralė, o tai reiškia, kad prie tos pačios magistralės galima prijungti įvairius lustus. Jis naudojamas daugelyje programų tarp pagrindinio ir pavaldinio arba kelių pagrindinių ir pavaldžių įrenginių. Nuo mikrovaldiklių, išmaniųjų telefonų iki pramoninių programų, ypač vaizdo įrenginių, tokių kaip kompiuterių monitoriai. Jis gali būti lengvai įdiegtas daugelyje elektroninių konstrukcijų (o pastaruoju metu dar lengviau naudojant „Qwiic“jungtį).

Jei turėtume apibūdinti I²C dviem žodžiais, tikriausiai naudosime paprastumą ir lankstumą.

Vienas iš didžiausių I²C pranašumų, palyginti su kitais ryšio protokolais, yra tai, kad tai dviejų laidų sąsaja, o tai reiškia, kad jai reikia tik dviejų signalų laidų - SDA (Serial Data Line) ir SCL (Serial Clock Line). Tai gali būti ne pats greičiausias protokolas, tačiau jis yra gerai žinomas kaip labai lankstus, leidžiantis lanksčiai valdyti magistralę.

Kita svarbi savybė, dėl kurios šis autobusas yra patrauklus, yra bendravimas tarp šeimininko ir vergo. Prie tos pačios magistralės galima prijungti kelis įrenginius ir nereikia keisti laidų tarp įrenginių, nes kiekvienas įrenginys turi unikalų adresą (kapitonas pasirenka įrenginį, kuriuo norite bendrauti).

2 žingsnis: pažvelkime atidžiau

Pažvelkime atidžiau
Pažvelkime atidžiau
Pažvelkime atidžiau
Pažvelkime atidžiau
Pažvelkime atidžiau
Pažvelkime atidžiau
Pažvelkime atidžiau
Pažvelkime atidžiau

Taigi, kaip veikia „I²C“? Anksčiau minėjome, kad viena iš svarbiausių savybių yra įtampos nuokrypis, tai įmanoma, nes „I²C“naudoja atvirą kolektorių (dar vadinamą atviru nutekėjimu) tiek SDA, tiek SCL ryšio linijoms.

SCL yra laikrodžio signalas, sinchronizuoja duomenų perdavimą tarp I²C magistralės įrenginių ir jį generuoja kapitonas. Nors SDA neša duomenis, skirtus siųsti ar gauti iš jutiklių ar kitų prie magistralės prijungtų įrenginių.

Signalo išėjimas yra prijungtas prie žemės, o tai reiškia, kad kiekvienas įrenginys yra žemas. Norint atkurti aukštą signalą, abi linijos yra prijungtos prie teigiamos maitinimo įtampos per ištraukiamą rezistorių, kuris turi būti nutrauktas.

Naudodami „ZIO“modulius, visos mūsų pertraukimo plokštės turi reikiamą traukiamąjį rezistorių.

„I²C“laikosi pranešimo protokolo, kad galėtų perduoti pagrindinį kompiuterį su vergais. Dvi linijos (SCL ir SDA) yra bendros visuose I²C verguose, visi vergai autobuse klausosi pranešimo.

Pranešimų protokolas atitinka formatą, parodytą pridedamame paveikslėlyje:

Iš pirmo žvilgsnio tai gali atrodyti sudėtinga, tačiau turime šiek tiek gerų naujienų. Naudojant „Arduino IDE“, yra biblioteka „Wire.h“, kad būtų supaprastinti visi „I²C“pranešimų protokolo nustatymai.

Pradžios sąlyga sukuriama, kai duomenų linija (SDA) nukrenta žemai, o laikrodžio linija (SCL) vis dar yra aukšta. Kurdami projektą „Arduino“sąsajoje, mums tikrai nereikia jaudintis dėl pradžios sąlygos sukūrimo, jis bus inicijuotas naudojant konkrečią funkciją (Wire.beginTransmission (slaveAddress)).

Be to, ši funkcija taip pat inicijuoja perdavimą konkrečiu vergo adresu. Norėdami pasirinkti vergą bendrauti bendroje magistralėje, šeimininkas perduoda adresą vergui bendrauti. Nustačius, kad adresas perduotų ryšį su atitinkamu vergu, pranešimas atsižvelgia į skaitymo arba rašymo bitą, priklausomai nuo pasirinkto režimo.

Tepalas duoda atsakymą patvirtindamas (ACK arba NACK), o kiti pavarų įrenginiai, esantys magistralėje, atleidžia likusius duomenis, kol pranešimas bus baigtas ir magistralė bus nemokama. Po ACK perdavimas tęsiamas vergų vidinio adresavimo registro seka.

Kai duomenys siunčiami, perdavimo pranešimas baigiasi sustabdymo sąlyga. Norėdami baigti perdavimą, duomenų linija pasikeičia į aukštą, o laikrodžio linija išlieka aukšta.

3 žingsnis: I²C ir ZIO

I²C ir ZIO
I²C ir ZIO

Mes supratome, kad geriausia būtų suplanuoti visą aukščiau pateiktą informaciją pokalbyje tarp šeimininko (dar žinomas kaip Zuino, mūsų mikro) ir vergų (dar žinomas kaip ZIO pertraukimo lentos).

Šiame pagrindiniame pavyzdyje mes naudojame ZIO TOF atstumo jutiklį ir ZIO OLED ekraną. TOF pateikia informaciją apie atstumą, o „ZIO Oled“rodo duomenis. Naudojami komponentai ir prietaisai:

  • ZUINO M UNO - meistras
  • „ZIO OLED“ekranas - „Slave_01“
  • ZIO TOF atstumo jutiklis - vergas_02
  • „Qwiic“kabelis - lengvas prijungimas prie „I²C“įrenginių

Štai kaip paprasta prijungti plokštes viena prie kitos naudojant „Qwiic“, nereikia duonos lentos, papildomų kabelių arba ZUINO kaiščių. ZUINO serijinis laikrodis ir duomenų linija automatiškai prijungiama prie atstumo jutiklio ir OLED naudojant „Qwiic“jungtį. Kiti du kabeliai yra 3V3 ir GND.

Pirmiausia pažvelkime į reikalingą informaciją, kad galėtume bendrauti su šeimininku su vergais, kuriuos mums reikia žinoti unikaliais adresais.

Įrenginys: ZIO atstumo jutiklis

  • Dalies numeris: RFD77402
  • I2C adresas: 0x4C
  • Duomenų lapo nuoroda

Įrenginys: ZIO OLED ekranas

  • Dalies numeris: SSD1306
  • Adresas: 0x3C
  • Duomenų lapo nuoroda

Norėdami rasti unikalų pavaldžių įrenginių adresą, atidarykite pateiktą duomenų lapą. Atstumo jutiklio adresas nurodomas modulio sąsajos skyriuje. Kiekvienas jutiklis ar komponentas turi skirtingą duomenų lapą su skirtinga informacija. Kartais gali būti sudėtinga jį rasti 30 puslapių duomenų lape (užuomina: atidarykite paieškos įrankį PDF peržiūros priemonėje ir įveskite „adresas“arba „įrenginio ID“, kad galėtumėte greitai ieškoti).

Dabar, kai žinomas kiekvieno įrenginio unikalus adresas, norint skaityti/ rašyti duomenis, reikia nustatyti vidinio registro adresą (taip pat iš duomenų lapo). Pažvelgus į ZIO atstumo jutiklio duomenų lapą, adresas, skirtas atstumui gauti, atitinka 0x7FF.

Šiuo konkrečiu atveju mums tikrai nereikia šios informacijos, kad galėtume naudoti jutiklį, kaip tai jau daro biblioteka.

Kitas žingsnis - padėkite kodą. „ZUINO M UNO“yra suderinamas su „Arduino IDE“, o tai labai palengvina sąranką. Šiam projektui reikalingos bibliotekos:

  • Viela.h
  • Adafruit_GFX.h
  • Adafruit_SSD1306.h
  • SparkFun_RFD77402_Arduino_Library.h

„Wire.h“yra „arduino“biblioteka, dvi „Adafruit“bibliotekos naudojamos OLED, o paskutinės - atstumo jutikliui. Peržiūrėkite šią pamoką, kaip susieti *.zip bibliotekas su „Arduino IDE“.

Žvelgiant į kodą, pirmiausia reikia deklaruoti bibliotekas ir OLED adresą.

Sąrankoje () prasideda perdavimas ir rodomas atstumo jutiklio funkcijos tekstas.

Ciklas () matuoja atstumą, o OLED jį spausdina.

Patikrinkite šaltinio kodo pavyzdį „github“nuorodoje.

Naudoti abi pertraukimo plokštes yra gana paprasta visomis prasmėmis. Aparatinės įrangos pusėje „Qwiic“jungtis pagreitina aparatūros sąranką ir yra daug mažiau netvarkinga nei turint duonos lentą ir trumpiklius. O programinės įrangos atveju, naudojant atitinkamas I2C ryšio bibliotekas, jutiklį ir ekraną, kodas tampa daug paprastesnis.

4 žingsnis: koks yra maksimalus kabelio ilgis?

Maksimalus ilgis priklauso nuo traukimo varžų, naudojamų SDA ir SCL, ir kabelio talpos. Rezistoriai taip pat nustato magistralės greitį, kuo mažesnis magistralės greitis, tuo ilgesnė kabelio riba. Kabelio talpa riboja magistralėje esančių įrenginių skaičių ir kabelio ilgį. Įprastos programos riboja laido ilgį iki 2,5–3,5 m (9–12 pėdų), tačiau gali skirtis priklausomai nuo naudojamo kabelio. Pavyzdžiui, maksimalus ilgis I2C programose, kuriose naudojami ekranuoti 22 AWG vytos poros kabeliai, yra apie 1 m (3 pėdos) esant 100 kbaund, 10 m (30 pėdų) esant 10 kbaud.

Yra keletas svetainių, tokių kaip „mogami“ar „WolframAlpha“, kurios leidžia įvertinti kabelio ilgį.

5 žingsnis: Kaip prijungti kelis įrenginius toje pačioje magistralėje?

Kaip prijungti kelis įrenginius toje pačioje magistralėje?
Kaip prijungti kelis įrenginius toje pačioje magistralėje?
Kaip prijungti kelis įrenginius toje pačioje magistralėje?
Kaip prijungti kelis įrenginius toje pačioje magistralėje?

I2C yra nuoseklioji magistralė, kurioje visi įrenginiai yra prijungti prie bendros magistralės. Naudojant „Qwiic“jungtį, skirtingos pertraukimo plokštės gali būti sujungtos viena po kitos naudojant „Qwiic“jungtį. Kiekviena plokštė turi mažiausiai 2 „Qwiic“jungtis.

Mes sukūrėme skirtingas plokštes, kad išspręstume kai kuriuos „Qwiic“ir „I2C“apribojimus. „Zio Qwiic“adapterio plokštė naudojama prijungti per „Qwiic“įrenginius be „Qwiic“jungties, naudojant „Qwiic“prie duonos lentos vyriškojo antraštės kabelio. Šis paprastas triukas sukuria neribotas galimybes.

Norėdami prijungti įvairius įrenginius autobusų ar medžių tinkle, mes sukūrėme „Zio Qwiic Hub“.

Paskutinis, bet ne mažiau svarbus dalykas - „Zio Qwiic MUX“leidžia prijungti du ar daugiau įrenginių tuo pačiu adresu.

6 žingsnis: kas yra I2C nutraukimas?

I2C turi būti nutrauktas, todėl linija gali laisvai pridėti kitų įrenginių. Tai gali būti šiek tiek painu, nes nutraukimo terminas dažniausiai naudojamas apibūdinti magistralės traukimo rezistorius (kad būtų suteikta numatytoji būsena, šiuo atveju-tiekti srovę į grandinę). „Zuino“plokštėms rezistoriaus vertė yra 4,7 kΩ.

Jei nutraukimas bus praleistas, magistralėje nebus jokio ryšio- kapitonas negalės sukurti pradžios sąlygos, todėl pranešimas nebus perduotas vergams.

Norėdami gauti daugiau informacijos ir „Zio“galimybių, patikrinkite naujausius „Zio“produktus. Šio straipsnio tikslas yra paaiškinti I²C ryšio pagrindus ir kaip jis veikia su „Zio“ir „Qwiic“jungtimi. Sekite naujienas.

Rekomenduojamas: