Alles über den Arduino I2C Bus

Arduino I2C Bus

Mit Arduino kann eine große Anzahl von Projekten erstellen wie Sie gesehen haben, wenn Sie Hwlibre lesen, Programmieren des Mikrocontrollers auf einfache Weise. Sondern zwischen den analogen und digitalen Anschlüssen auf dieser Platine hardware libre, es gibt einige, die vielen Anfängern noch etwas unbekannt sind, wie zum Beispiel das wahre Potenzial der PWM-Anschlüsse, des SPI, der RX- und TX-Pins der seriellen Schnittstelle oder des I2C-Busses selbst. Daher können Sie mit diesem Eintrag zumindest alles wissen, was Sie über I2C wissen müssen.

Mit der I2C-Bus Sie können viele Geräte von Drittanbietern mit diesem Protokolltyp verbinden und verwenden, um mit der Arduino-Karte zu kommunizieren. Dank dieser Erfindung von Philips können Sie Beschleunigungsmesser, Displays, Zähler, Kompasse und viele weitere integrierte Schaltkreise miteinander verbinden.

Was ist I2C?

I2C bezieht sich auf Inter-Integated Circuitdas heißt, eine integrierte Schaltung. Es handelt sich um einen seriellen Datenkommunikationsbus, der 1982 von der Firma Philips Semiconductors entwickelt wurde und heute NXP Semiconductors ist, nachdem dieser Abschnitt entfernt wurde. Zunächst wurde es für Fernseher dieser Marke entwickelt, um auf einfache Weise mehrere interne Chips zu kommunizieren. Aber seit 1990 hat sich der I2C verbreitet und wird von vielen Herstellern verwendet.

Wird derzeit von Dutzenden von Chipherstellern verwendet für mehrere Funktionen. Atmel, der Erfinder der Mikrocontroller für Arduino-Boards, führte die TWI-Bezeichnung (Two Wired Interface) für Lizenzzwecke ein, obwohl sie mit I2C identisch ist. Im Jahr 2006 ist das ursprüngliche Patent jedoch abgelaufen und unterliegt nicht mehr dem Urheberrecht. Daher wurde der Begriff I2C wiederverwendet (nur das Logo bleibt weiterhin geschützt, seine Umsetzung oder Verwendung des Begriffs ist jedoch nicht eingeschränkt).

Technische Details des I2C-Busses

I2C-Bus

El Der I2C-Bus ist zum Industriestandard geworden, und Arduino hat ihn implementiert für die Kommunikation mit Peripheriegeräten, die es benötigen. Für den Betrieb werden nur zwei Leitungen oder Kabel benötigt, eine für das Taktsignal (CLK) und die andere für das Senden serieller Daten (SDA). Dies ist im Vergleich zu anderen Kommunikationen im Vergleich zum SPI-Bus vorteilhaft, obwohl sein Betrieb aufgrund der erforderlichen zusätzlichen Schaltung etwas komplexer ist.

In diesem Bus Jedes angeschlossene Gerät hat eine Adresse wird verwendet, um auf diese Geräte einzeln zuzugreifen. Diese Adresse wird durch Hardware festgelegt, wobei die letzten 3 Bits über Jumper oder Switch-DIPs geändert werden. Dies kann jedoch auch per Software erfolgen. Jedes Gerät hat eine eindeutige Adresse, obwohl mehrere von ihnen möglicherweise dieselbe Adresse haben und möglicherweise ein sekundärer Bus verwendet werden muss, um Konflikte zu vermeiden oder wenn möglich zu ändern.

Zusätzlich hat der I2C-Bus eine Master-Slave-Architektur, das heißt, Master-Slave. Dies bedeutet, dass beim Starten der Kommunikation durch ein Master-Gerät Daten von seinen Slaves gesendet oder empfangen werden können. Die Slaves können keine Kommunikation initiieren, nur der Master kann dies tun, und die Slaves können auch nicht direkt miteinander sprechen, ohne dass der Master eingreift.

Wenn Sie mehrere Lehrer im Buskann nur einer gleichzeitig als Lehrer auftreten. Es lohnt sich aber nicht, da der Lehrerwechsel eine hohe Komplexität erfordert und daher nicht häufig ist.

Denken Sie daran, dass die Der Master liefert das Taktsignal, um alle Geräte am Bus zu synchronisieren. Dadurch muss nicht mehr jeder Sklave seine eigene Uhr haben.

Das I2C-Busprotokoll sieht auch die Verwendung von Pull-up-Widerständen in den Versorgungsspannungsleitungen (Vcc) vor, obwohl diese Widerstände normalerweise nicht mit Arduino verwendet werden Pull-up, weil Bibliotheken programmieren as Wire aktiviert die internen mit Werten von 20-30 k. Dies kann für einige Projekte zu weich sein, daher sind die ansteigenden Flanken des Signals langsamer, sodass niedrigere Geschwindigkeiten und kürzere Kommunikationsentfernungen verwendet werden können. Um dies zu korrigieren, müssen Sie möglicherweise externe Pull-up-Widerstände von 1k bis 4k7 einstellen.

Signal

I2C-Signal

La Kommunikationsrahmen von denen ein I2C-Bussignal aus den Bits oder Zuständen besteht (die in Arduino verwendeten, da der I2C-Standard andere zulässt):

  • 8 Bits, davon 7 Adresse des Slave-Geräts, auf das Sie zugreifen möchten, um Daten von ihm zu senden oder zu empfangen. Mit 7 Bit können bis zu 128 verschiedene Adressen erstellt werden, sodass theoretisch auf 128 Geräte zugegriffen werden kann, aber nur auf 112, da 16 für spezielle Zwecke reserviert sind. Und das zusätzliche Bit, das angibt, ob Sie möchten senden oder empfangen Slave-Geräteinformationen.
  • Es gibt auch ein ValidierungsbitWenn es nicht aktiv ist, ist die Kommunikation ungültig.
  • Dann ist die Datenbytes dass sie von den Sklaven senden oder empfangen wollen. Wie Sie wissen, besteht jedes Byte aus 8 Bits. Beachten Sie, dass für jedes gesendete oder empfangene 8-Bit- oder 1-Byte-Daten zusätzliche 18 Bit Validierung, Adresse usw. erforderlich sind, was bedeutet, dass die Geschwindigkeit des Busses sehr begrenzt ist.
  • Ein letztes Stück Validierung der Kommunikation.

Zusätzlich ist die Taktfrequenz für Getriebe ist 100 Mhz als Standard, obwohl es einen schnelleren Modus bei 400 MHz gibt.

Vor- und Nachteile des I2C-Busses

Die Vorteil sind:

  • Einfachheit indem Sie nur zwei Zeilen verwenden.
  • Zur Verfügung Mechanismen, um zu wissen, ob das Signal angekommen ist im Vergleich zu anderen Kommunikationsprotokollen.

Die desventajas sind:

  • Geschwindigkeit ziemlich niedrige Übertragung.
  • Es ist kein VollduplexDas heißt, Sie können nicht gleichzeitig senden und empfangen.
  • Verwendet keine Parität noch irgendeine andere Art von Verifizierungsmechanismus, um zu wissen, ob die empfangenen Datenbits korrekt sind.

I2C auf Arduino

Arduino I2C Bus

En Arduino, je nach ModellDie Pins, die für die Verwendung dieses I2C-Busses aktiviert werden können, variieren. Beispielsweise:

  • Arduino UNO, Nano, MiniPro: A4 wird für SDA (Daten) und A5 für SCK (Uhr) verwendet.
  • Arduino Mega: Pin 20 für SDA und 21 für SCK.

Denken Sie daran, dass Sie es verwenden müssen, um es zu verwenden Nutzen Sie die Bibliothek Draht.h für Ihre Arduino IDE-Codes, obwohl es andere wie gibt I2C y i2cdevlib. Sie können die Dokumente dieser Bibliotheken oder unsere Artikel zu den Projekten lesen, die Sie interessieren, um Codes für die Programmierung zu erhalten.

Woher weiß man die Adresse eines Geräts, um es mit I2C zu verwenden?

Nur eine letzte Warnung, und das ist, wenn Sie ICs von europäischen, japanischen oder amerikanischen Herstellern kaufen, Sie Geben Sie die Richtung an die Sie für das Gerät verwenden sollten. Andererseits beschreiben die Chinesen es manchmal nicht oder es ist nicht korrekt, so dass es nicht funktioniert. Dies kann leicht mit einem Adressenscanner gelöst werden, um festzustellen, auf welche Richtung Sie sich in Ihrer Skizze beziehen sollten.

La Arduino-Gemeinschaft hat dies geschaffen Code zum Scannen und Identifizieren der Adresse Auf einfache Weise. Obwohl ich Ihnen den Code hier zeige:

#include "Wire.h"
 
extern "C" { 
    #include "utility/twi.h"
}
 
void scanI2CBus(byte from_addr, byte to_addr, void(*callback)(byte address, byte result) ) 
{
  byte rc;
  byte data = 0;
  for( byte addr = from_addr; addr <= to_addr; addr++ ) {
    rc = twi_writeTo(addr, &data, 0, 1, 0);
    callback( addr, rc );
  }
}
 
void scanFunc( byte addr, byte result ) {
  Serial.print("addr: ");
  Serial.print(addr,DEC);
  Serial.print( (result==0) ? " Encontrado!":"       ");
  Serial.print( (addr%4) ? "\t":"\n");
}
 
 
const byte start_address = 8;
const byte end_address = 119;
 
void setup()
{
    Wire.begin();
 
    Serial.begin(9600);
    Serial.print("Escaneando bus I2C...");
    scanI2CBus( start_address, end_address, scanFunc );
    Serial.println("\nTerminado");
}
 
void loop() 
{
    delay(1000);
}


Schreiben Sie den ersten Kommentar

Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.