Innehållsförteckning:

Vi presenterar I2C med Zio -moduler och Qwiic: 6 steg
Vi presenterar I2C med Zio -moduler och Qwiic: 6 steg

Video: Vi presenterar I2C med Zio -moduler och Qwiic: 6 steg

Video: Vi presenterar I2C med Zio -moduler och Qwiic: 6 steg
Video: Управление 32 серводвигателями с PCA9685 и ESP32 - V4 2024, November
Anonim
Vi presenterar I2C med Zio -moduler och Qwiic
Vi presenterar I2C med Zio -moduler och Qwiic

Robin Sharma sa: "Små dagliga förbättringar över tid leder till fantastiska resultat". Du kanske tänker, "Åh, ännu ett I2C -inlägg?". Tja, det finns säkert tusentals information när det gäller I2C. Men håll utkik, detta är inte bara ännu en I2C -artikel. Qwiic Connect System och Zio perifera breakout -kort är definitivt I²C -spelväxlare!

Introduktion

Om du bygger elektroniska projekt och gör fantastiska saker, kanske du har insett att när dina projekt blir större börjar din brödbräda se ut som en ormgrop (lite rörig eller?).

Dessutom, om du har flera projekt på gång, lägger du mycket tid på att byta trådar från projekt till projekt.

Vi är skapare, så vi förstår kampen. Vårt senaste bidrag till OHS -samhället är ett modulärt prototypsystem som kallas ZIO, som antar Qwiic -anslutningssystem. Qwiic är ett mycket bekvämt sätt att kommunicera ett programmerbart kretskort till sensorer, ställdon och brytkort via I²C.

Steg 1: Vad är I²C och varför vi gillar det

Vad är I²C och varför gillar vi det
Vad är I²C och varför gillar vi det

I²C är den mest använda multi-masterbussen, vilket innebär att olika chips kan anslutas till samma buss. Den används i många applikationer mellan en master och en slav eller flera master- och slavenheter. Från mikrokontroller, till smartphones, till industriella applikationer, särskilt för videoenheter som datorskärmar. Det kan enkelt implementeras i många elektroniska utföranden (och nyligen ännu enklare med Qwiic -kontakten).

Om vi måste beskriva I²C med två ord skulle vi förmodligen använda enkelhet och flexibilitet.

En av de största fördelarna med I²C jämfört med andra kommunikationsprotokoll är att det är ett tvåtrådigt gränssnitt, vilket innebär att det bara behöver två signalkablar, SDA (Serial Data Line) och SCL (Serial Clock Line). Det är kanske inte det snabbaste protokollet, men det är välkänt för att vara mycket flexibelt, vilket möjliggör flexibilitet i busspänningen.

En annan viktig egenskap som gör denna buss attraktiv är gemenskapen mellan herre och slav. Flera enheter kan anslutas till samma buss och det finns ingen anledning att ändra kablarna mellan enheterna eftersom varje enhet har en unik adress (befälhavaren väljer den enhet som ska kommunicera).

Steg 2: Låt oss ta en närmare titt

Låt oss ta en närmare titt
Låt oss ta en närmare titt
Låt oss ta en närmare titt
Låt oss ta en närmare titt
Låt oss ta en närmare titt
Låt oss ta en närmare titt
Låt oss ta en närmare titt
Låt oss ta en närmare titt

Så hur fungerar I²C? Tidigare nämnde vi att en av de mest betydelsefulla funktionerna är spänningsmängden, detta är möjligt eftersom I²C använder en öppen kollektor (även känd som öppen dränering) för både SDA- och SCL -kommunikationslinjer.

SCL är klocksignalen, synkroniserar dataöverföringen mellan enheterna på I²C -bussen och den genereras av mastern. Medan SDA bär data för att skicka eller ta emot från sensorerna eller andra enheter som är anslutna till bussen.

Utsignalen till signalen är ansluten till marken, vilket innebär att varje enhet är så låg. För att återställa signalen till hög, är båda ledningarna anslutna till en positiv matningsspänning genom ett uppdragningsmotstånd som ska avslutas.

Med ZIO -moduler har vi täckt dig, alla våra utbrottskort har det nödvändiga uppdragningsmotståndet.

I²C följer ett meddelandeprotokoll för att kommunicera mastern med slavenheter. De två linjerna (SCL och SDA) är vanliga inom alla I²C -slavar, alla slavar på bussen lyssnar på meddelandet.

Meddelandeprotokollet följer formatet som visas i bilden som bifogas:

Det kan se komplicerat ut vid första anblicken, men vi har lite goda nyheter. När du använder Arduino IDE finns biblioteket Wire.h, för att förenkla alla inställningar för I²C -meddelandeprotokollet.

Startförhållandet genereras när datalinjen (SDA) sjunker lågt medan klocklinjen (SCL) fortfarande är hög. När vi startar ett projekt på Arduino -gränssnittet behöver vi inte riktigt oroa oss för att generera startvillkoret, det kommer att initieras med en specifik funktion (Wire.beginTransmission (slaveAddress)).

Dessutom initierar denna funktion också överföringen med den specifika slavadressen. För att välja slaven att kommunicera på den delade bussen, fortsätter befälhavaren att skicka adressen till slaven för att kommunicera. Efter att adressen har ställts in för att kommunicera till motsvarande slav, följer meddelandet med antingen en läs- eller skrivbit beroende på vilket läge som valts.

Salven ger ett svar med en bekräftelse (ACK eller NACK), och andra slavanordningar på bussen rabatterar resten av data tills meddelandet är klart och bussen är ledig. Efter ACK fortsätter en sekvens av ett internt adresseringsregister för slavarna sändningen.

När data skickas slutar överföringsmeddelandet med ett stoppvillkor. För att avsluta överföringen ändras datalinjen till hög och klocklinjen förblir hög.

Steg 3: I²C och ZIO

I²C och ZIO
I²C och ZIO

Vi kom på att jag skulle vara bäst att rita all information ovan i en konversation mellan en mästare (aka Zuino, vår mikro) och slavar (aka ZIO breakout boards).

I detta grundläggande exempel använder vi avståndssensorn ZIO TOF och ZIO OLED -skärmen. TOF ger avståndsinformation medan ZIO Oled visar data. Komponenter och enheter som används:

  • ZUINO M UNO - Mästaren
  • ZIO OLED Display - Slave_01
  • ZIO TOF Avståndssensor - Slave_02
  • Qwiic -kabel - Enkel anslutning för I²C -enheter

Här är hur enkelt det är att ansluta brädorna till varandra med hjälp av Qwiic, ingen brödbräda behövs, ytterligare kablar nedladda eller ZUINO -stift. Den seriella klockan och dataraden för ZUINO ansluts automatiskt till avståndssensorn och OLED med hjälp av Qwiic -kontakten. De två andra kablarna är 3V3 och GND.

Låt oss först titta på den information som behövs, för att kommunicera mästaren med slavarna skulle vi behöva veta de unika adresserna.

Enhet: ZIO Distance Sensor

  • Artikelnummer: RFD77402
  • I2C -adress: 0x4C
  • Databladlänk

Enhet: ZIO OLED Display

  • Artikelnummer: SSD1306
  • Adress: 0x3C
  • Databladlänk

För att hitta den unika adressen för slavenheterna öppnar du det medföljande databladet. För avståndssensorn tillhandahålls adressen vid modulgränssnittet. Varje sensor eller komponent har ett annat datablad med olika information. Ibland kan det vara svårt att hitta det på ett 30 -sidigt datablad (tips: öppna sökverktyget i PDF -visaren och skriv "adress" eller "enhets -ID" för en snabb sökning).

Nu när den unika adressen för varje enhet är känd, för att läsa/ skriva data, måste den interna registeradressen identifieras (även från databladet). Ta en titt på ZIO Distance sensor datablad adressen för att få avståndet motsvarar 0x7FF.

I det här fallet behöver vi verkligen inte denna information för att använda sensorn, eftersom biblioteket redan gör det.

Nästa steg, lämna på koden. ZUINO M UNO är kompatibel med Arduino IDE, vilket gör installationen mycket enklare. De bibliotek som behövs för detta projekt är följande:

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

Wire.h är ett arduino -bibliotek, de två Adafruit -biblioteken används för OLED och de sista används för avståndssensorn. Läs den här självstudien om hur du länkar *.zip -bibliotek till Arduino IDE.

Om man tittar på koden måste biblioteken först deklareras samt adressen för OLED.

I installationen () börjar överföringen och text visas för avståndssensorns funktioner.

Slingan () mäter avståndet och OLED skriver ut det.

Kontrollera exempelkällkoden på github -länken.

Att använda båda breakout -brädorna är ganska enkelt i alla bemärkelser. På hårdvarusidan gör Qwiic -kontakten hårdvaruinstallationen snabbare och mycket mindre rörig än att ha en brödbräda och bygelkablar. Och för firmware, med hjälp av motsvarande bibliotek för I2C -kommunikationen, gör sensorn och displayen koden mycket enklare.

Steg 4: Vad är den maximala kabellängden?

Maxlängden beror på uppdragningsmotstånden som används för SDA och SCL och kabelkapacitansen. Motstånden bestämmer också busshastigheten, ju lägre busshastigheten är, desto längre är kabelgränsen. Kabelkapacitansen begränsar antalet enheter på bussen, liksom kabellängden. Typiska applikationer begränsar trådlängden till 2,5-3,5 m (9-12ft) men det finns variation beroende på vilken kabel som används. För referens är maximal längd på I2C -applikationer som använder skärmade 22 AWG -tvinnade parkablar cirka 1 m (3 fot) vid 100 kbaund, 10 m (30ft) vid 10 kbaud.

Det finns några webbplatser som mogami eller WolframAlpha som gör det möjligt att uppskatta kabellängden.

Steg 5: Hur ansluter jag flera enheter på samma buss?

Hur ansluter jag flera enheter på samma buss?
Hur ansluter jag flera enheter på samma buss?
Hur ansluter jag flera enheter på samma buss?
Hur ansluter jag flera enheter på samma buss?

I2C är en seriebuss, där alla enheter är anslutna till en delad buss. Med Qwiic -kontakt kan de olika breakout -korten anslutas efter varandra med Qwiic -kontakten. Varje kort har minst 2 Qwiic -kontakter.

Vi skapade olika kort för att lösa några av Qwiic- och I2C -begränsningarna. Zio Qwiic -adapterkortet används för att ansluta via Qwiic -enheter utan Qwiic -kontakt, med hjälp av Qwiic -kabel till hanbräde. Detta enkla trick skapar obegränsade möjligheter.

För att ansluta olika enheter på ett buss- eller trädnätverk kom vi på Zio Qwiic Hub.

Sist men inte minst tillåter Zio Qwiic MUX anslutning av två eller flera enheter med samma adress.

Steg 6: Vad är I2C -uppsägningen?

I2C krävs för att avsluta, så linjen är gratis att lägga till andra enheter. Detta kan vara lite förvirrande, eftersom termineringsperioden vanligtvis används för att beskriva bussens uppdragningsmotstånd (för att ge ett standardläge, i detta fall för att mata ström till kretsen). För Zuino -brädor är motståndsvärdet 4,7kΩ.

Om avslutningen utelämnas kommer det inte att finnas någon kommunikation alls på bussen- befälhavaren skulle inte kunna generera startvillkoret, så meddelandet kommer inte att överföras till slavarna.

För mer information och Zio -funktioner, kolla de senaste Zio -produkterna. Målet med den här artikeln är att förklara grunderna för I²C -kommunikation och hur det fungerar med Zio- och Qwiic -anslutningen. Håll ögonen öppna för fler uppdateringar.

Rekommenderad: