Spisu treści:

Moduł multipleksera TCA9548A I2C - z Arduino i NodeMCU: 11 kroków
Moduł multipleksera TCA9548A I2C - z Arduino i NodeMCU: 11 kroków

Wideo: Moduł multipleksera TCA9548A I2C - z Arduino i NodeMCU: 11 kroków

Wideo: Moduł multipleksera TCA9548A I2C - z Arduino i NodeMCU: 11 kroków
Wideo: Using Arduino, TCA9548A and I2C OLED 2024, Czerwiec
Anonim
Image
Image

Czy kiedykolwiek znalazłeś się w sytuacji, w której musiałeś podłączyć dwa, trzy lub więcej czujników I2C do swojego Arduino, aby zdać sobie sprawę, że czujniki mają stały lub ten sam adres I2C. Co więcej, nie możesz mieć dwóch urządzeń o tym samym adresie na tych samych pinach SDA/SCL!

Więc jakie masz opcje? Umieść je wszystkie w multiplekserze TCA9548A 1-do-8 I2C, aby wszyscy rozmawiali ze sobą w tej samej magistrali! Breakout TCA9548A umożliwia komunikację z wieloma urządzeniami I2C, które mają ten sam adres, co ułatwia komunikację z nimi.

Krok 1: Wymagania sprzętowe

Omawiane tematy
Omawiane tematy

Do tego samouczka potrzebujemy:

- Deska do krojenia chleba

- Multiplekser TCA9548A I2C

- Arduino Uno/Nano cokolwiek się przyda

- WęzełMCU

-Niewiele wyświetlaczy OLED 0,91 i 0,96 I2C

- Kable rozruchowe i

-Kabel USB do przesłania kodu

Krok 2: Omówione tematy

Naszą dyskusję rozpoczniemy od zrozumienia podstaw technologii I2C

Następnie dowiemy się o multiplekserze TCA9548A oraz o tym, jak master i slave wysyła i odbiera dane za pomocą technologii I2C Następnie sprawdzimy, jak możemy zaprogramować i wykorzystać multiplekser w naszym projekcie za pomocą Arduino i NodeMCU Następnie pokażę ci szybki demo z wykorzystaniem 8 wyświetlaczy I2C OLED i wreszcie zakończymy samouczek omawiając zalety i wady multipleksera TCA9548A

Krok 3: Podstawy magistrali I2C

Podstawy magistrali I2C
Podstawy magistrali I2C
Podstawy magistrali I2C
Podstawy magistrali I2C
Podstawy magistrali I2C
Podstawy magistrali I2C

Obwód zintegrowany wymawiany jako I-squared-C (I²C) lub I2C to dwuprzewodowa technologia magistrali (właściwie 4 przewody, ponieważ potrzebujesz również VCC i uziemienia), która jest używana do komunikacji między wieloma procesorami i czujnikami.

Dwa przewody to:

* SDA - dane szeregowe (linia danych) i

* SCL - Zegar szeregowy (linia zegara)

Pamiętaj, że obie te linie są „synchroniczne”, „dwukierunkowe”, „otwarty dren” i są „podciągane za pomocą rezystorów”.

Technologia magistrali I2C została pierwotnie zaprojektowana przez firmę Philips Semiconductors na początku lat 80., aby umożliwić łatwą komunikację między komponentami znajdującymi się na tej samej płytce drukowanej.

Dzięki I2C możesz podłączyć wiele urządzeń podrzędnych do jednego urządzenia nadrzędnego (takiego jak SPI) lub możesz mieć wiele urządzeń nadrzędnych kontrolujących pojedyncze lub wiele urządzeń podrzędnych. Zarówno urządzenia nadrzędne, jak i podrzędne mogą przesyłać i odbierać dane. Tak więc urządzenie na magistrali I2C może znajdować się w jednym z tych czterech stanów:

* Master transmit – węzeł master wysyła dane do slave* Master odbiera – węzeł master odbiera dane z slave

* Transmisja podrzędna – węzeł podrzędny wysyła dane do urządzenia nadrzędnego

* Odbiór podrzędny – węzeł podrzędny odbiera dane od urządzenia nadrzędnego

I2C jest protokołem komunikacji szeregowej „krótkiej odległości”, więc dane są przesyłane „bit po bicie” po jednym przewodzie lub linii SDA. Wyjście bitów jest zsynchronizowane z próbkowaniem bitów przez sygnał zegarowy „współdzielony” między master i slave. Sygnał zegarowy jest zawsze kontrolowany przez mastera. Master generuje zegar i inicjuje komunikację z urządzeniami Slave.

Tak więc podsumowując>

Liczba użytych przewodów: 2

Synchroniczny lub asynchroniczny: synchroniczny

Szeregowy lub równoległy: Szeregowy

Sygnał zegara kontrolowany przez: węzeł główny

Stosowane napięcia: +5 V lub +3,3 V

Maksymalna liczba mistrzów: nieograniczona

Maksymalna liczba niewolników: 1008

Maksymalna prędkość: tryb standardowy = 100 kb/s

Tryb szybki = 400 kb/s

Tryb dużej szybkości = 3,4 Mb/s

Tryb ultraszybki = 5 Mb/s

Krok 4: Moduł multipleksera TCA9548A I2C

Moduł multipleksera TCA9548A I2C
Moduł multipleksera TCA9548A I2C
Moduł multipleksera TCA9548A I2C
Moduł multipleksera TCA9548A I2C
Moduł multipleksera TCA9548A I2C
Moduł multipleksera TCA9548A I2C

TCA9548A to ośmiokanałowy (dwukierunkowy) multiplekser I2C, który umożliwia sterowanie ośmioma oddzielnymi urządzeniami I2C za pomocą jednej magistrali I2C hosta. Wystarczy podłączyć czujniki I2C do multipleksowanych magistral SCn / SDn. Na przykład, jeśli w aplikacji potrzebnych jest osiem identycznych wyświetlaczy OLED, jeden z każdego wyświetlacza może być podłączony do każdego z tych kanałów: 0-7.

Multiplekser łączy się z liniami VIN, GND, SDA i SCL mikrokontrolera. Płytka zaciskowa akceptuje VIN od 1,65v do 5,5v. Obie linie wejściowe SDA i SCL są podłączone do VCC przez rezystor podciągający 10K (rozmiar rezystora podciągającego zależy od pojemności na liniach I2C). Multiplekser obsługuje zarówno normalne (100 kHz), jak i szybkie (400 kHz) protokoły I2C. Wszystkie piny I/O TCA9548A są odporne na napięcie 5 V i mogą być również używane do zmiany napięcia z wysokiego na niskie lub od niskiego do wysokiego.

Dobrym pomysłem jest umieszczenie rezystorów podciągających na wszystkich kanałach TCA9548A, nawet jeśli napięcia są takie same. Powodem tego jest wewnętrzny przełącznik NMOS. Nie przepuszcza bardzo dobrze wysokiego napięcia, z drugiej strony bardzo dobrze przenosi niskie napięcia. TCA9548A może być również używany do translacji napięcia, pozwalając na użycie różnych napięć magistrali na każdej parze SCn/SDn, tak że części 1,8 V, 2,5 V lub 3,3 V mogą komunikować się z częściami 5 V. Osiąga się to za pomocą zewnętrznych rezystorów podciągających, aby podciągnąć magistralę do pożądanego napięcia dla kanału głównego i każdego kanału podrzędnego.

Jeśli mikrokontroler wykryje konflikt magistrali lub inną nieprawidłową operację, TCA9548A może zostać zresetowany poprzez podanie stanu niskiego na pin RESET.

Krok 5:

Obraz
Obraz
Obraz
Obraz
Obraz
Obraz

TCA9548 pozwala pojedynczemu mikrokontrolerowi komunikować się z maksymalnie „64 czujnikami”, wszystkie o tym samym lub innym adresie I2C, poprzez przypisanie unikalnego kanału do każdej podrzędnej szyny czujnika.

Kiedy mówimy o wysyłaniu danych przez 2 przewody do wielu urządzeń, potrzebujemy sposobu ich adresowania. To tak samo, jak listonosz przyjeżdżający jedną drogą i wysyłający paczki pocztowe do różnych domów, ponieważ mają na nich napisane różne adresy.

Możesz mieć maksymalnie 8 takich multiplekserów połączonych ze sobą na adresach 0x70-0x77, aby kontrolować 64 części o tych samych adresach I2C. Łącząc trzy bity adresu A0, A1 i A2 z VIN można uzyskać inną kombinację adresów. Tak wygląda bajt adresu TCA9548A. Pierwsze 7 bitów łączą się, tworząc adres urządzenia podrzędnego. Ostatni bit adresu urządzenia podrzędnego określa operację (odczyt lub zapis), która ma zostać wykonana. Gdy jest wysoki (1), wybierany jest odczyt, a niski (0) wybiera operację zapisu.

Krok 6: Jak Master wysyła i odbiera dane

Jak Master wysyła i odbiera dane
Jak Master wysyła i odbiera dane
Jak Master wysyła i odbiera dane
Jak Master wysyła i odbiera dane

Poniżej przedstawiono ogólną procedurę dostępu urządzenia nadrzędnego do urządzenia podrzędnego:

1. Jeżeli master chce wysłać dane do slave'a (ZAPISUJE):

– Nadajnik nadrzędny wysyła warunek START, po którym następuje adres odbiornika podrzędnego i R/W ustawione na 0

– Nadajnik nadrzędny wysyła dane w „8-bitowych rejestrach kontrolnych” do odbiornika podrzędnego, gdy urządzenie podrzędne potwierdza, że jest gotowe

– Nadajnik nadrzędny kończy transmisję z warunkiem STOP

2. Jeśli master chce odbierać lub czytać dane z slave (odczyty):

– Odbiornik nadrzędny wysyła warunek START, po którym następują adresy odbiornika podrzędnego i R/W ustawione na 1

– Odbiornik główny wysyła żądany rejestr do odczytu do nadajnika podrzędnego

– Odbiornik Master odbiera dane z nadajnika Slave

- Gdy wszystkie bajty zostaną odebrane, urządzenie nadrzędne wysyła sygnał NACK do urządzenia podrzędnego, aby zatrzymać komunikację i zwolnić magistralę;

- Odbiornik główny kończy transmisję z warunkiem STOP

Magistrala jest uważana za bezczynną, jeśli obie linie SDA i SCL są w stanie wysokim po stanie STOP.

Krok 7: Kod

Kod
Kod

Teraz kod Int zaczynamy od włączenia biblioteki "Wire" i zdefiniowania adresu multiplekserów.

#include "Drut.h"

#include "U8glib.h"

#define MUX_Address 0x70 // TCA9548A Adres enkoderów

Następnie musimy wybrać port, z którym chcemy się komunikować i przesłać na niego dane za pomocą tej funkcji:

void selectI2Channels(uint8_t i) {

jeśli (i > 7) powrót;

Wire.beginTransmission(MUX_Address);

Wire.write(1 << i);

Wire.endTransmission();

}

Następnie zainicjujemy ekran w sekcji ustawień, wywołując "u8g.begin();" dla każdego wyświetlacza podłączonego do MUX "tcaselect(i);"

Po zainicjowaniu możemy robić, co chcemy, po prostu wywołując funkcję "tcaselect(i);" gdzie „i” jest wartością zmultipleksowanej magistrali, a następnie odpowiednio wysyła dane i zegar.

Krok 8: Skaner I2C

Skaner I2C
Skaner I2C

Na wszelki wypadek, jeśli nie masz pewności co do adresu urządzenia osłony I2C, uruchom załączony kod „Skaner I2C”, aby znaleźć adres szesnastkowy urządzenia. Po załadowaniu do Arduino szkic przeskanuje sieć I2C, pokazując adresy, które odpowiadają.

Krok 9: Okablowanie i demo

Okablowanie i demo
Okablowanie i demo
Okablowanie i demo
Okablowanie i demo

Okablowanie:

Zacznijmy od podłączenia multipleksera do płyty NodeMCU. Łączyć:

VIN do 5V (lub 3,3V)

GND do ziemi

SDA do D2 i

SCL do pinów D1 odpowiednio

W przypadku płytki Arduino podłącz:

VIN do 5V (lub 3,3V)

GND do ziemi

SDA do A4 i

SCL do pinów A5 odpowiednio

Po podłączeniu MUX do mikrokontrolera wystarczy podłączyć czujniki do par SCn / SDn.

Zobaczmy teraz to szybkie demo, w którym podłączyłem 8 wyświetlaczy OLED do multipleksera TCA9548A. Ponieważ wyświetlacze te wykorzystują komunikację I2C, komunikują się z Arduino za pomocą zaledwie 2 pinów.

Krok 10: Zalety i wady

Zalety i wady
Zalety i wady

ZALETY

* Komunikacja wymaga tylko dwóch linii magistrali (przewodów)

* Pomiędzy wszystkimi komponentami istnieją proste relacje master/slave

* Brak ścisłych wymagań dotyczących szybkości transmisji, takich jak na przykład RS232, master generuje zegar magistrali

* Sprzęt jest mniej skomplikowany niż UART

* Obsługuje wielu mistrzów i wielu niewolników

* Bit ACK/NACK daje potwierdzenie, że każda ramka została pomyślnie przesłana

* I2C to „prawdziwa magistrala multi-master” zapewniająca arbitraż i wykrywanie kolizji

* Każde urządzenie podłączone do magistrali może być adresowane programowo za pomocą unikalnego adresu

* Większość urządzeń I2C może komunikować się z częstotliwością 100kHz lub 400kHz

* I²C jest odpowiedni dla urządzeń peryferyjnych, w których prostota i niski koszt produkcji są ważniejsze niż szybkość

* Dobrze znany i szeroko stosowany protokół

NIEDOGODNOŚCI

* Wolniejszy transfer danych niż SPI

* Rozmiar ramki danych jest ograniczony do 8 bitów

* Bardziej skomplikowany sprzęt potrzebny do wdrożenia niż technologia SPI

Zalecana: