Inhoudsopgave:

Introductie van I2C met Zio-modules en Qwiic: 6 stappen
Introductie van I2C met Zio-modules en Qwiic: 6 stappen

Video: Introductie van I2C met Zio-modules en Qwiic: 6 stappen

Video: Introductie van I2C met Zio-modules en Qwiic: 6 stappen
Video: Введение в LCD2004 ЖК-дисплей с модулем I2C для Arduino 2024, Juli-
Anonim
Introductie van I2C met Zio-modules en Qwiic
Introductie van I2C met Zio-modules en Qwiic

Robin Sharma zei: 'Kleine dagelijkse verbeteringen in de loop van de tijd leiden tot verbluffende resultaten'. Je denkt misschien: 'Aw, nog een I2C-post?'. Welnu, er is zeker duizenden informatie als het gaat om I2C. Maar houd ons in de gaten, dit is niet zomaar een I2C-artikel. Qwiic Connect-systeem en Zio-perifere breakout-borden zijn absoluut I²C-game-wisselaars!

Invoering

Als je elektronische projecten bouwt en geweldige dingen doet, heb je je misschien gerealiseerd dat naarmate je projecten groter worden, je breadboard eruit begint te zien als een slangenkuil (een beetje rommelig toch?).

Als je meerdere projecten hebt, ben je bovendien veel tijd kwijt met het wisselen van draden van project naar project.

Wij zijn makers, dus we begrijpen de strijd. Onze meest recente bijdrage aan de OHS-gemeenschap is een modulair prototyping-systeem genaamd ZIO, dat gebruik maakt van het Qwiic-verbindingssysteem. Qwiic is een zeer handige manier om een programmeerbare printplaat via I²C te communiceren met sensoren, actuatoren en breakoutboards.

Stap 1: Wat is I²C en waarom vinden we het leuk?

Wat is I²C en waarom vinden we het leuk
Wat is I²C en waarom vinden we het leuk

I²C is de meest gebruikte multi-master bus, wat betekent dat er verschillende chips op dezelfde bus kunnen worden aangesloten. Het wordt gebruikt in veel toepassingen tussen een master en slave of meerdere master- en slave-apparaten. Van microcontrollers tot smartphones tot industriële toepassingen, vooral voor videoapparaten zoals computermonitoren. Het kan gemakkelijk worden geïmplementeerd in veel elektronische ontwerpen (en sinds kort zelfs nog eenvoudiger met de Qwiic-connector).

Als we I²C in twee woorden zouden moeten beschrijven, zouden we waarschijnlijk eenvoud en flexibiliteit gebruiken.

Een van de grootste voordelen van I²C ten opzichte van andere communicatieprotocollen is dat het een interface met twee draden is, wat betekent dat er slechts twee signaaldraden nodig zijn, SDA (Serial Data Line) en SCL (Serial Clock Line). Het is misschien niet het snelste protocol, maar het staat bekend als zeer flexibel, waardoor flexibiliteit in busspanning mogelijk is.

Een ander belangrijk kenmerk dat deze bus aantrekkelijk maakt, is de omgang tussen meester en slaaf. Er kunnen meerdere apparaten op dezelfde bus worden aangesloten en het is niet nodig om de bedrading tussen apparaten te wijzigen, aangezien elk apparaat een uniek adres heeft (de master selecteert het apparaat om te communiceren).

Stap 2: Laten we eens nader kijken

Laten we dat eens van dichterbij bekijken
Laten we dat eens van dichterbij bekijken
Laten we dat eens van dichterbij bekijken
Laten we dat eens van dichterbij bekijken
Laten we dat eens van dichterbij bekijken
Laten we dat eens van dichterbij bekijken
Laten we dat eens van dichterbij bekijken
Laten we dat eens van dichterbij bekijken

Dus, hoe werkt I²C? Eerder vermeldden we dat een van de belangrijkste kenmerken de spanningstoeslag is, dit is mogelijk omdat I²C een open collector (ook bekend als open drain) gebruikt voor zowel SDA- als SCL-communicatielijnen.

SCL is het kloksignaal, synchroniseert de gegevensoverdracht tussen de apparaten op de I²C-bus en wordt gegenereerd door de master. Terwijl SDA de gegevens vervoert om te verzenden of te ontvangen van de sensoren of andere apparaten die op de bus zijn aangesloten.

De uitgang naar het signaal is verbonden met de aarde, wat betekent dat elk apparaat als laag wordt opgelegd. Om het signaal naar hoog te herstellen, worden beide lijnen verbonden met een positieve voedingsspanning via een af te sluiten pull-up-weerstand.

Met ZIO-modules hebben we je gedekt, al onze breakout-borden bevatten de nodige pull-up-weerstand.

I²C volgt een berichtenprotocol om de master met slave-apparaten te communiceren. De twee lijnen (SCL en SDA) zijn gemeenschappelijk binnen alle I²C-slaves, alle slaves op de bus luisteren naar het bericht.

Het berichtenprotocol volgt het formaat dat wordt weergegeven in de bijgevoegde afbeelding:

Het ziet er op het eerste gezicht misschien ingewikkeld uit, maar we hebben goed nieuws. Bij gebruik van Arduino IDE is er de bibliotheek Wire.h, om alle instellingen voor het I²C-berichtprotocol te vereenvoudigen.

De startconditie wordt gegenereerd wanneer de datalijn (SDA) laag wordt terwijl de kloklijn (SCL) nog steeds hoog is. Bij het opzetten van een project op de Arduino-interface hoeven we ons geen zorgen te maken over het genereren van de startvoorwaarde, deze wordt gestart met een specifieke functie (Wire.beginTransmission(slaveAddress)).

Bovendien initieert deze functie ook de verzending met het specifieke slave-adres. Om de slave te kiezen om op de gedeelde bus te communiceren, gaat de master verder met het doorgeven van het adres aan de slave om te communiceren. Nadat het adres is ingesteld om te communiceren met de corresponderende slave, volgt het bericht met een lees- of schrijfbit, afhankelijk van de geselecteerde modus.

De zalf geeft een antwoord met een bevestiging (ACK of NACK), en andere slave-apparaten op de bus verdisconteren de rest van de gegevens totdat het bericht compleet is en de bus vrij is. Na de ACK zet een reeks van een intern adresseringsregister van de slaves de verzending voort.

Wanneer de gegevens zijn verzonden, eindigt het overdrachtsbericht met een stopvoorwaarde. Om de transmissie te beëindigen verandert de datalijn naar hoog en blijft de kloklijn hoog.

Stap 3: I²C en ZIO

I²C en ZIO
I²C en ZIO

We kwamen erachter dat het het beste zou zijn om alle bovenstaande informatie te blauwdrukken in een gesprek tussen een meester (ook bekend als Zuino, onze micro) en slaven (ook bekend als ZIO-breakoutboards).

In dit basisvoorbeeld gebruiken we de ZIO TOF-afstandssensor en het ZIO OLED-display. De TOF geeft de afstandsinformatie terwijl de ZIO Oled de gegevens weergeeft. De gebruikte componenten en apparaten:

  • ZUINO M UNO - de meester
  • ZIO OLED-display - Slave_01
  • ZIO TOF afstandssensor - Slave_02
  • Qwiic-kabel - Eenvoudige aansluiting voor I²C-apparaten

Zo eenvoudig is het om de boards met elkaar te verbinden met Qwiic, geen breadboard nodig, extra kabels of ZUINO-pinnen. De seriële klok- en datalijn van de ZUINO wordt automatisch verbonden met de afstandssensor en OLED via de Qwiic-connector. De twee andere kabels zijn de 3V3 en GND.

Laten we eerst eens kijken naar de benodigde informatie, om de master met de slaves te kunnen communiceren, zouden we de unieke adressen moeten weten.

Apparaat: ZIO Afstandssensor

  • Onderdeelnummer: RFD77402
  • I2C-adres: 0x4C
  • Gegevensbladkoppeling

Apparaat: ZIO OLED-display

  • Onderdeelnummer: SSD1306
  • Adres: 0x3C
  • Gegevensbladkoppeling

Open de meegeleverde datasheet om het unieke adres voor de slave-apparaten te vinden. Voor de Afstandssensor wordt het adres vermeld in het gedeelte Module Interface. Elke sensor of component heeft een andere datasheet met andere informatie. Soms kan het een uitdaging zijn om het te vinden op een datasheet van 30 pagina's (hint: open de zoekfunctie in de PDF-viewer en typ "adres" of "apparaat-ID" voor een snelle zoekopdracht).

Nu het unieke adres van elk apparaat bekend is, om gegevens te kunnen lezen/schrijven, moet het interne registeradres worden geïdentificeerd (ook uit de datasheet). Als je de ZIO-gegevensblad van de afstandssensor bekijkt, komt het adres om de afstand te krijgen overeen met 0x7FF.

In dit specifieke geval hebben we deze informatie echt niet nodig om de sensor te gebruiken, zoals de bibliotheek dat al doet.

Volgende stap, overhandig de code. ZUINO M UNO is compatibel met Arduino IDE, wat de installatie een stuk eenvoudiger maakt. De bibliotheken die nodig zijn voor dit project zijn de volgende:

  • Draad.h
  • Adafruit_GFX.h
  • Adafruit_SSD1306.h
  • SparkFun_RFD77402_Arduino_Library.h

Wire.h is een arduino-bibliotheek, de twee Adafruit-bibliotheken worden gebruikt voor de OLED en de laatste worden gebruikt voor de afstandssensor. Bekijk deze tutorial over het koppelen van *.zip-bibliotheken aan Arduino IDE.

Als we naar de code kijken, moeten eerst de bibliotheken worden aangegeven, evenals het adres voor de OLED.

In de setup() begint de verzending en wordt tekst weergegeven voor de functionaliteit van de afstandssensor.

De lus() meet de afstand en de OLED drukt deze af.

Controleer de voorbeeldbroncode op de github-link.

Het gebruik van beide breakout-borden is in alle opzichten vrij eenvoudig. Aan de hardwarekant maakt de Qwiic-connector de hardware-installatie sneller en een stuk minder rommelig dan een breadboard en jumperdraden. En voor de firmware maakt het gebruik van de bijbehorende bibliotheken voor de I2C-communicatie, de sensor en het display de code een stuk eenvoudiger.

Stap 4: Wat is de maximale kabellengte?

De maximale lengte is afhankelijk van de voor SDA en SCL gebruikte pull-up weerstanden en de kabelcapaciteit. De weerstanden bepalen ook de bussnelheid, hoe lager de bussnelheid, hoe langer de kabellimiet. De kabelcapaciteit beperkt het aantal apparaten op de bus, evenals de kabellengte. Typische toepassingen beperken de draadlengte tot 2,5-3,5 m (9-12 ft), maar er is variatie afhankelijk van de gebruikte kabel. Ter referentie: de maximale lengte voor I2C-toepassingen met afgeschermde 22 AWG-kabels met getwiste aderparen is ongeveer 1 m (3 ft) bij 100 kbaund, 10 m (30 ft) bij 10 kbaud.

Er zijn enkele sites zoals mogami of WolframAlpha die het mogelijk maken om de kabellengte te schatten.

Stap 5: Hoe meerdere apparaten op dezelfde bus aansluiten?

Hoe meerdere apparaten op dezelfde bus aansluiten?
Hoe meerdere apparaten op dezelfde bus aansluiten?
Hoe meerdere apparaten op dezelfde bus aansluiten?
Hoe meerdere apparaten op dezelfde bus aansluiten?

I2C is een seriële bus, waarbij alle apparaten zijn aangesloten op een gedeelde bus. Met Qwiic connector kunnen de verschillende breakout boards achter elkaar worden aangesloten met behulp van de Qwiic connector. Elk bord heeft minimaal 2 Qwiic-connectoren.

We hebben verschillende borden gemaakt om enkele van de Qwiic- en I2C-beperkingen op te lossen. Zio Qwiic-adapterkaart wordt gebruikt om verbinding te maken via Qwiic-apparaten zonder een Qwiic-connector, met behulp van Qwiic naar breadboard mannelijke header-kabel. Deze simpele truc creëert onbegrensde mogelijkheden.

Om verschillende apparaten aan te sluiten op een bus- of boomnetwerk hebben we de Zio Qwiic Hub bedacht.

Last but not least, de Zio Qwiic MUX maakt het mogelijk om twee of meer apparaten met hetzelfde adres aan te sluiten.

Stap 6: Wat is de I2C-beëindiging?

I2C is vereist om te beëindigen, dus de lijn is vrij om andere apparaten toe te voegen. Dit kan een beetje verwarrend zijn, omdat de term terminologie vaak wordt gebruikt om de bus pull-up-weerstanden te beschrijven (om een standaardstatus te bieden, in dit geval om stroom aan het circuit te leveren). Voor Zuino-kaarten is de weerstandswaarde 4,7 kΩ.

Als de beëindiging wordt weggelaten, is er helemaal geen communicatie op de bus - de master kan de startvoorwaarde niet genereren, dus het bericht wordt niet naar de slaven verzonden.

Voor meer informatie en Zio-mogelijkheden, bekijk de nieuwste Zio-producten. Het doel van dit artikel is om de basisprincipes van I²C-communicatie uit te leggen en hoe het werkt met de Zio- en Qwiic-connector. Blijf op de hoogte voor meer updates.

Aanbevolen: