Indholdsfortegnelse:

Introduktion til I2C med Zio -moduler og Qwiic: 6 trin
Introduktion til I2C med Zio -moduler og Qwiic: 6 trin

Video: Introduktion til I2C med Zio -moduler og Qwiic: 6 trin

Video: Introduktion til I2C med Zio -moduler og Qwiic: 6 trin
Video: Урок 96: Датчик атмосферного давления, температуры, приблизительной высоты BMP390 с ЖК-дисплеем 2024, Juli
Anonim
Introduktion til I2C med Zio -moduler og Qwiic
Introduktion til I2C med Zio -moduler og Qwiic

Robin Sharma sagde: "Små daglige forbedringer over tid fører til fantastiske resultater". Du tænker måske, 'Åh, endnu et I2C -indlæg?'. Nå, der er helt sikkert tusindvis af oplysninger, når det kommer til I2C. Men følg med, dette er ikke bare endnu en I2C -artikel. Qwiic Connect System og Zio perifere breakout boards er bestemt I²C game changers!

Introduktion

Hvis du bygger elektroniske projekter og laver fantastiske ting, har du måske indset, at efterhånden som dine projekter bliver større, begynder dit brødbræt at ligne en slangegrop (lidt rodet ikke?).

Hvis du har flere projekter i gang, bruger du desuden en masse tid på at skifte ledninger fra projekt til projekt.

Vi er beslutningstagere, så vi forstår kampen. Vores seneste bidrag til OHS -samfundet er et modulært prototypesystem kaldet ZIO, der vedtager Qwiic -forbindelsessystem. Qwiic er en meget praktisk måde at kommunikere et programmerbart printkort til sensorer, aktuatorer og breakout -kort via I²C.

Trin 1: Hvad er I²C og hvorfor kan vi lide det

Hvad er I²C og hvorfor kan vi lide det
Hvad er I²C og hvorfor kan vi lide det

I²C er den mest udbredte multi-master bus, hvilket betyder, at forskellige chips kan forbindes til den samme bus. Det bruges på tværs af mange applikationer mellem en master og slave eller flere master- og slaveenheder. Fra mikrokontrollere til smartphones til industrielle applikationer, især til videoenheder som computerskærme. Det kan let implementeres i mange elektroniske designs (og for nylig endnu lettere med Qwiic -stikket).

Hvis vi skulle beskrive I²C med to ord, ville vi sandsynligvis bruge enkelhed og fleksibilitet.

En af de største fordele ved I²C frem for andre kommunikationsprotokoller er, at det er et to -leder interface, hvilket betyder, at det kun har brug for to signaltråde, SDA (Serial Data Line) og SCL (Serial Clock Line). Det er måske ikke den hurtigste protokol, men det er velkendt for at være meget fleksibelt, hvilket giver fleksibilitet i busspænding.

En anden væsentlig egenskab, der gør denne bus attraktiv, er fællesskabet mellem herre og slave. Flere enheder kan tilsluttes den samme bus, og der er ikke behov for at ændre ledninger mellem enheder, da hver enhed har en unik adresse (mesteren vælger den enhed, der skal kommunikere).

Trin 2: Lad os se nærmere på

Lad os se nærmere på
Lad os se nærmere på
Lad os se nærmere på
Lad os se nærmere på
Lad os se nærmere på
Lad os se nærmere på
Lad os se nærmere på
Lad os se nærmere på

Så hvordan fungerer²C? Tidligere nævnte vi, at en af de mest betydningsfulde funktioner er spændingsgodtgørelsen, dette er muligt, da I²C bruger en åben kollektor (også kendt som åbent afløb) til både SDA- og SCL -kommunikationslinjer.

SCL er urets signal, synkroniserer dataoverførslen mellem enhederne på I²C -bussen, og den genereres af masteren. Mens SDA bærer dataene til at sende eller modtage fra sensorerne eller andre enheder, der er forbundet til bussen.

Outputtet til signalet er forbundet til jorden, hvilket betyder, at hver enhed pålægges så lav. For at gendanne signalet til højt forbindes begge linjer til en positiv forsyningsspænding gennem en pull -up -modstand, der skal afsluttes.

Med ZIO moduler fik vi dig dækket, alle vores breakout boards har den nødvendige pull up modstand.

I²C følger en meddelelsesprotokol for at kommunikere masteren med slaveenheder. De to linjer (SCL og SDA) er almindelige inden for alle I²C slaver, alle slaver på bussen lytter til beskeden.

Meddelelsesprotokollen følger det format, der er vist på billedet vedhæftet:

Det kan se kompliceret ud ved første øjekast, men vi har lidt gode nyheder. Når du bruger Arduino IDE er der biblioteket Wire.h, for at forenkle alt opsætning til I²C -meddelelsesprotokollen.

Startbetingelsen genereres, når datalinjen (SDA) falder lavt, mens urlinjen (SCL) stadig er høj. Når vi opretter et projekt på Arduino -grænsefladen, behøver vi ikke rigtig bekymre os om at generere startbetingelsen, det vil blive startet med en bestemt funktion (Wire.beginTransmission (slaveAddress)).

Derudover starter denne funktion også transmissionen med den specifikke slave -adresse. For at vælge den slave, der skal kommunikere på den delte bus, fortsætter mesteren med at videregive adressen til slaven for at kommunikere. Efter at adressen er indstillet til at kommunikere til den tilsvarende slave, følger meddelelsen med enten en læse- eller skrivebit, afhængigt af den valgte tilstand.

Salven giver et svar med en kvittering (ACK eller NACK), og andre slaveenheder på bussen rabatterer resten af dataene, indtil meddelelsen er fuldført, og bussen er gratis. Efter ACK’en fortsætter en sekvens af et internt adresseregister for slaverne transmissionen.

Når dataene sendes, slutter overførselsmeddelelsen med en stopbetingelse. For at afslutte transmissionen skifter datalinjen til høj, og urlinjen forbliver høj.

Trin 3: I²C og ZIO

I²C og ZIO
I²C og ZIO

Vi fandt ud af, at jeg ville være bedst at tegne alle oplysninger ovenfor i en samtale mellem en mester (også kendt som Zuino, vores mikro) og slaver (også kendt som et ZIO -udbrudstavle).

I dette grundlæggende eksempel bruger vi ZIO TOF -afstandssensoren og ZIO OLED -displayet. TOF'en giver afstandsoplysninger, mens ZIO Oled viser dataene. De anvendte komponenter og enheder:

  • ZUINO M UNO - mesteren
  • ZIO OLED Display - Slave_01
  • ZIO TOF Distance Sensor - Slave_02
  • Qwiic -kabel - Nem tilslutning til I²C -enheder

Her er hvor let det er at forbinde brædderne til hinanden ved hjælp af Qwiic, ingen brødbræt nødvendig, yderligere kabler nedladet eller ZUINO -stifter. Den serielle ur og datalinje i ZUINO forbindes automatisk til afstandssensoren og OLED ved hjælp af Qwiic -stikket. De to andre kabler er 3V3 og GND.

Lad os først se på de nødvendige oplysninger for at kommunikere mesteren med slaverne, vi skulle bruge de unikke adresser.

Enhed: ZIO Distance Sensor

  • Varenummer: RFD77402
  • I2C -adresse: 0x4C
  • Link til datablad

Enhed: ZIO OLED Display

  • Varenummer: SSD1306
  • Adresse: 0x3C
  • Link til datablad

For at finde den unikke adresse til slaveenheder skal du åbne det medfølgende datablad. For afstandssensoren angives adressen på modulgrænsefladesektionen. Hver sensor eller komponent har et andet datablad med forskellige oplysninger. Nogle gange kan det være udfordrende at finde det på et 30 -siders datablad (tip: åbn søgefunktionen i PDF -fremviseren, og skriv "adresse" eller "enheds -ID" for en hurtig søgning).

Nu hvor den unikke adresse for hver enhed er kendt, for at læse/ skrive data, skal den interne registeradresse identificeres (også fra databladet). Efter at have kigget på ZIO Distance sensor databladet adressen for at få afstanden svarer til 0x7FF.

I dette særlige tilfælde har vi virkelig ikke brug for disse oplysninger til brug af sensoren, som biblioteket allerede gør det.

Næste trin, hænder på koden. ZUINO M UNO er kompatibel med Arduino IDE, hvilket gør opsætningen meget lettere. De nødvendige biblioteker til dette projekt er følgende:

  • Wire.h
  • Adafruit_GFX.h
  • Adafruit_SSD1306.h
  • SparkFun_RFD77402_Arduino_Library.h

Wire.h er et arduino -bibliotek, de to Adafruit -biblioteker bruges til OLED, og de sidste bruges til Distance -sensoren. Tjek denne vejledning om, hvordan du linker *.zip -biblioteker til Arduino IDE.

Når man ser på koden, skal bibliotekerne først deklareres samt adressen til OLED.

I opsætningen () starter transmissionen, og der vises tekst til afstandssensorens funktionalitet.

Sløjfen () tager målinger på afstanden, og OLED udskriver den.

Kontroller eksempelkildekoden på github -link.

Brug af begge breakout boards er ret let i alle forstand. På hardwaresiden gør Qwiic -stikket hardwareopsætningen hurtigere og meget mindre rodet end at have et brødbræt og jumperledninger. Og for firmwaren gør koden meget mere enkel ved hjælp af de tilsvarende biblioteker til I2C -kommunikationen, sensoren og displayet.

Trin 4: Hvad er den maksimale kabellængde?

Den maksimale længde afhænger af pull -up -modstandene, der bruges til SDA og SCL, og kabelkapacitansen. Modstandene bestemmer også bushastigheden, jo lavere bushastigheden er, jo længere er kabelgrænsen. Kablets kapacitans begrænser antallet af enheder på bussen samt kabellængden. Typiske applikationer begrænser ledningslængden til 2,5-3,5 m (9-12 fod), men der er variation afhængigt af det anvendte kabel. Til reference er maksimal længde på I2C -applikationer, der bruger afskærmede 22 AWG -snoede kabler, ca. 1 m (3 ft) ved 100 kbaund, 10 m (30ft) ved 10kbaud.

Der er nogle websteder som mogami eller WolframAlpha, der gør det muligt at estimere kabellængden.

Trin 5: Sådan tilsluttes flere enheder på den samme bus?

Sådan tilsluttes flere enheder på den samme bus?
Sådan tilsluttes flere enheder på den samme bus?
Sådan tilsluttes flere enheder på den samme bus?
Sådan tilsluttes flere enheder på den samme bus?

I2C er en seriel bus, hvor alle enheder er forbundet til en delt bus. Med Qwiic -stik kan de forskellige breakout -kort tilsluttes efter hinanden ved hjælp af Qwiic -stikket. Hvert kort har mindst 2 Qwiic -stik.

Vi skabte forskellige tavler for at løse nogle af Qwiic- og I2C -begrænsningerne. Zio Qwiic -adapterkort bruges til at tilslutte via Qwiic -enheder uden et Qwiic -stik, ved hjælp af Qwiic til headerkabel til brødbræt. Dette enkle trick skaber ubegrænsede muligheder.

For at forbinde forskellige enheder på et bus- eller trænetværk fandt vi på Zio Qwiic Hub.

Sidst men ikke mindst tillader Zio Qwiic MUX tilslutning af to eller flere enheder ved hjælp af den samme adresse.

Trin 6: Hvad er I2C -opsigelsen?

I2C er påkrævet for at afslutte, så linjen er gratis at tilføje andre enheder. Dette kan være lidt forvirrende, da termineringsbetegnelsen almindeligvis bruges til at beskrive bus-pull-up-modstandene (for at give en standardtilstand, i dette tilfælde for at levere strøm til kredsløbet). For Zuino -plader er modstandsværdien 4,7kΩ.

Hvis afslutningen udelades, vil der slet ikke være nogen kommunikation på bussen- mesteren ville ikke være i stand til at generere startbetingelsen, så meddelelsen vil ikke blive overført til slaverne.

For yderligere information og Zio -funktioner, tjek de nyeste Zio -produkter. Målet med denne artikel er at forklare grundlæggende I²C kommunikation, og hvordan det fungerer med Zio og Qwiic -stik. Følg med for flere opdateringer.

Anbefalede: