Inhaltsverzeichnis:

Einführung von I2C mit Zio-Modulen und Qwiic - Gunook
Einführung von I2C mit Zio-Modulen und Qwiic - Gunook

Video: Einführung von I2C mit Zio-Modulen und Qwiic - Gunook

Video: Einführung von I2C mit Zio-Modulen und Qwiic - Gunook
Video: Einführung in das LCD2004 LCD-Display mit I2C-Modul für Arduino 2024, Juli
Anonim
Einführung von I2C mit Zio-Modulen und Qwiic
Einführung von I2C mit Zio-Modulen und Qwiic

Robin Sharma sagte: „Kleine tägliche Verbesserungen im Laufe der Zeit führen zu erstaunlichen Ergebnissen“. Du denkst vielleicht: ‚Aw, noch ein I2C-Post?‘. Nun, es gibt sicherlich Tausende von Informationen, wenn es um I2C geht. Aber bleiben Sie dran, dies ist nicht nur ein weiterer I2C-Artikel. Das Qwiic Connect System und die Peripherie-Breakout-Boards von Zio sind definitiv I²C-Game-Changer!

Einführung

Wenn Sie elektronische Projekte erstellen und großartige Dinge tun, haben Sie vielleicht festgestellt, dass Ihr Steckbrett mit zunehmender Größe Ihrer Projekte wie eine Schlangengrube aussieht (ein bisschen unordentlich, oder?).

Wenn Sie mehrere Projekte am Laufen haben, verbringen Sie außerdem eine Menge Zeit damit, die Leitungen von Projekt zu Projekt zu wechseln.

Wir sind Macher, also verstehen wir den Kampf. Unser jüngster Beitrag zur OHS-Community ist ein modulares Prototyping-System namens ZIO, das das Qwiic-Verbindungssystem verwendet. Qwiic ist eine sehr bequeme Möglichkeit, eine programmierbare Leiterplatte über I²C mit Sensoren, Aktoren und Breakout-Boards zu kommunizieren.

Schritt 1: Was ist I²C und warum wir es mögen

Was ist I²C und warum wir es mögen
Was ist I²C und warum wir es mögen

I²C ist der am weitesten verbreitete Multi-Master-Bus, was bedeutet, dass verschiedene Chips an denselben Bus angeschlossen werden können. Es wird in vielen Anwendungen zwischen einem Master und einem Slave oder mehreren Master- und Slave-Geräten verwendet. Von Mikrocontrollern über Smartphones bis hin zu industriellen Anwendungen, insbesondere für Videogeräte wie Computermonitore. Es lässt sich leicht in viele elektronische Designs implementieren (und neuerdings noch einfacher mit dem Qwiic-Stecker).

Wenn wir I²C in zwei Worten beschreiben müssten, würden wir wahrscheinlich Einfachheit und Flexibilität verwenden.

Einer der größten Vorteile von I²C gegenüber anderen Kommunikationsprotokollen besteht darin, dass es sich um eine Zweidrahtschnittstelle handelt, was bedeutet, dass nur zwei Signalleitungen benötigt werden, SDA (Serial Data Line) und SCL (Serial Clock Line). Es ist vielleicht nicht das schnellste Protokoll, aber es ist bekannt dafür, dass es sehr flexibel ist und eine Flexibilität bei der Busspannung ermöglicht.

Ein weiteres wesentliches Merkmal, das diesen Bus attraktiv macht, ist die Gemeinschaft zwischen Master und Slave. Mehrere Geräte können an denselben Bus angeschlossen werden und es ist nicht erforderlich, die Verkabelung zwischen den Geräten zu ändern, da jedes Gerät eine eindeutige Adresse hat (der Master wählt das zu kommunizierende Gerät aus).

Schritt 2: Schauen wir uns das genauer an

Lasst uns genauer hinschauen
Lasst uns genauer hinschauen
Lasst uns genauer hinschauen
Lasst uns genauer hinschauen
Lasst uns genauer hinschauen
Lasst uns genauer hinschauen
Lasst uns genauer hinschauen
Lasst uns genauer hinschauen

Wie funktioniert I²C? Zuvor haben wir erwähnt, dass eines der wichtigsten Merkmale die Spannungstoleranz ist. Dies ist möglich, da I²C einen offenen Kollektor (auch als Open Drain bekannt) für SDA- und SCL-Kommunikationsleitungen verwendet.

SCL ist das Taktsignal, synchronisiert die Datenübertragung zwischen den Geräten am I²C-Bus und wird vom Master generiert. Während SDA die Daten überträgt, die von den Sensoren oder anderen an den Bus angeschlossenen Geräten gesendet oder empfangen werden.

Der Ausgang des Signals ist mit Masse verbunden, was bedeutet, dass jedes Gerät als niedrig auferlegt wird. Um das Signal wieder auf High zu setzen, werden beide Leitungen über einen zu terminierenden Pull-Up-Widerstand mit einer positiven Versorgungsspannung verbunden.

Mit ZIO-Modulen haben wir Sie abgedeckt, alle unsere Breakout-Boards enthalten den erforderlichen Pull-Up-Widerstand.

I²C folgt einem Nachrichtenprotokoll, um den Master mit Slave-Geräten zu kommunizieren. Die beiden Leitungen (SCL und SDA) sind innerhalb aller I²C-Slaves gemeinsam, alle Slaves am Bus hören auf die Nachricht.

Das Nachrichtenprotokoll folgt dem im angehängten Bild gezeigten Format:

Es mag auf den ersten Blick kompliziert aussehen, aber wir haben ein paar gute Neuigkeiten. Bei der Verwendung von Arduino IDE gibt es die Bibliothek Wire.h, um die gesamte Einrichtung für das I²C-Nachrichtenprotokoll zu vereinfachen.

Die Startbedingung wird erzeugt, wenn die Datenleitung (SDA) auf Low fällt, während die Taktleitung (SCL) noch auf High abfällt. Beim Einrichten eines Projekts auf der Arduino-Schnittstelle brauchen wir uns nicht wirklich um die Generierung der Startbedingung zu kümmern, sie wird mit einer bestimmten Funktion (Wire.beginTransmission(slaveAddress)) angestoßen.

Außerdem initiiert diese Funktion auch die Übertragung mit der spezifischen Slave-Adresse. Um den Slave auszuwählen, der auf dem gemeinsam genutzten Bus kommuniziert, fährt der Master damit fort, die Adresse an den Slave weiterzugeben, um zu kommunizieren. Nachdem die Adresse für die Kommunikation mit dem entsprechenden Slave eingestellt wurde, folgt die Nachricht je nach gewähltem Modus entweder mit einem Lese- oder Schreibbit.

Der Slave antwortet mit einer Bestätigung (ACK oder NACK), und andere Slave-Geräte auf dem Bus ziehen den Rest der Daten zurück, bis die Nachricht vollständig ist und der Bus frei ist. Nach dem ACK setzt eine Sequenz eines internen Adressierungsregisters der Slaves die Übertragung fort.

Wenn die Daten gesendet werden, endet die Übertragungsnachricht mit einer Stoppbedingung. Zum Beenden der Übertragung wechselt die Datenleitung auf High und die Taktleitung bleibt auf High.

Schritt 3: I²C und ZIO

I²C und ZIO
I²C und ZIO

Wir haben herausgefunden, dass ich am besten alle oben genannten Informationen in einem Gespräch zwischen einem Master (alias Zuino, unser Mikro) und Slaves (alias ZIO-Breakout-Boards) erstellen sollte.

In diesem einfachen Beispiel verwenden wir den ZIO TOF Distanzsensor und das ZIO OLED Display. Das TOF gibt die Entfernungsinformationen an, während das ZIO Oled die Daten anzeigt. Die verwendeten Komponenten und Geräte:

  • ZUINO M UNO - der Meister
  • ZIO OLED-Display - Slave_01
  • ZIO TOF Distanzsensor - Slave_02
  • Qwiic Cable - Einfacher Anschluss für I²C-Geräte

So einfach können Sie die Boards mit Qwiic miteinander verbinden, kein Breadboard erforderlich, zusätzliche Kabel erforderlich oder ZUINO-Pins. Die serielle Takt- und Datenleitung des ZUINO wird über den Qwiic-Anschluss automatisch mit dem Distanzsensor und OLED verbunden. Die beiden anderen Kabel sind 3V3 und GND.

Werfen wir zunächst einen Blick auf die benötigten Informationen, um den Master mit den Slaves zu kommunizieren, müssten wir die eindeutigen Adressen kennen.

Gerät: ZIO Distanzsensor

  • Teilenummer: RFD77402
  • I2C-Adresse: 0x4C
  • Datenblatt-Link

Gerät: ZIO OLED-Display

  • Teilenummer: SSD1306
  • Adresse: 0x3C
  • Datenblatt-Link

Um die eindeutige Adresse für die Slave-Geräte zu finden, öffnen Sie das bereitgestellte Datenblatt. Für den Distanzsensor wird die Adresse im Abschnitt Modulschnittstelle bereitgestellt. Jeder Sensor oder jede Komponente hat ein anderes Datenblatt mit unterschiedlichen Informationen. Manchmal kann es schwierig sein, es auf einem 30-seitigen Datenblatt zu finden (Tipp: Öffnen Sie das Suchwerkzeug im PDF-Viewer und geben Sie "Adresse" oder "Geräte-ID" für eine schnelle Suche ein).

Da nun die eindeutige Adresse für jedes Gerät bekannt ist, muss zum Lesen/Schreiben von Daten die interne Registeradresse ermittelt werden (ebenfalls aus dem Datenblatt). Wenn Sie sich das Datenblatt des ZIO-Distanzsensors ansehen, entspricht die Adresse zum Abrufen der Distanz 0x7FF.

In diesem speziellen Fall benötigen wir diese Informationen wirklich nicht für die Verwendung des Sensors, da dies die Bibliothek bereits tut.

Nächster Schritt, Hände auf den Code. ZUINO M UNO ist mit Arduino IDE kompatibel, was die Einrichtung erheblich erleichtert. Die für dieses Projekt benötigten Bibliotheken sind die folgenden:

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

Wire.h ist eine Arduino-Bibliothek, die beiden Adafruit-Bibliotheken werden für die OLED verwendet und die letzte wird für den Distanzsensor verwendet. In diesem Tutorial erfahren Sie, wie Sie *.zip-Bibliotheken mit der Arduino IDE verknüpfen.

Betrachtet man den Code, müssen zunächst die Bibliotheken sowie die Adresse für das OLED deklariert werden.

Im setup() beginnt die Übertragung und es wird Text für die Distanzsensor-Funktionalität angezeigt.

Die loop () misst die Entfernung und die OLED druckt sie.

Überprüfen Sie den Beispielquellcode auf dem Github-Link.

Die Verwendung beider Breakout-Boards ist in jeder Hinsicht ziemlich einfach. Auf der Hardwareseite macht der Qwiic-Anschluss das Hardware-Setup schneller und viel weniger chaotisch als ein Steckbrett und Überbrückungsdrähte. Und bei der Firmware wird der Code durch die Verwendung der entsprechenden Bibliotheken für die I2C-Kommunikation, den Sensor und das Display deutlich einfacher.

Schritt 4: Was ist die maximale Kabellänge?

Die maximale Länge hängt von den verwendeten Pullup-Widerständen für SDA und SCL und der Kabelkapazität ab. Die Widerstände bestimmen auch die Busgeschwindigkeit, je niedriger die Busgeschwindigkeit, desto länger die Kabelbegrenzung. Die Kabelkapazität begrenzt die Anzahl der Geräte am Bus sowie die Kabellänge. Typische Anwendungen begrenzen die Kabellänge auf 2,5-3,5 m (9-12 ft), aber es gibt je nach verwendetem Kabel Abweichungen. Als Referenz beträgt die maximale Länge bei I2C-Anwendungen mit abgeschirmten 22 AWG Twisted-Pair-Kabeln etwa 1 m (3 ft) bei 100 kBaud, 10 m (30 ft) bei 10 kBaud.

Es gibt einige Seiten wie mogami oder WolframAlpha, die es ermöglichen, die Kabellänge abzuschätzen.

Schritt 5: Wie verbinde ich mehrere Geräte mit demselben Bus?

Wie verbinde ich mehrere Geräte mit demselben Bus?
Wie verbinde ich mehrere Geräte mit demselben Bus?
Wie verbinde ich mehrere Geräte mit demselben Bus?
Wie verbinde ich mehrere Geräte mit demselben Bus?

I2C ist ein serieller Bus, bei dem alle Geräte an einen gemeinsamen Bus angeschlossen sind. Mit Qwiic Connector können die verschiedenen Breakout Boards nacheinander über den Qwiic Connector verbunden werden. Jedes Board hat mindestens 2 Qwiic-Anschlüsse.

Wir haben verschiedene Boards entwickelt, um einige der Einschränkungen von Qwiic und I2C zu lösen. Die Zio Qwiic-Adapterplatine wird verwendet, um über Qwiic-Geräte ohne Qwiic-Anschluss mit einem Qwiic-auf-Steckbrett-Steckerleistenkabel zu verbinden. Dieser einfache Trick schafft unbegrenzte Möglichkeiten.

Um verschiedene Geräte in einem Bus- oder Baumnetzwerk zu verbinden, haben wir den Zio Qwiic Hub entwickelt.

Nicht zuletzt ermöglicht der Zio Qwiic MUX die Verbindung von zwei oder mehr Geräten mit derselben Adresse.

Schritt 6: Was ist die I2C-Terminierung?

I2C ist für die Terminierung erforderlich, sodass die Leitung frei ist, um andere Geräte hinzuzufügen. Dies kann etwas verwirrend sein, da der Terminierungsbegriff häufig verwendet wird, um die Bus-Pull-up-Widerstände zu beschreiben (um einen Standardzustand bereitzustellen, in diesem Fall um Strom an die Schaltung zu liefern). Für Zuino-Boards beträgt der Widerstandswert 4,7 kΩ.

Wird die Terminierung weggelassen, findet überhaupt keine Kommunikation auf dem Bus statt - der Master könnte die Startbedingung nicht erzeugen, daher wird die Nachricht nicht an die Slaves übertragen.

Weitere Informationen und die Funktionen von Zio finden Sie in den neuesten Zio-Produkten. Das Ziel dieses Artikels ist es, die Grundlagen der I²C-Kommunikation und ihre Funktionsweise mit dem Zio- und Qwiic-Connector zu erklären. Bleiben Sie dran für weitere Updates.

Empfohlen: