สารบัญ:

โมดูลมัลติเพล็กเซอร์ TCA9548A I2C - ด้วย Arduino และ NodeMCU: 11 ขั้นตอน
โมดูลมัลติเพล็กเซอร์ TCA9548A I2C - ด้วย Arduino และ NodeMCU: 11 ขั้นตอน

วีดีโอ: โมดูลมัลติเพล็กเซอร์ TCA9548A I2C - ด้วย Arduino และ NodeMCU: 11 ขั้นตอน

วีดีโอ: โมดูลมัลติเพล็กเซอร์ TCA9548A I2C - ด้วย Arduino และ NodeMCU: 11 ขั้นตอน
วีดีโอ: Solving I2C Address Conflicts - TCA9548A I2C Multiplexer 2024, มิถุนายน
Anonim
Image
Image

คุณเคยอยู่ในสถานการณ์ที่คุณต้องต่อเซ็นเซอร์ I2C สอง สามตัวขึ้นไปกับ Arduino ของคุณหรือไม่ เพียงเพื่อให้ทราบว่าเซ็นเซอร์มีที่อยู่ I2C คงที่หรือเหมือนกัน นอกจากนี้ คุณไม่สามารถมีอุปกรณ์สองเครื่องที่มีที่อยู่เดียวกันบนพิน SDA/SCL เดียวกันได้!

แล้วคุณมีทางเลือกอะไรบ้าง? ใส่ทั้งหมดลงในมัลติเพล็กเซอร์ TCA9548A 1-to-8 I2C เพื่อให้พวกเขาทั้งหมดพูดคุยกันบนรถบัสคันเดียวกัน! TCA9548A Breakout ช่วยให้สามารถสื่อสารกับอุปกรณ์ I2C หลายเครื่องที่มีที่อยู่เดียวกัน ทำให้ง่ายต่อการเชื่อมต่อกับอุปกรณ์เหล่านี้

ขั้นตอนที่ 1: ข้อกำหนดฮาร์ดแวร์

หัวข้อที่ครอบคลุม
หัวข้อที่ครอบคลุม

สำหรับบทช่วยสอนนี้เราต้องการ:

- เขียงหั่นขนม

- TCA9548A I2C มัลติเพล็กเซอร์

- Arduino Uno/Nano อะไรก็ได้ที่สะดวก

- NodeMCU

- จอแสดงผล OLED 0.91 & 0.96 I2C ไม่กี่ตัว

- สายจัมเปอร์และ

- สาย USB สำหรับอัพโหลดโค้ด

ขั้นตอนที่ 2: หัวข้อที่ครอบคลุม

เราจะเริ่มการสนทนาโดยทำความเข้าใจพื้นฐานของเทคโนโลยี I2C

จากนั้นเราจะมาเรียนรู้เกี่ยวกับ TCA9548A Multiplexer และวิธีที่มาสเตอร์และสเลฟส่งและรับข้อมูลโดยใช้เทคโนโลยี I2C จากนั้นเราจะตรวจสอบว่าเราสามารถตั้งโปรแกรมและใช้มัลติเพล็กเซอร์ในโครงการของเราโดยใช้ Arduino และ NodeMCU ได้อย่างไร ต่อไปผมจะแสดงให้คุณเห็น การสาธิตโดยใช้จอแสดงผล I2C OLED จำนวน 8 จอ และสุดท้ายเราจะจบการสอนโดยพูดถึงข้อดีและข้อเสียของ TCA9548A Multiplexer

ขั้นตอนที่ 3: พื้นฐานของ I2C Bus

พื้นฐานของ I2C Bus
พื้นฐานของ I2C Bus
พื้นฐานของ I2C Bus
พื้นฐานของ I2C Bus
พื้นฐานของ I2C Bus
พื้นฐานของ I2C Bus

Inter-integrated Circuit เด่นชัดว่า I-squared-C (I²C) หรือ I2C เป็นเทคโนโลยีบัสสองสาย (จริง ๆ แล้วมี 4 สายเพราะคุณต้อง VCC และกราวด์ด้วย) ที่ใช้สำหรับการสื่อสารระหว่างโปรเซสเซอร์และเซ็นเซอร์หลายตัว

สองสายคือ:

* SDA - ข้อมูลอนุกรม (สายดาต้า) และ

* SCL - นาฬิกาอนุกรม (สายนาฬิกา)

โปรดจำไว้ว่า ทั้งสองบรรทัดนี้เป็น 'ซิงโครนัส' 'แบบสองทิศทาง' 'เปิดท่อระบายน้ำ' และ 'ดึงขึ้นด้วยตัวต้านทาน'

เทคโนโลยีบัส I2C ได้รับการออกแบบโดย Philips Semiconductors ในช่วงต้นยุค 80 เพื่อให้ง่ายต่อการสื่อสารระหว่างส่วนประกอบต่างๆ ซึ่งอยู่บนแผงวงจรเดียวกัน

ด้วย I2C คุณสามารถเชื่อมต่อหลายทาสกับมาสเตอร์ตัวเดียว (เช่น SPI) หรือคุณสามารถมีต้นแบบหลายตัวที่ควบคุมทาสเดี่ยวหรือหลายตัว ทั้งเจ้านายและทาสสามารถส่งและรับข้อมูลได้ ดังนั้น อุปกรณ์บนบัส I2C สามารถอยู่ในสถานะใดสถานะหนึ่งต่อไปนี้:

* การส่งหลัก – โหนดหลักกำลังส่งข้อมูลไปยังสเลฟ* รับมาสเตอร์ – โหนดหลักกำลังรับข้อมูลจากสเลฟ

* การส่งสเลฟ – โหนดสเลฟกำลังส่งข้อมูลไปยังมาสเตอร์

* รับสเลฟ – โหนดสเลฟกำลังรับข้อมูลจากมาสเตอร์

I2C คือ 'โปรโตคอลการสื่อสารแบบอนุกรม' 'ระยะทางสั้น' ดังนั้นข้อมูลจึงถูกถ่ายโอน 'แบบทีละบิต' ตามสายเดี่ยวหรือสาย SDA เอาต์พุตของบิตซิงโครไนซ์กับการสุ่มตัวอย่างบิตโดยสัญญาณนาฬิกา 'แชร์' ระหว่างมาสเตอร์และสเลฟ สัญญาณนาฬิกาถูกควบคุมโดยต้นแบบเสมอ อาจารย์สร้างนาฬิกาและเริ่มสื่อสารกับทาส

สรุปว่า >

จำนวนสายที่ใช้: 2

ซิงโครนัสหรืออะซิงโครนัส: ซิงโครนัส

อนุกรมหรือขนาน: อนุกรม

สัญญาณนาฬิกาควบคุมโดย: Master Node

แรงดันไฟฟ้าที่ใช้: +5 V หรือ +3.3 V

จำนวน Masters สูงสุด: Unlimited

จำนวนทาสสูงสุด: 1008

ความเร็วสูงสุด: โหมดมาตรฐาน = 100kbps

โหมดเร็ว = 400kbps

โหมดความเร็วสูง = 3.4 Mbps

โหมดเร็วพิเศษ = 5 Mbps

ขั้นตอนที่ 4: โมดูลมัลติเพล็กเซอร์ TCA9548A I2C

โมดูลมัลติเพล็กเซอร์ TCA9548A I2C
โมดูลมัลติเพล็กเซอร์ TCA9548A I2C
โมดูลมัลติเพล็กเซอร์ TCA9548A I2C
โมดูลมัลติเพล็กเซอร์ TCA9548A I2C
โมดูลมัลติเพล็กเซอร์ TCA9548A I2C
โมดูลมัลติเพล็กเซอร์ TCA9548A I2C

TCA9548A เป็นมัลติเพล็กเซอร์ I2C แบบแปดช่องสัญญาณ (แบบสองทิศทาง) ซึ่งช่วยให้สามารถควบคุมอุปกรณ์ I2C แยกกันแปดตัวโดยบัส I2C โฮสต์เดียว คุณเพียงแค่ต้องต่อเซ็นเซอร์ I2C เข้ากับบัสมัลติเพล็กซ์ SCn / SDn ตัวอย่างเช่น หากต้องการใช้จอแสดงผล OLED ที่เหมือนกันแปดจอในแอปพลิเคชันหนึ่ง จอแสดงผลแต่ละจอสามารถเชื่อมต่อที่แต่ละช่องสัญญาณเหล่านี้ได้: 0-7

Multiplexer เชื่อมต่อกับสาย VIN, GND, SDA และ SCL ของไมโครคอนโทรลเลอร์ กระดานฝ่าวงล้อมยอมรับ VIN จาก 1.65v ถึง 5.5v ทั้งสาย SDA และ SCL อินพุตเชื่อมต่อกับ VCC ผ่านตัวต้านทานแบบดึงขึ้น 10K (ขนาดของตัวต้านทานแบบดึงขึ้นจะถูกกำหนดโดยปริมาณความจุบนสาย I2C) มัลติเพล็กเซอร์รองรับโปรโตคอล I2C ทั้งแบบปกติ (100 kHz) และเร็ว (400 kHz) พิน I/O ทั้งหมดของ TCA9548A มีความทนทาน 5 โวลต์ และยังใช้ในการแปลแรงดันไฟฟ้าสูงไปต่ำหรือต่ำไปสูง

เป็นความคิดที่ดีที่จะใส่ตัวต้านทานแบบดึงขึ้นในทุกช่องสัญญาณของ TCA9548A แม้ว่าแรงดันไฟฟ้าจะเท่ากันก็ตาม สาเหตุเป็นเพราะสวิตช์ NMOS ภายใน มันส่งไฟฟ้าแรงสูงได้ไม่ดี ในทางกลับกัน มันส่งแรงดันต่ำได้ดีมาก TCA9548A อาจใช้สำหรับการแปลแรงดันไฟฟ้า ซึ่งช่วยให้สามารถใช้แรงดันไฟฟ้าบัสที่แตกต่างกันในแต่ละคู่ SCn/SDn เพื่อให้ชิ้นส่วน 1.8-V, 2.5-V หรือ 3.3-V สามารถสื่อสารกับชิ้นส่วน 5-V ได้ ทำได้โดยใช้ตัวต้านทานแบบดึงขึ้นภายนอกเพื่อดึงบัสขึ้นไปยังแรงดันไฟฟ้าที่ต้องการสำหรับมาสเตอร์และแต่ละแชนเนลรอง

หากไมโครคอนโทรลเลอร์ตรวจพบข้อขัดแย้งของบัสหรือการทำงานที่ไม่เหมาะสมอื่นๆ คุณสามารถรีเซ็ต TCA9548A ได้โดยใช้ค่าต่ำไปที่พิน RESET

ขั้นตอนที่ 5:

ภาพ
ภาพ
ภาพ
ภาพ
ภาพ
ภาพ

TCA9548 ช่วยให้ไมโครคอนโทรลเลอร์ตัวเดียวสามารถสื่อสารกับ '64 เซ็นเซอร์' ทั้งหมดด้วยที่อยู่ I2C เดียวกันหรือต่างกันโดยกำหนดช่องสัญญาณที่ไม่ซ้ำกันให้กับบัสย่อยของเซ็นเซอร์แต่ละตัว

เมื่อเราพูดถึงการส่งข้อมูลมากกว่า 2 สายไปยังอุปกรณ์หลายเครื่อง เราจำเป็นต้องมีวิธีจัดการกับมัน เหมือนกับบุรุษไปรษณีย์ที่เดินบนถนนเส้นเดียวและส่งซองไปรษณีย์ไปยังบ้านต่างๆ กัน เพราะมีที่อยู่ที่แตกต่างกันเขียนไว้

คุณสามารถเชื่อมต่อมัลติเพล็กเซอร์เหล่านี้ได้สูงสุด 8 รายการบนที่อยู่ 0x70-0x77 เพื่อควบคุม 64 ของชิ้นส่วนที่อยู่ I2C เดียวกัน โดยการเชื่อมต่อบิตที่อยู่สามบิต A0, A1 และ A2 กับ VIN คุณจะได้รับที่อยู่ที่แตกต่างกัน นี่คือลักษณะของไบต์ที่อยู่ของ TCA9548A 7 บิตแรกรวมกันเพื่อสร้างที่อยู่สเลฟ บิตสุดท้ายของที่อยู่รองกำหนดการดำเนินการ (อ่านหรือเขียน) ที่จะดำเนินการ เมื่อมีค่าสูง (1) การอ่านจะถูกเลือก ขณะที่ค่าต่ำ (0) จะเลือกการดำเนินการเขียน

ขั้นตอนที่ 6: วิธีที่อาจารย์ส่งและรับข้อมูล

วิธีที่อาจารย์ส่งและรับข้อมูล
วิธีที่อาจารย์ส่งและรับข้อมูล
วิธีที่อาจารย์ส่งและรับข้อมูล
วิธีที่อาจารย์ส่งและรับข้อมูล

ต่อไปนี้เป็นขั้นตอนทั่วไปสำหรับมาสเตอร์ในการเข้าถึงอุปกรณ์สเลฟ:

1. หากต้นแบบต้องการส่งข้อมูลไปยังทาส (เขียน):

- ตัวส่งสัญญาณหลักส่งเงื่อนไข START ตามด้วยที่อยู่ของตัวรับสเลฟและ R/W ตั้งค่าเป็น 0

- ตัวส่งสัญญาณหลักส่งข้อมูลใน '8-bit control registers' ไปยังตัวรับสเลฟเมื่อสเลฟยอมรับว่ามันพร้อม

– ตัวส่งสัญญาณหลักยุติการถ่ายโอนด้วยเงื่อนไข STOP

2. หากอาจารย์ต้องการรับหรืออ่านข้อมูลจากทาส (READS):

– Master-receiver ส่งเงื่อนไข START ตามด้วย address ของ slave-receiver และ R/W ตั้งค่าเป็น 1

– ผู้รับหลักส่งการลงทะเบียนที่ร้องขอเพื่ออ่านไปยังเครื่องส่งทาส

– ตัวรับหลักรับข้อมูลจากเครื่องส่งสเลฟ

- เมื่อได้รับไบต์ทั้งหมดแล้ว Master จะส่งสัญญาณ NACK ไปยังทาสเพื่อหยุดการสื่อสารและปล่อยบัส

- ผู้รับหลักยุติการโอนโดยมีเงื่อนไข STOP

รถบัสจะถือว่าไม่ได้ใช้งานหากทั้งสาย SDA และ SCL อยู่ในระดับสูงหลังจากเงื่อนไข STOP

ขั้นตอนที่ 7: รหัส

รหัส
รหัส

ตอนนี้ Int รหัสให้เริ่มต้นด้วยการรวมไลบรารี "Wire" และโดยการกำหนดที่อยู่มัลติเพล็กเซอร์

#รวม "Wire.h"

#รวม "U8glib.h"

#define MUX_Address 0x70 // ที่อยู่ตัวเข้ารหัส TCA9548A

จากนั้นเราต้องเลือกพอร์ตที่เราต้องการจะสื่อสารและส่งข้อมูลโดยใช้ฟังก์ชันนี้:

เป็นโมฆะ selectI2Cchannels (uint8_t i) {

ถ้า (i > 7) กลับมา;

Wire.beginTransmission(MUX_Address);

Wire.write(1 << ผม);

Wire.endTransmission();

}

ต่อไปเราจะเริ่มต้นการแสดงผลในส่วนการตั้งค่าโดยเรียก "u8g.begin();" สำหรับแต่ละจอแสดงผลที่แนบมากับ MUX "tcaselect(i);"

เมื่อเริ่มต้นแล้ว เราสามารถทำสิ่งที่ต้องการได้เพียงแค่เรียกใช้ฟังก์ชัน "tcaselect(i);" โดยที่ "i" คือค่าของบัสมัลติเพล็กซ์แล้วส่งข้อมูลและนาฬิกาตามลำดับ

ขั้นตอนที่ 8: สแกนเนอร์ I2C

เครื่องสแกน I2C
เครื่องสแกน I2C

ในกรณีที่คุณไม่แน่ใจเกี่ยวกับที่อยู่อุปกรณ์ของ I2C shield ของคุณ ให้รันโค้ด 'I2C Scanner' ที่แนบมาเพื่อค้นหาที่อยู่ฐานสิบหกของอุปกรณ์ของคุณ เมื่อโหลดไปยัง Arduino ภาพสเก็ตช์จะสแกนเครือข่าย I2C โดยแสดงที่อยู่ที่ตอบสนอง

ขั้นตอนที่ 9: การเดินสายไฟและการสาธิต

การเดินสายไฟและการสาธิต
การเดินสายไฟและการสาธิต
การเดินสายไฟและการสาธิต
การเดินสายไฟและการสาธิต

การเดินสายไฟ:

เริ่มต้นด้วยการเชื่อมต่อมัลติเพล็กเซอร์กับบอร์ด NodeMCU เชื่อมต่อ:

VIN ถึง 5V (หรือ 3.3V)

GND ลงกราวด์

SDA เป็น D2 และ

หมุด SCL ถึง D1 ตามลำดับ

สำหรับบอร์ด Arduino ให้เชื่อมต่อ:

VIN ถึง 5V (หรือ 3.3V)

GND ลงกราวด์

SDA ถึง A4 และ

หมุด SCL ถึง A5 ตามลำดับ

เมื่อ MUX เชื่อมต่อกับไมโครคอนโทรลเลอร์แล้ว คุณเพียงแค่ต้องเชื่อมต่อเซ็นเซอร์กับคู่ SCn / SDn

ตอนนี้ มาดูการสาธิตอย่างรวดเร็วนี้ ซึ่งฉันได้เชื่อมต่อจอแสดงผล OLED จำนวน 8 จอกับ TCA9548A Multiplexer เนื่องจากจอแสดงผลเหล่านี้ใช้การสื่อสาร I2C จึงสื่อสารกับ Arduino โดยใช้เพียง 2 พิน

ขั้นตอนที่ 10: ข้อดีและข้อเสีย

ข้อดีและข้อเสีย
ข้อดีและข้อเสีย

ข้อดี

* การสื่อสารต้องใช้เพียงสองสายรถเมล์ (สาย)

* มีความสัมพันธ์แบบมาสเตอร์/สเลฟอย่างง่ายระหว่างส่วนประกอบทั้งหมด

* ไม่มีข้อกำหนดอัตราบอดที่เข้มงวดเช่น RS232 ต้นแบบสร้างนาฬิกาบัส

* ฮาร์ดแวร์มีความซับซ้อนน้อยกว่า UART

* รองรับเจ้านายหลายคนและทาสหลายคน

* ACK/NACK bit เป็นการยืนยันว่าแต่ละเฟรมได้รับการโอนเรียบร้อยแล้ว

* I2C เป็น 'มัลติมาสเตอร์บัสที่แท้จริง' ที่ให้การอนุญาโตตุลาการและการตรวจจับการชนกัน

* อุปกรณ์แต่ละชิ้นที่เชื่อมต่อกับรถบัสสามารถระบุที่อยู่ซอฟต์แวร์ได้

* อุปกรณ์ I2C ส่วนใหญ่สามารถสื่อสารได้ที่ 100kHz หรือ 400kHz

* I²C เหมาะสำหรับอุปกรณ์ต่อพ่วงที่ความเรียบง่ายและต้นทุนการผลิตต่ำมีความสำคัญมากกว่าความเร็ว

* โปรโตคอลที่รู้จักกันดีและใช้กันอย่างแพร่หลาย

ข้อเสีย

* อัตราการถ่ายโอนข้อมูลช้ากว่า SPI

* ขนาดของ data frame ถูกจำกัดไว้ที่ 8 bits

* จำเป็นต้องใช้ฮาร์ดแวร์ที่ซับซ้อนกว่าในการปรับใช้มากกว่าเทคโนโลยี SPI

แนะนำ: