Mục lục:

TCA9548A I2C Multiplexer Module - Với Arduino và NodeMCU: 11 bước
TCA9548A I2C Multiplexer Module - Với Arduino và NodeMCU: 11 bước

Video: TCA9548A I2C Multiplexer Module - Với Arduino và NodeMCU: 11 bước

Video: TCA9548A I2C Multiplexer Module - Với Arduino và NodeMCU: 11 bước
Video: TCA9548A I2C Multiplexer Module - With Arduino and NodeMCU 2024, Tháng mười một
Anonim
Image
Image

Bạn đã bao giờ rơi vào tình huống phải kết nối hai, ba hoặc nhiều Cảm biến I2C với Arduino của mình chỉ để nhận ra rằng các cảm biến có địa chỉ I2C cố định hoặc giống nhau. Hơn nữa, bạn không thể có hai thiết bị có cùng địa chỉ trên cùng một chân SDA / SCL!

Vì vậy, lựa chọn của bạn là gì? Đặt tất cả chúng trên bộ ghép kênh TCA9548A 1-to-8 I2C để tất cả chúng nói chuyện với nhau trên cùng một xe buýt! TCA9548A Breakout cho phép giao tiếp với nhiều thiết bị I2C có cùng địa chỉ, làm cho việc giao tiếp với chúng trở nên đơn giản.

Bước 1: Yêu cầu phần cứng

Các chủ đề được đề cập
Các chủ đề được đề cập

Đối với hướng dẫn này, chúng tôi cần:

- Bảng bánh mì

- Bộ ghép kênh TCA9548A I2C

- Arduino Uno / Nano bất cứ thứ gì tiện dụng

- NodeMCU

- Vài màn hình OLED 0,91 & 0,96 I2C

- Cáp Jumper, và

- Cáp USB để tải mã lên

Bước 2: Chủ đề được đề cập

Chúng ta sẽ bắt đầu cuộc thảo luận của mình bằng cách tìm hiểu những kiến thức cơ bản về công nghệ I2C

Sau đó, chúng ta sẽ tìm hiểu về Bộ ghép kênh TCA9548A và cách master và slave gửi và nhận dữ liệu bằng công nghệ I2C Sau đó, chúng ta sẽ kiểm tra cách chúng ta có thể lập trình và sử dụng bộ ghép kênh trong dự án của mình bằng cách sử dụng Arduino và NodeMCU Tiếp theo, tôi sẽ chỉ cho bạn một cách nhanh chóng demo sử dụng 8 màn hình I2C OLED và cuối cùng chúng ta sẽ kết thúc hướng dẫn bằng cách thảo luận về những ưu điểm và nhược điểm của Bộ ghép kênh TCA9548A

Bước 3: Khái niệm cơ bản về I2C Bus

Khái niệm cơ bản về I2C Bus
Khái niệm cơ bản về I2C Bus
Khái niệm cơ bản về I2C Bus
Khái niệm cơ bản về I2C Bus
Khái niệm cơ bản về I2C Bus
Khái niệm cơ bản về I2C Bus

Mạch tích hợp liên thông được phát âm là I-bình phương-C (I²C) hoặc I2C là công nghệ bus hai dây (thực tế là 4 dây vì bạn cũng cần VCC và Ground) được sử dụng để giao tiếp giữa nhiều bộ xử lý và cảm biến.

Hai dây là:

* SDA - Dữ liệu nối tiếp (đường dữ liệu) và

* SCL - Serial Clock (dòng đồng hồ)

Hãy nhớ rằng, cả hai đường này đều là 'đồng bộ' 'hai chiều' 'mở cửa' và 'được kéo lên bằng điện trở'.

Công nghệ bus I2C ban đầu được thiết kế bởi Philips Semiconductors vào đầu những năm 80 để cho phép giao tiếp dễ dàng giữa các thành phần nằm trên cùng một bảng mạch.

Với I2C, bạn có thể kết nối nhiều nô lệ với một chủ duy nhất (như SPI) hoặc bạn có thể có nhiều chủ điều khiển một hoặc nhiều nô lệ. Cả chủ và nô lệ đều có thể truyền và nhận dữ liệu. Vì vậy, một thiết bị trên bus I2C có thể ở một trong bốn trạng thái sau:

* Truyền chính - nút chính đang gửi dữ liệu đến một nô lệ * Nhận chính - nút chính đang nhận dữ liệu từ một nô lệ

* Truyền tải nô lệ - nút phụ đang gửi dữ liệu đến chủ

* Nhận nô lệ - nút phụ đang nhận dữ liệu từ chủ

I2C là một giao thức truyền thông nối tiếp 'khoảng cách ngắn', vì vậy dữ liệu được truyền 'từng chút một' dọc theo dây đơn hoặc đường SDA. Đầu ra của các bit được đồng bộ hóa với việc lấy mẫu các bit bằng tín hiệu đồng hồ được 'chia sẻ' giữa chủ và tớ. Tín hiệu đồng hồ luôn được điều khiển bởi master. Master tạo ra đồng hồ và bắt đầu giao tiếp với các nô lệ.

Vì vậy, tóm lại>

Số lượng dây được sử dụng: 2

Đồng bộ hoặc không đồng bộ: Đồng bộ

Nối tiếp hoặc song song: Nối tiếp

Tín hiệu đồng hồ được điều khiển bởi: Master Node

Điện áp sử dụng: +5 V hoặc +3.3 V

Số lượng Master tối đa: Không giới hạn

Số nô lệ tối đa: 1008

Tốc độ tối đa: Chế độ tiêu chuẩn = 100kbps

Chế độ nhanh = 400kbps

Chế độ tốc độ cao = 3,4 Mb / giây

Chế độ cực nhanh = 5 Mb / giây

Bước 4: Mô-đun ghép kênh TCA9548A I2C

TCA9548A Mô-đun ghép kênh I2C
TCA9548A Mô-đun ghép kênh I2C
TCA9548A Mô-đun ghép kênh I2C
TCA9548A Mô-đun ghép kênh I2C
TCA9548A Mô-đun ghép kênh I2C
TCA9548A Mô-đun ghép kênh I2C

TCA9548A là bộ ghép kênh I2C tám kênh (hai chiều) cho phép tám thiết bị I2C riêng biệt được điều khiển bởi một bus I2C máy chủ duy nhất. Bạn chỉ cần kết nối các cảm biến I2C với các bus ghép kênh SCn / SDn. Ví dụ: nếu cần tám màn hình OLED giống nhau trong một ứng dụng, một trong số mỗi màn hình có thể được kết nối tại mỗi kênh sau: 0-7.

Bộ ghép kênh kết nối với các đường VIN, GND, SDA và SCL của bộ điều khiển vi mô. Bảng đột phá chấp nhận VIN từ 1.65v đến 5.5v. Cả hai đường SDA và SCL đầu vào được kết nối với VCC thông qua một điện trở kéo lên 10K (Kích thước của điện trở kéo lên được xác định bởi lượng điện dung trên các đường I2C). Bộ ghép kênh hỗ trợ cả giao thức I2C thông thường (100 kHz) và nhanh (400 kHz). Tất cả các chân I / O của TCA9548A đều có khả năng chịu 5 volt và cũng có thể được sử dụng để dịch từ điện áp cao xuống thấp hoặc thấp đến cao.

Bạn nên đặt điện trở kéo lên trên tất cả các kênh của TCA9548A, ngay cả khi điện áp giống nhau. Lý do cho điều này là do công tắc NMOS bên trong. Nó không truyền điện áp cao rất tốt, mặt khác nó truyền điện áp thấp rất tốt. TCA9548A cũng có thể được sử dụng để dịch điện áp, cho phép sử dụng các điện áp bus khác nhau trên mỗi cặp SCn / SDn sao cho các bộ phận 1,8-V, 2,5-V hoặc 3,3-V có thể giao tiếp với các bộ phận 5-V. Điều này đạt được bằng cách sử dụng các điện trở kéo lên bên ngoài để kéo bus lên đến điện áp mong muốn cho kênh chủ và mỗi kênh phụ.

Nếu bộ điều khiển vi mô phát hiện xung đột bus hoặc hoạt động không đúng khác, TCA9548A có thể được đặt lại bằng cách xác nhận mức thấp cho chân ĐẶT LẠI.

Bước 5:

Hình ảnh
Hình ảnh
Hình ảnh
Hình ảnh
Hình ảnh
Hình ảnh

TCA9548 cho phép một bộ điều khiển vi mô duy nhất giao tiếp với tối đa '64 cảm biến 'có cùng địa chỉ I2C hoặc khác nhau bằng cách gán một kênh duy nhất cho mỗi bus phụ cảm biến.

Khi chúng ta nói về việc gửi dữ liệu qua 2 dây đến nhiều thiết bị thì chúng ta cần một cách để giải quyết chúng. Nó giống như việc người đưa thư đến trên một con đường và thả các gói thư đến những ngôi nhà khác nhau vì chúng có ghi địa chỉ khác nhau trên đó.

Bạn có thể có tối đa 8 bộ ghép kênh này được kết nối với nhau trên các địa chỉ 0x70-0x77 để kiểm soát 64 bộ phận được định địa chỉ I2C giống nhau. Bằng cách kết nối ba bit địa chỉ A0, A1 và A2 với VIN, bạn có thể nhận được sự kết hợp khác nhau của các địa chỉ. Đây là cách một byte địa chỉ của TCA9548A trông như thế nào. 7-bit đầu tiên kết hợp để tạo thành địa chỉ phụ. Bit cuối cùng của địa chỉ tớ xác định hoạt động (đọc hoặc ghi) sẽ được thực hiện. Khi ở mức cao (1), một thao tác đọc được chọn, trong khi mức thấp (0) sẽ chọn thao tác ghi.

Bước 6: Cách Master Gửi & Nhận Dữ liệu

Cách Master gửi & nhận dữ liệu
Cách Master gửi & nhận dữ liệu
Cách Master gửi & nhận dữ liệu
Cách Master gửi & nhận dữ liệu

Sau đây là quy trình chung để một thiết bị chính có thể truy cập thiết bị phụ:

1. Nếu một chủ muốn gửi dữ liệu đến một nô lệ (WRITES):

- Bộ phát chính gửi điều kiện START theo sau là địa chỉ của bộ thu phụ và R / W được đặt thành 0

- Máy phát chủ gửi dữ liệu trong 'thanh ghi điều khiển 8 bit' đến máy thu phụ khi máy chủ phụ nhận rằng nó đã sẵn sàng

- Máy phát chính kết thúc quá trình truyền với điều kiện STOP

2. Nếu chủ nhân muốn nhận hoặc đọc dữ liệu từ máy chủ (READS):

- Bộ thu chính gửi điều kiện START theo sau là địa chỉ của bộ thu phụ và R / W được đặt thành 1

- Máy thu chính gửi thanh ghi được yêu cầu để đọc đến máy phát phụ

- Bộ thu chính nhận dữ liệu từ bộ phát phụ

- Sau khi nhận được tất cả các byte, Master sẽ gửi tín hiệu NACK tới nô lệ để tạm dừng liên lạc và giải phóng xe buýt

- Bộ thu chính kết thúc quá trình truyền với điều kiện DỪNG

Một bus được coi là không hoạt động nếu cả hai đường SDA và SCL đều ở mức cao sau điều kiện STOP.

Bước 7: Mã

Mã số
Mã số

Bây giờ, mã Int cho phép bắt đầu bằng cách bao gồm thư viện "Wire" và bằng cách xác định địa chỉ bộ ghép kênh.

#include "Wire.h"

#include "U8glib.h"

#define MUX_Address 0x70 // Địa chỉ bộ mã hóa TCA9548A

Sau đó, chúng ta cần chọn cổng mà chúng ta muốn giao tiếp và gửi dữ liệu trên đó bằng chức năng này:

void selectI2CChannels (uint8_t i) {

if (i> 7) return;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Tiếp theo, chúng ta sẽ khởi tạo hiển thị trong phần thiết lập bằng cách gọi "u8g.begin ();" cho mỗi màn hình được gắn với MUX "tcaselect (i);"

Sau khi khởi tạo, chúng ta có thể làm bất cứ điều gì chúng ta muốn chỉ bằng cách gọi hàm "tcaselect (i);" trong đó "i" là giá trị của bus ghép kênh và sau đó gửi dữ liệu và đồng hồ cho phù hợp.

Bước 8: Máy quét I2C

Máy quét I2C
Máy quét I2C

Trong trường hợp nếu bạn không chắc chắn về địa chỉ thiết bị của lá chắn I2C, hãy chạy mã 'I2C Scanner' đính kèm để tìm địa chỉ hex của thiết bị của bạn. Khi được tải vào Arduino, bản phác thảo sẽ quét mạng I2C, hiển thị các địa chỉ đang phản hồi.

Bước 9: Đấu dây và Demo

Hệ thống dây và Demo
Hệ thống dây và Demo
Hệ thống dây và Demo
Hệ thống dây và Demo

Hệ thống dây:

Hãy bắt đầu bằng cách kết nối bộ ghép kênh với bảng NodeMCU. Liên kết:

VIN đến 5V (hoặc 3,3V)

GND xuống đất

SDA đến D2 và

SCL đến chân D1 tương ứng

Đối với bảng Arduino, hãy kết nối:

VIN đến 5V (hoặc 3,3V)

GND xuống đất

SDA đến A4 và

SCL đến chân A5 tương ứng

Sau khi MUX được kết nối với bộ điều khiển vi mô, bạn chỉ cần kết nối các cảm biến với cặp SCn / SDn.

Bây giờ, chúng ta hãy xem bản trình diễn nhanh này, trong đó tôi đã kết nối 8 màn hình OLED với Bộ ghép kênh TCA9548A. Vì các màn hình này sử dụng giao tiếp I2C nên chúng giao tiếp với Arduino chỉ bằng 2 chân.

Bước 10: Ưu điểm và nhược điểm

Ưu điểm và nhược điểm
Ưu điểm và nhược điểm

THUẬN LỢI

* Giao tiếp chỉ yêu cầu hai đường bus (dây dẫn)

* Một mối quan hệ chủ / tớ đơn giản tồn tại giữa tất cả các thành phần

* Không có yêu cầu tốc độ truyền nghiêm ngặt như ví dụ với RS232, thiết bị chính tạo ra đồng hồ xe buýt

* Phần cứng ít phức tạp hơn UART

* Hỗ trợ nhiều chủ và nhiều nô lệ

* Bit ACK / NACK xác nhận rằng mỗi khung được chuyển thành công

* I2C là một 'bus đa chủ thực sự' cung cấp khả năng phân xử và phát hiện va chạm

* Mỗi thiết bị kết nối với bus đều có thể định địa chỉ phần mềm bằng một địa chỉ duy nhất

* Hầu hết các thiết bị I2C có thể giao tiếp ở 100kHz hoặc 400kHz

* I²C thích hợp cho các thiết bị ngoại vi nơi tính đơn giản và chi phí sản xuất thấp quan trọng hơn tốc độ

* Giao thức nổi tiếng và được sử dụng rộng rãi

NHƯỢC ĐIỂM

* Tốc độ truyền dữ liệu chậm hơn SPI

* Kích thước của khung dữ liệu được giới hạn ở 8 bit

* Cần phần cứng phức tạp hơn để triển khai so với công nghệ SPI

Đề xuất: