Inhaltsverzeichnis:

TCA9548A I2C-Multiplexer-Modul - mit Arduino und NodeMCU - Gunook
TCA9548A I2C-Multiplexer-Modul - mit Arduino und NodeMCU - Gunook

Video: TCA9548A I2C-Multiplexer-Modul - mit Arduino und NodeMCU - Gunook

Video: TCA9548A I2C-Multiplexer-Modul - mit Arduino und NodeMCU - Gunook
Video: TCA9548A Multiplexer & BME280 Sensor 2024, Juni
Anonim
Image
Image

Sind Sie jemals in eine Situation geraten, in der Sie zwei, drei oder mehr I2C-Sensoren an Ihren Arduino anschließen mussten, nur um zu erkennen, dass die Sensoren eine feste oder gleiche I2C-Adresse haben? Außerdem können Sie nicht zwei Geräte mit derselben Adresse an denselben SDA/SCL-Pins haben!

Also, was sind Ihre Optionen? Setzen Sie sie alle auf den 1-zu-8-I2C-Multiplexer TCA9548A, damit sie alle über denselben Bus miteinander kommunizieren! Der Breakout TCA9548A ermöglicht die Kommunikation mit mehreren I2C-Geräten, die dieselbe Adresse haben, wodurch die Schnittstelle mit ihnen einfach wird.

Schritt 1: Hardware-Anforderung

Behandelten Themen
Behandelten Themen

Für dieses Tutorial benötigen wir:

- Steckbrett

- TCA9548A I2C-Multiplexer

- Arduino Uno/Nano was immer praktisch ist

- KnotenMCU

- Wenige 0,91 & 0,96 I2C OLED-Displays

- Überbrückungskabel und

- USB-Kabel zum Hochladen des Codes

Schritt 2: Behandelte Themen

Wir beginnen unsere Diskussion mit dem Verständnis der Grundlagen der I2C-Technologie

Dann lernen wir den TCA9548A Multiplexer kennen und wie Master und Slave Daten mit der I2C-Technologie senden und empfangen Anschließend werden wir prüfen, wie wir den Multiplexer in unserem Projekt mit Arduino und NodeMCU programmieren und verwenden können Als nächstes zeige ich Ihnen eine kurze Demo mit 8 I2C-OLED-Displays und abschließend beenden wir das Tutorial, indem wir die Vor- und Nachteile des TCA9548A-Multiplexers diskutieren

Schritt 3: Grundlagen des I2C-Busses

Grundlagen des I2C-Busses
Grundlagen des I2C-Busses
Grundlagen des I2C-Busses
Grundlagen des I2C-Busses
Grundlagen des I2C-Busses
Grundlagen des I2C-Busses

Inter-integrierte Schaltung, ausgesprochen I-Squared-C (I²C) oder I2C, ist eine Zweidraht-Bustechnologie (naja, eigentlich 4 Drähte, da Sie auch VCC und Masse benötigen), die für die Kommunikation zwischen mehreren Prozessoren und Sensoren verwendet wird.

Die beiden Drähte sind:

* SDA - Serielle Daten (Datenleitung) und

* SCL - Serielle Uhr (Taktleitung)

Denken Sie daran, dass diese beiden Leitungen 'synchron', 'bidirektional', 'open-drain' und 'mit Widerständen hochgezogen' sind.

Die I2C-Bus-Technologie wurde ursprünglich in den frühen 80er Jahren von Philips Semiconductors entwickelt, um eine einfache Kommunikation zwischen Komponenten zu ermöglichen, die sich auf derselben Leiterplatte befinden.

Mit I2C können Sie mehrere Slaves an einen einzigen Master (wie SPI) anschließen oder mehrere Master haben, die einzelne oder mehrere Slaves steuern. Sowohl Master als auch Slaves können Daten senden und empfangen. Ein Gerät am I2C-Bus kann sich also in einem dieser vier Zustände befinden:

* Master Transmit – Master Node sendet Daten an einen Slave* Master Receive – Master Node empfängt Daten von einem Slave

* Slave-Senden – Slave-Knoten sendet Daten an den Master

* Slave-Empfang – Slave-Knoten empfängt Daten vom Master

I2C ist ein 'serielles Kommunikationsprotokoll' für kurze Distanzen, so dass Daten 'Bit-für-Bit' über die Einzelader oder die SDA-Leitung übertragen werden. Die Ausgabe von Bits wird durch ein Taktsignal, das zwischen Master und Slave „geteilt“wird, mit der Abtastung von Bits synchronisiert. Das Taktsignal wird immer vom Master gesteuert. Der Master generiert die Uhr und initiiert die Kommunikation mit den Slaves.

Also, um es zusammenzufassen>

Anzahl der verwendeten Drähte: 2

Synchron oder Asynchron: Synchron

Seriell oder parallel: Seriell

Taktsignal gesteuert von: Master Node

Verwendete Spannungen: +5 V oder +3,3 V

Maximale Anzahl von Meistern: Unbegrenzt

Maximale Anzahl von Slaves: 1008

Maximale Geschwindigkeit: Standardmodus = 100kbps

Schneller Modus = 400kbps

Hochgeschwindigkeitsmodus = 3,4 Mbit/s

Ultraschneller Modus = 5 Mbit/s

Schritt 4: TCA9548A I2C-Multiplexer-Modul

TCA9548A I2C-Multiplexer-Modul
TCA9548A I2C-Multiplexer-Modul
TCA9548A I2C-Multiplexer-Modul
TCA9548A I2C-Multiplexer-Modul
TCA9548A I2C-Multiplexer-Modul
TCA9548A I2C-Multiplexer-Modul

TCA9548A ist ein achtkanaliger (bidirektionaler) I2C-Multiplexer, der die Steuerung von acht separaten I2C-Geräten über einen einzigen Host-I2C-Bus ermöglicht. Sie müssen nur die I2C-Sensoren an die SCn / SDn-Multiplex-Busse anschließen. Werden beispielsweise in einer Anwendung acht identische OLED-Displays benötigt, kann an jedem dieser Kanäle eines von jedem Display angeschlossen werden: 0-7.

Der Multiplexer wird an die VIN-, GND-, SDA- und SCL-Leitungen des Mikrocontrollers angeschlossen. Das Breakout-Board akzeptiert VIN von 1,65 V bis 5,5 V. Sowohl die SDA- als auch die SCL-Eingangsleitungen sind über einen 10K-Pull-Up-Widerstand mit VCC verbunden (Die Größe des Pull-Up-Widerstands wird durch die Kapazität der I2C-Leitungen bestimmt). Der Multiplexer unterstützt sowohl normale (100 kHz) als auch schnelle (400 kHz) I2C-Protokolle. Alle I/O-Pins des TCA9548A sind 5-Volt-tolerant und können auch verwendet werden, um von hohen zu niedrigen oder niedrigen zu hohen Spannungen zu übersetzen.

Es ist eine gute Idee, auf allen Kanälen des TCA9548A Pull-up-Widerstände anzubringen, auch wenn die Spannungen gleich sind. Grund dafür ist der interne NMOS-Schalter. Es überträgt hohe Spannungen nicht sehr gut, dagegen niedrige Spannungen sehr gut. Der TCA9548A kann auch für die Spannungsübersetzung verwendet werden, wodurch die Verwendung unterschiedlicher Busspannungen an jedem SCn/SDn-Paar ermöglicht wird, sodass 1,8-V-, 2,5-V- oder 3,3-V-Teile mit 5-V-Teilen kommunizieren können. Dies wird erreicht, indem der Bus über externe Pull-Up-Widerstände auf die gewünschte Spannung für den Master- und jeden Slave-Kanal hochgezogen wird.

Wenn der Mikrocontroller einen Buskonflikt oder eine andere unsachgemäße Operation erkennt, kann der TCA9548A zurückgesetzt werden, indem ein Low an den RESET-Pin angelegt wird.

Schritt 5:

Bild
Bild
Bild
Bild
Bild
Bild

TCA9548 ermöglicht es einem einzelnen Mikrocontroller, mit bis zu '64 Sensoren' zu kommunizieren, die alle dieselbe oder eine andere I2C-Adresse haben, indem jedem Sensor-Slave-Subbus ein eindeutiger Kanal zugewiesen wird.

Wenn wir über das Senden von Daten über 2 Drähte an mehrere Geräte sprechen, müssen wir sie adressieren. Es ist das gleiche wie der Postbote, der auf einer einzigen Straße kommt und die Postpakete zu verschiedenen Häusern abgibt, weil sie unterschiedliche Adressen darauf haben.

Sie können maximal 8 dieser Multiplexer auf 0x70-0x77-Adressen miteinander verbunden haben, um 64 der gleichen I2C-adressierten Teile zu steuern. Durch Verbinden der drei Adressbits A0, A1 und A2 mit VIN können Sie verschiedene Kombinationen der Adressen erhalten. So sieht ein Adressbyte des TCA9548A aus. Die ersten 7 Bits bilden zusammen die Slave-Adresse. Das letzte Bit der Slave-Adresse definiert die auszuführende Operation (Lesen oder Schreiben). Wenn es hoch (1) ist, wird ein Lesen ausgewählt, während ein niedriges (0) einen Schreibvorgang auswählt.

Schritt 6: Wie der Master Daten sendet und empfängt

Wie der Master Daten sendet und empfängt
Wie der Master Daten sendet und empfängt
Wie der Master Daten sendet und empfängt
Wie der Master Daten sendet und empfängt

Im Folgenden ist die allgemeine Vorgehensweise für einen Master, um auf ein Slave-Gerät zuzugreifen:

1. Wenn ein Master Daten an einen Slave senden möchte (WRITES):

– Master-Sender sendet eine START-Bedingung gefolgt von den Adressen des Slave-Empfängers und R/W auf 0 gesetzt

– Master-Sender sendet Daten in den '8-Bit Control Registers' an den Slave-Empfänger, wenn der Slave seine Bereitschaft bestätigt

– Master-Sender beendet die Übertragung mit einer STOP-Bedingung

2. Wenn ein Master Daten von einem Slave empfangen oder lesen möchte (READS):

– Master-Empfänger sendet eine START-Bedingung gefolgt von den Adressen des Slave-Empfängers und R/W auf 1

– Master-Empfänger sendet das angeforderte Register zum Lesen an Slave-Sender

– Master-Empfänger empfängt Daten vom Slave-Sender

- Sobald alle Bytes empfangen wurden, sendet der Master NACK-Signale an den Slave, um die Kommunikation zu stoppen und den Bus freizugeben

- Master-Empfänger beendet die Übertragung mit einer STOP-Bedingung

Ein Bus wird als im Leerlauf betrachtet, wenn sowohl die SDA- als auch die SCL-Leitungen nach einem STOP-Zustand hoch sind.

Schritt 7: Code

Code
Code

Nun beginnt der Code mit Int, indem die "Wire"-Bibliothek aufgenommen und die Multiplexer-Adresse definiert wird.

#include "Wire.h"

#include "U8glib.h"

#define MUX_Address 0x70 // TCA9548A Encoder-Adresse

Dann müssen wir den Port auswählen, mit dem wir kommunizieren möchten, und die Daten mit dieser Funktion senden:

void selectI2CChannels(uint8_t i) {

wenn (i > 7) Rückkehr;

Wire.beginTransmission(MUX_Address);

Wire.write(1 << i);

Wire.endTransmission();

}

Als nächstes initialisieren wir die Anzeige im Setup-Abschnitt, indem wir "u8g.begin();" aufrufen. für jede an den MUX angeschlossene Anzeige "tcaselect(i);"

Nach der Initialisierung können wir dann tun, was wir wollen, indem wir einfach die Funktion "tcaselect(i);" aufrufen. wobei "i" der Wert des gemultiplexten Busses ist und dann die Daten und der Takt entsprechend gesendet werden.

Schritt 8: I2C-Scanner

I2C-Scanner
I2C-Scanner

Falls Sie sich bezüglich der Geräteadresse Ihres I2C-Shields nicht sicher sind, führen Sie den beigefügten 'I2C-Scanner'-Code aus, um die Hex-Adresse Ihres Geräts zu finden. Beim Laden auf einen Arduino scannt die Skizze das I2C-Netzwerk und zeigt die antwortenden Adressen an.

Schritt 9: Verkabelung und Demo

Verkabelung und Demo
Verkabelung und Demo
Verkabelung und Demo
Verkabelung und Demo

Verdrahtung:

Beginnen wir mit dem Anschluss des Multiplexers an eine NodeMCU-Platine. Verbinden:

Fahrgestellnummer bis 5V (oder 3,3V)

GND an Masse

SDA zu D2 und

SCL auf D1-Pins bzw.

Für ein Arduino-Board verbinden:

Fahrgestellnummer bis 5V (oder 3,3V)

GND an Masse

SDA auf A4 und

SCL auf A5-Pins bzw.

Sobald der MUX an den Mikrocontroller angeschlossen ist, müssen Sie nur noch die Sensoren an die SCn / SDn-Paare anschließen.

Schauen wir uns nun diese kurze Demo an, in der ich 8 OLED-Displays an den TCA9548A Multiplexer angeschlossen habe. Da diese Displays die I2C-Kommunikation verwenden, kommunizieren sie mit dem Arduino über nur 2 Pins.

Schritt 10: Vor- und Nachteile

Vorteile und Nachteile
Vorteile und Nachteile

VORTEILE

* Kommunikation benötigt nur zwei Busleitungen (Drähte)

* Zwischen allen Komponenten besteht eine einfache Master/Slave-Beziehung

* Keine strengen Baudratenanforderungen wie zB bei RS232, der Master erzeugt einen Bustakt

* Hardware ist weniger kompliziert als UARTs

* Unterstützt mehrere Master und mehrere Slaves

* ACK/NACK-Bit bestätigt, dass jeder Frame erfolgreich übertragen wurde

* I2C ist ein "echter Multi-Master-Bus", der Arbitrierung und Kollisionserkennung bietet

* Jedes an den Bus angeschlossene Gerät ist durch eine eindeutige Adresse softwareadressierbar

* Die meisten I2C-Geräte können mit 100 kHz oder 400 kHz kommunizieren

* I²C eignet sich für Peripheriegeräte, bei denen Einfachheit und niedrige Herstellungskosten wichtiger sind als Geschwindigkeit

* Bekanntes und weit verbreitetes Protokoll

NACHTEILE

* Langsamere Datenübertragungsrate als SPI

* Die Größe des Datenrahmens ist auf 8 Bit begrenzt

* Kompliziertere Hardware für die Implementierung erforderlich als die SPI-Technologie

Empfohlen: