Innholdsfortegnelse:

Vi introduserer I2C med Zio -moduler og Qwiic: 6 trinn
Vi introduserer I2C med Zio -moduler og Qwiic: 6 trinn

Video: Vi introduserer I2C med Zio -moduler og Qwiic: 6 trinn

Video: Vi introduserer I2C med Zio -moduler og Qwiic: 6 trinn
Video: How to use TM1637 4 digits seven segment display with Arduino 2024, Juli
Anonim
Vi presenterer I2C med Zio -moduler og Qwiic
Vi presenterer I2C med Zio -moduler og Qwiic

Robin Sharma sa: "Små daglige forbedringer over tid fører til fantastiske resultater". Du tenker kanskje, 'Aw, et annet I2C -innlegg?'. Vel, det er sikkert tusenvis av informasjon når det gjelder I2C. Men følg med, dette er ikke bare en annen I2C -artikkel. Qwiic Connect System og Zio perifere breakout boards er definitivt I²C game changers!

Introduksjon

Hvis du bygger elektroniske prosjekter og gjør fantastiske ting, har du kanskje innsett at når prosjektene dine blir større, begynner brødbrettet å se ut som en slangegrop (litt rotete ikke sant?).

I tillegg, hvis du har flere prosjekter på gang, bruker du mye tid på å bytte ledninger fra prosjekt til prosjekt.

Vi er skapere, så vi forstår kampen. Vårt siste bidrag til OHS -samfunnet er et modulært prototypesystem kalt ZIO, som tar i bruk Qwiic -tilkoblingssystem. Qwiic er en veldig praktisk måte å kommunisere et programmerbart kretskort til sensorer, aktuatorer og breakout -kort via I²C.

Trinn 1: Hva er I²C og hvorfor vi liker det

Hva er I²C og hvorfor vi liker det
Hva er I²C og hvorfor vi liker det

I²C er den mest brukte multimasterbussen, noe som betyr at forskjellige sjetonger kan kobles til den samme bussen. Den brukes på tvers av mange applikasjoner mellom en master og slave eller flere master- og slaveenheter. Fra mikrokontrollere, til smarttelefoner, til industrielle applikasjoner, spesielt for videoenheter som dataskjermer. Det kan enkelt implementeres i mange elektroniske design (og nylig enda enklere med Qwiic -kontakten).

Hvis vi måtte beskrive I²C med to ord, ville vi sannsynligvis brukt enkelhet og fleksibilitet.

En av de største fordelene med I²C fremfor andre kommunikasjonsprotokoller er at det er et to -leders grensesnitt, noe som betyr at det bare trenger to signalkabler, SDA (Serial Data Line) og SCL (Serial Clock Line). Det er kanskje ikke den raskeste protokollen, men den er kjent for å være veldig fleksibel, noe som gir fleksibilitet i busspenning.

En annen viktig egenskap som gjør denne bussen attraktiv er fellesskapet mellom herre og slave. Flere enheter kan kobles til den samme bussen, og det er ikke nødvendig å endre ledninger mellom enheter, siden hver enhet har en unik adresse (master velger enheten som skal kommuniseres).

Trinn 2: La oss se nærmere på

La oss se nærmere på
La oss se nærmere på
La oss se nærmere på
La oss se nærmere på
La oss se nærmere på
La oss se nærmere på
La oss se nærmere på
La oss se nærmere på

Så hvordan fungerer ²C? Tidligere nevnte vi at en av de viktigste funksjonene er spenningsavgiften, dette er mulig ettersom I²C bruker en åpen kollektor (også kjent som åpent avløp) for både SDA- og SCL -kommunikasjonslinjer.

SCL er klokkesignalet, synkroniserer dataoverføringen mellom enhetene på I²C -bussen og den genereres av masteren. Mens SDA bærer dataene som skal sendes eller mottas fra sensorene eller andre enheter som er koblet til bussen.

Utgangen til signalet er koblet til bakken, noe som betyr at hver enhet er pålagt som lav. For å gjenopprette signalet til høyt, er begge linjene koblet til en positiv forsyningsspenning gjennom en trekkmotstand som skal avsluttes.

Med ZIO -moduler har vi dekket deg, alle våre breakout -boards har den nødvendige opptrekksmotstanden.

I²C følger en meldingsprotokoll for å kommunisere masteren med slaveenheter. De to linjene (SCL og SDA) er vanlige i alle I²C -slaver, alle slaver på bussen lytter til meldingen.

Meldingsprotokollen følger formatet som vises på bildet vedlagt:

Det kan se komplisert ut ved første øyekast, men vi har litt gode nyheter. Når du bruker Arduino IDE er det biblioteket Wire.h, for å forenkle alt som er konfigurert for I²C -meldingsprotokollen.

Startbetingelsen genereres når datalinjen (SDA) faller lavt mens klokkelinjen (SCL) fremdeles er høy. Når vi setter opp et prosjekt på Arduino -grensesnittet, trenger vi egentlig ikke bekymre oss for å generere startbetingelsen, det vil bli startet med en bestemt funksjon (Wire.beginTransmission (slaveAddress)).

I tillegg starter denne funksjonen også overføringen med den spesifikke slaveadressen. For å velge slaven som skal kommunisere på den delte bussen, fortsetter mesteren å sende adressen til slaven for å kommunisere. Etter at adressen er satt til å kommunisere til den tilsvarende slave, følger meldingen enten med en lese- eller skrivebit, avhengig av valgt modus.

Salven gir et svar med en bekreftelse (ACK eller NACK), og andre slaveenheter på bussen rabatterer resten av dataene til meldingen er fullført og bussen er gratis. Etter ACK fortsetter en sekvens av et internt adresseregister for slaver overføringen.

Når dataene sendes, avsluttes overføringsmeldingen med en stopptilstand. For å avslutte overføringen endres datalinjen til høy, og klokkelinjen forblir høy.

Trinn 3: I²C og ZIO

I²C og ZIO
I²C og ZIO

Vi fant ut at jeg ville være best å tegne all informasjon ovenfor i en samtale mellom en mester (aka Zuino, vår mikro) og slaver (aka ZIO breakout boards).

I dette grunneksemplet bruker vi ZIO TOF avstandssensoren og ZIO OLED -skjermen. TOF gir avstandsinformasjon mens ZIO Oled viser dataene. Komponentene og enhetene som brukes:

  • ZUINO M UNO - Mesteren
  • ZIO OLED -skjerm - Slave_01
  • ZIO TOF Avstandssensor - Slave_02
  • Qwiic -kabel - Enkel tilkobling for I²C -enheter

Her er hvor enkelt det er å koble brettene til hverandre ved hjelp av Qwiic, ingen brødbrett nødvendig, ekstra kabler nedladet eller ZUINO -pinner. Den serielle klokken og datalinjen til ZUINO kobles automatisk til avstandssensoren og OLED ved hjelp av Qwiic -kontakten. De to andre kablene er 3V3 og GND.

La oss først se på nødvendig informasjon for å kommunisere mesteren med slaver vi trenger for å kjenne de unike adressene.

Enhet: ZIO Distance Sensor

  • Delenummer: RFD77402
  • I2C -adresse: 0x4C
  • Databladkobling

Enhet: ZIO OLED -skjerm

  • Delenummer: SSD1306
  • Adresse: 0x3C
  • Databladkobling

For å finne den unike adressen til slaveenhetene, åpne databladet som følger med. For avstandssensoren er adressen gitt ved modulgrensesnittet. Hver sensor eller komponent har et annet datablad med forskjellig informasjon. Noen ganger kan det være utfordrende å finne det på et 30 -siders datablad (hint: åpne søkeverktøyet i PDF -visningen og skriv "adresse" eller "enhets -ID" for et raskt søk).

Nå som den unike adressen for hver enhet er kjent, for å lese/ skrive data, må den interne registeradressen identifiseres (også fra databladet). Når du ser på databladet for ZIO Distance sensor -adressen, tilsvarer adressen for å få avstanden 0x7FF.

I dette spesielle tilfellet trenger vi virkelig ikke denne informasjonen for å bruke sensoren slik biblioteket allerede gjør det.

Neste trinn, hend på koden. ZUINO M UNO er kompatibel med Arduino IDE, noe som gjør oppsettet mye enklere. Bibliotekene som trengs for dette prosjektet 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 -bibliotekene brukes til OLED og de siste brukes til avstandssensoren. Sjekk denne opplæringen om hvordan du kobler *.zip -biblioteker til Arduino IDE.

Når man ser på koden, må bibliotekene først deklareres så vel som adressen til OLED.

I oppsettet () starter overføringen og tekst vises for avstandssensorfunksjonaliteten.

Sløyfen () tar målinger på avstanden og OLED -en skriver den ut.

Sjekk eksempelkildekoden på github -lenken.

Å bruke begge breakout boards er ganske enkelt i alle forstand. På maskinvaresiden gjør Qwiic -kontakten maskinvareoppsettet raskere og mye mindre rotete enn å ha et brødbrett og jumperkabler. Og for fastvaren, ved å bruke de tilsvarende bibliotekene for I2C -kommunikasjonen, gjør sensoren og displayet koden mye enklere.

Trinn 4: Hva er maksimal kabellengde?

Maksimal lengde avhenger av opptrekksmotstandene som brukes for SDA og SCL og kabelkapasitansen. Motstandene bestemmer også busshastigheten, jo lavere busshastigheten er, jo lengre er kabelgrensen. Kabelkapasitansen begrenser antall enheter på bussen, samt kabellengden. Typiske applikasjoner begrenser ledningslengden til 2,5-3,5 m (9-12 fot), men det er variasjon avhengig av kabelen som brukes. Til referanse er maksimal lengde på I2C -applikasjoner som bruker skjermede 22 AWG -snoede kabler ca. 1 m (3 ft) ved 100 kbaund, 10 m (30ft) ved 10kbaud.

Det er noen nettsteder som mogami eller WolframAlpha som gjør det mulig å estimere kabellengden.

Trinn 5: Hvordan koble til flere enheter på samme buss?

Hvordan koble til flere enheter på samme buss?
Hvordan koble til flere enheter på samme buss?
Hvordan koble til flere enheter på samme buss?
Hvordan koble til flere enheter på samme buss?

I2C er en seriell buss, der alle enhetene er koblet til en delt buss. Med Qwiic -kontakt kan de forskjellige breakout -kortene kobles etter hverandre ved hjelp av Qwiic -kontakten. Hvert kort har minst 2 Qwiic -kontakter.

Vi opprettet forskjellige tavler for å løse noen av Qwiic- og I2C -begrensningene. Zio Qwiic -adapterkort brukes til å koble til via Qwiic -enheter uten Qwiic -kontakt, ved hjelp av Qwiic til headboard -kabel til mannlige brødbrett. Dette enkle trikset skaper ubegrensede muligheter.

For å koble til forskjellige enheter på et buss- eller trenettverk fant vi på Zio Qwiic Hub.

Sist, men ikke minst, tillater Zio Qwiic MUX tilkobling av to eller flere enheter som bruker samme adresse.

Trinn 6: Hva er I2C -avslutningen?

I2C kreves for å avslutte, så linjen er gratis å legge til andre enheter. Dette kan være litt forvirrende, da termineringsbegrepet ofte brukes til å beskrive bussopptrekkmotstandene (for å gi en standardtilstand, i dette tilfellet for å levere strøm til kretsen). For Zuino -plater er motstandsverdien 4,7kΩ.

Hvis avslutningen utelates, vil det ikke være noen kommunikasjon i det hele tatt på bussen- mesteren ville ikke kunne generere startbetingelsen, så meldingen vil ikke bli overført til slaver.

For mer informasjon og Zio -funksjoner, sjekk de nyeste Zio -produktene. Målet med denne artikkelen er å forklare grunnleggende I²C kommunikasjon og hvordan det fungerer med Zio og Qwiic -kontakten. Følg med for flere oppdateringer.

Anbefalt: