İçindekiler:
- Adım 1: Donanım Gereksinimi
- 2. Adım: İşlenen Konular
- Adım 3: I2C Veri Yolunun Temelleri
- Adım 4: TCA9548A I2C Çoklayıcı Modülü
- Adım 5:
- Adım 6: Master Verileri Nasıl Gönderir ve Alır?
- 7. Adım: Kod
- Adım 8: I2C Tarayıcı
- Adım 9: Kablolama ve Demo
- Adım 10: Avantajlar ve Dezavantajlar
- Adım 11: Teşekkürler
Video: TCA9548A I2C Çoklayıcı Modül - Arduino ve NodeMCU ile: 11 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Sensörlerin sabit veya aynı I2C adresine sahip olduğunu anlamak için Arduino'nuza iki, üç veya daha fazla I2C Sensörü bağlamanız gereken bir duruma hiç girdiniz mi? Üstelik aynı adrese sahip iki cihaz aynı SDA/SCL pinlerinde olamaz!
Öyleyse seçeneklerin neler? Hepsinin aynı veri yolu üzerinde birbirleriyle konuşmasını sağlamak için hepsini TCA9548A 1'den 8'e I2C çoklayıcıya koyun! TCA9548A Breakout, aynı adrese sahip birden fazla I2C cihazı ile iletişim kurmayı kolaylaştırarak onlarla arayüz oluşturmayı kolaylaştırır.
Adım 1: Donanım Gereksinimi
Bu eğitim için ihtiyacımız olan:
- Ekmek tahtası
- TCA9548A I2C Çoklayıcı
- Arduino Uno/Nano ne işe yararsa
- DüğümMCU
- Az sayıda 0,91 ve 0,96 I2C OLED ekran
- Atlama Kabloları ve
- Kodu yüklemek için USB Kablosu
2. Adım: İşlenen Konular
Tartışmamıza I2C teknolojisinin temellerini anlayarak başlayacağız.
Ardından TCA9548A Multiplexer ve master ile slave'in I2C teknolojisini kullanarak nasıl veri gönderip aldığını öğreneceğiz Ardından Arduino ve NodeMCU kullanarak projemizde multiplexer'ı nasıl programlayabileceğimizi ve kullanabileceğimizi göreceğiz. 8 I2C OLED ekran kullanan demo ve son olarak TCA9548A Çoklayıcının avantaj ve dezavantajlarını tartışarak öğreticiyi bitireceğiz
Adım 3: I2C Veri Yolunun Temelleri
Inter-Integrated Circuit olarak telaffuz edilen I-squared-C (I²C) veya I2C, birden fazla işlemci ve sensör arasında iletişim için kullanılan iki kablolu bir veri yolu teknolojisidir (aslında 4 telli çünkü VCC ve Toprağa da ihtiyacınız vardır).
İki tel şunlardır:
* SDA - Seri Veri (veri hattı) ve
* SCL - Seri Saat (saat hattı)
Unutmayın, bu hatların her ikisi de 'senkronize' 'çift yönlü' 'açık tahliye' ve 'dirençlerle yukarı çekilir'.
I2C veri yolu teknolojisi, 80'lerin başında, aynı devre kartı üzerinde bulunan bileşenler arasında kolay iletişim sağlamak için orijinal olarak Philips Semiconductors tarafından tasarlandı.
I2C ile, tek bir master'a (SPI gibi) birden fazla slave bağlayabilir veya tek veya çoklu slave'leri kontrol eden birden fazla master'a sahip olabilirsiniz. Hem master hem de slave veri iletebilir ve alabilir. Dolayısıyla, I2C veri yolundaki bir cihaz şu dört durumdan birinde olabilir:
* Ana iletim – ana düğüm bir bağımlıya veri gönderiyor* Ana alma – ana düğüm bir bağımlıdan veri alıyor
* Slave iletimi – slave düğüm, master'a veri gönderiyor
* Slave alma – slave düğüm, master'dan veri alıyor
I2C 'kısa mesafeli' bir 'seri iletişim protokolüdür', bu nedenle veriler tek kablo veya SDA hattı boyunca 'bit-bit' aktarılır. Bitlerin çıkışı, master ve slave arasında 'paylaşılan' bir saat sinyali ile bitlerin örneklenmesiyle senkronize edilir. Saat sinyali her zaman master tarafından kontrol edilir. Master, saati oluşturur ve slave'lerle iletişimi başlatır.
Yani özetlemek gerekirse>
Kullanılan Tel Sayısı: 2
Senkron veya Asenkron: Senkron
Seri veya Paralel: Seri
Tarafından kontrol edilen Saat Sinyali: Ana Düğüm
Kullanılan voltajlar: +5 V veya +3.3 V
Maksimum Master sayısı: Sınırsız
Maksimum Köle Sayısı: 1008
Maksimum Hız: Standart Mod = 100kbps
Hızlı Mod = 400kbps
Yüksek Hız Modu = 3.4 Mbps
Ultra Hızlı Mod = 5 Mbps
Adım 4: TCA9548A I2C Çoklayıcı Modülü
TCA9548A, sekiz ayrı I2C cihazının tek bir ana bilgisayar I2C veri yolu tarafından kontrol edilmesini sağlayan sekiz kanallı (çift yönlü) bir I2C çoklayıcıdır. I2C sensörlerini SCn / SDn çoğullanmış veriyollarına bağlamanız yeterlidir. Örneğin, bir uygulamada sekiz özdeş OLED ekrana ihtiyaç duyulursa, her bir ekrandan biri şu kanalların her birine bağlanabilir: 0-7.
Çoklayıcı, mikro denetleyicinin VIN, GND, SDA ve SCL hatlarına bağlanır. Breakout panosu, 1.65v'den 5.5v'ye kadar VIN'i kabul eder. Hem giriş SDA hem de SCL hatları, 10K'lık bir çekme direnci aracılığıyla VCC'ye bağlanır (Çekme direncinin boyutu, I2C hatlarındaki kapasitans miktarına göre belirlenir). Çoklayıcı hem normal (100 kHz) hem de hızlı (400 kHz) I2C protokollerini destekler. TCA9548A'nın tüm I/O pinleri 5 volt toleranslıdır ve ayrıca yüksekten düşüğe veya düşükten yüksek voltaja çevirmek için kullanılabilir.
Gerilimler aynı olsa bile TCA9548A'nın tüm kanallarına pull-up dirençleri koymak iyi bir fikirdir. Bunun nedeni dahili NMOS anahtarıdır. Yüksek voltajı çok iyi iletmez, diğer yandan düşük voltajları çok iyi iletir. TCA9548A, 1.8-V, 2.5-V veya 3.3-V parçalarının 5-V'luk parçalarla iletişim kurabilmesi için her SCn/SDn çiftinde farklı bara voltajlarının kullanılmasına izin vererek Gerilim Çevirisi için de kullanılabilir. Bu, ana ve her bağımlı kanal için veri yolunu istenen voltaja çekmek için harici çekme dirençleri kullanılarak elde edilir.
Mikro denetleyici bir veri yolu çakışması veya başka bir uygunsuz çalışma algılarsa, TCA9548A, RESET pinine düşük bir değer atanarak sıfırlanabilir.
Adım 5:
TCA9548, her bir sensör bağımlı alt veriyoluna benzersiz bir kanal atayarak tek bir mikro denetleyicinin tümü aynı veya farklı I2C adresine sahip '64 sensöre' kadar iletişim kurmasını sağlar.
2 kablo üzerinden birden fazla cihaza veri göndermekten bahsettiğimizde, onları ele almanın bir yoluna ihtiyacımız var. Postacının tek bir yoldan gelip, üzerlerinde farklı adresler yazılı olduğu için posta paketlerini farklı evlere bırakmasıyla aynı şey.
Aynı I2C adresli parçalardan 64'ünü kontrol etmek için bu çoklayıcılardan en fazla 8 tanesini 0x70-0x77 adreslerinde birbirine bağlayabilirsiniz. A0, A1 ve A2 adres bitlerini VIN'e bağlayarak farklı adres kombinasyonları elde edebilirsiniz. TCA9548A'nın adres baytı bu şekilde görünür. İlk 7 bit, bağımlı adresi oluşturmak için birleşir. Slave adresinin son biti, gerçekleştirilecek işlemi (okuma veya yazma) tanımlar. Yüksek (1) olduğunda, bir okuma seçilir, düşük (0) ise bir yazma işlemi seçer.
Adım 6: Master Verileri Nasıl Gönderir ve Alır?
Bir master'ın bir slave cihaza erişmesi için genel prosedür aşağıdadır:
1. Bir master, bir slave'e veri göndermek isterse (WRITES):
– Ana verici bir BAŞLAT koşulu gönderir, ardından bağımlı alıcının adresleri ve R/W 0 olarak ayarlanır
– Ana verici, köle hazır olduğunu kabul ettiğinde, '8 bitlik kontrol kayıtlarındaki' verileri bağımlı alıcıya gönderir.
– Ana verici, aktarımı bir STOP koşuluyla sonlandırır
2. Bir master, bir slave'den veri almak veya okumak isterse (READS):
– Master-alıcı bir BAŞLAT koşulu gönderir, ardından bağımlı-alıcının adresleri ve R/W 1 olarak ayarlanır
– Master-alıcı, slave-vericiye okumak için istenen kaydı gönderir
– Master-alıcı, slave-vericiden veri alır
- Tüm baytlar alındığında Master, iletişimi durdurmak ve veri yolunu serbest bırakmak için bağımlıya NACK sinyali gönderir.
- Ana alıcı, aktarımı bir STOP koşuluyla sonlandırır
Bir STOP koşulundan sonra hem SDA hem de SCL hatları yüksekse, bir veri yolu boş olarak kabul edilir.
7. Adım: Kod
Şimdi, Int kodu "Wire" kitaplığını ekleyerek ve çoklayıcı adresini tanımlayarak başlayalım.
#include "Wire.h"
#include "U8glib.h"
#define MUX_Address 0x70 // TCA9548A Encoder adresi
Daha sonra iletişim kurmak istediğimiz portu seçip bu fonksiyonu kullanarak datayı ona göndermemiz gerekiyor:
void selectI2CChannels(uint8_t i) {
(i > 7) dönerse;
Wire.beginTransmission(MUX_Adres);
Wire.write(1 << i);
Wire.endTransmission();
}
Daha sonra kurulum bölümündeki ekranı "u8g.begin();" çağırarak başlatacağız. MUX'a bağlı her ekran için "tcaselect(i);"
Başlatıldıktan sonra, "tcaselect(i);" işlevini çağırarak istediğimizi yapabiliriz. burada "i" çoğullanmış veri yolunun değeridir ve ardından verileri ve saati buna göre gönderir.
Adım 8: I2C Tarayıcı
I2C kalkanınızın cihaz adresinden emin değilseniz, cihazınızın hex adresini bulmak için ekteki 'I2C Tarayıcı' kodunu çalıştırın. Bir Arduino'ya yüklendiğinde, çizim, yanıt veren adresleri göstererek I2C ağını tarayacaktır.
Adım 9: Kablolama ve Demo
kablolama:
Çoklayıcıyı bir NodeMCU kartına bağlayarak başlayalım. Bağlamak:
VIN - 5V (veya 3.3V)
GND toprağa
SDA'dan D2'ye ve
Sırasıyla SCL'den D1'e pinler
Bir Arduino kartı bağlantısı için:
VIN - 5V (veya 3.3V)
GND toprağa
SDA'dan A4'e ve
Sırasıyla SCL'den A5'e pinler
MUX mikro denetleyiciye bağlandığında, sensörleri SCn / SDn çiftlerine bağlamanız yeterlidir.
Şimdi, 8 OLED ekranı TCA9548A Multiplexer'a bağladığım bu hızlı demoya bir göz atalım. Bu ekranlar I2C iletişimini kullandığından Arduino ile sadece 2 pin kullanarak iletişim kurarlar.
Adım 10: Avantajlar ve Dezavantajlar
AVANTAJLAR
* İletişim sadece iki bus hattı (kablo) gerektirir
* Tüm bileşenler arasında basit bir master/slave ilişkisi mevcuttur
* Örneğin RS232 ile olduğu gibi katı baud hızı gereksinimleri yoktur, master bir veri yolu saati oluşturur
* Donanım, UART'lardan daha az karmaşıktır
* Birden fazla master ve birden fazla slave'i destekler
* ACK/NACK biti, her çerçevenin başarıyla aktarıldığını onaylar
* I2C, tahkim ve çarpışma tespiti sağlayan 'gerçek bir çoklu ana veri yolu'dur
* Veri yoluna bağlı her cihaz, benzersiz bir adresle yazılımsal olarak adreslenebilir
* Çoğu I2C cihazı 100kHz veya 400kHz'de iletişim kurabilir
* I²C, basitlik ve düşük üretim maliyetinin hızdan daha önemli olduğu çevre birimleri için uygundur
* İyi bilinen ve yaygın olarak kullanılan protokol
DEZAVANTAJLARI
* SPI'den daha yavaş veri aktarım hızı
* Veri çerçevesinin boyutu 8 bit ile sınırlıdır
* Uygulamak için SPI teknolojisinden daha karmaşık donanım gerekli
Önerilen:
WS2812b Led Strip ile Raspberry Pi Üzerinde Hyperion ile OSMC Nasıl Kurulur: 8 Adım
WS2812b Led Strip ile Raspberry Pi Üzerinde Hyperion ile OSMC Nasıl Kurulur: Bazen çok iyi ingilizcem var, bazen hayır…Önce ilk şeyler. Bu benim ilk dersim ve ingilizce benim ana dilim değil, bu yüzden lütfen bana fazla yüklenme. Bu çerçevenin nasıl oluşturulacağı ile ilgili olmayacak, bu kolay. Kurulumla ilgili
Uno ile ESP8266 WeMos D1 R1 Wifi İşlemci Kullanarak ESP32-Cam ile Görüntü Yakalama ve Gönderme: 7 Adım
ESP8266 WeMos D1 R1 Uno ile Wifi İşlemci Kullanarak ESP32-Cam ile Görüntü Yakalayın ve Gönderin: Uno ile ESP8266 WeMos D1 R1 WiFI İşlemci kullanarak ESP32-Cam (OV2640) kullanarak görüntü yakalayın ve e-postaya gönderin, Google Drive'a kaydedin ve gönderin Twilio'yu kullanan Whatsapp.Requirements: Uno'lu ESP8266 WeMos D1 R1 WiFI İşlemci (https://protosupplies
MicroPython ile SSD1306 Oled ile ESP32 Arayüzü: 5 Adım
MicroPython ile SSD1306 Oled ile ESP32 Arayüzü: Micropython, python'un optimize edilmiş ve python'un küçük ayak izidir. Bu, bellek kısıtlamaları ve düşük güç tüketimi olan gömülü cihaz için inşa etmek anlamına geliyordu. Micropython, ESP8266, ESP32, Ardui'yi içeren birçok denetleyici ailesi için kullanılabilir
Nokia LCD ile DSM501A ile Hava Kalitesi İzleme: 7 Adım
Nokia LCD ile DSM501A ile Hava Kalitesi İzleme: Merhaba arkadaşlar!Bu kısa eğitimde size evinizde veya herhangi bir yerde hava kalitesini nasıl izleyeceğinizi göstereceğim.Bu bütçe fiyatına hava kalitesi izleme istasyonunun montajı oldukça kolaydır
DHT11 ile ESP32 Tabanlı M5Stack M5stick C Hava Durumu Monitörü - DHT11 ile M5stick-C'de Sıcaklık Nem ve Isı İndeksini İzleme: 6 Adım
DHT11 ile ESP32 Tabanlı M5Stack M5stick C Hava Durumu Monitörü | DHT11 ile M5stick-C'de Sıcaklık Nem ve Isı İndeksini İzleme: Merhaba arkadaşlar, bu talimatta DHT11 sıcaklık sensörünün m5stick-C (m5stack tarafından geliştirilen bir geliştirme kartı) ile nasıl arayüzleneceğini ve m5stick-C ekranında nasıl görüntüleneceğini öğreneceğiz. Bu eğitimde sıcaklık, nem ve sıcaklık değerlerini okuyacağız; ısı ben