สารบัญ:
- ขั้นตอนที่ 1: ข้อกำหนดฮาร์ดแวร์
- ขั้นตอนที่ 2: หัวข้อที่ครอบคลุม
- ขั้นตอนที่ 3: พื้นฐานของ I2C Bus
- ขั้นตอนที่ 4: โมดูลมัลติเพล็กเซอร์ TCA9548A I2C
- ขั้นตอนที่ 5:
- ขั้นตอนที่ 6: วิธีที่อาจารย์ส่งและรับข้อมูล
- ขั้นตอนที่ 7: รหัส
- ขั้นตอนที่ 8: สแกนเนอร์ I2C
- ขั้นตอนที่ 9: การเดินสายไฟและการสาธิต
- ขั้นตอนที่ 10: ข้อดีและข้อเสีย
- ขั้นตอนที่ 11: ขอบคุณ
วีดีโอ: โมดูลมัลติเพล็กเซอร์ TCA9548A I2C - ด้วย Arduino และ NodeMCU: 11 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
คุณเคยอยู่ในสถานการณ์ที่คุณต้องต่อเซ็นเซอร์ 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
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 แบบแปดช่องสัญญาณ (แบบสองทิศทาง) ซึ่งช่วยให้สามารถควบคุมอุปกรณ์ 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 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
แนะนำ:
ติดตาม: ศูนย์สื่อขั้นสูงพร้อม Odroid N2 และ Kodi (รองรับ 4k และ HEVC): 3 ขั้นตอน
ติดตาม: Advanced Media Center พร้อม Odroid N2 และ Kodi (รองรับ 4k และ HEVC): บทความนี้เป็นบทความต่อจากบทความก่อนหน้าของฉันที่ประสบความสำเร็จค่อนข้างมากเกี่ยวกับการสร้างศูนย์สื่ออเนกประสงค์ โดยอ้างอิงจาก Raspberry PI ที่ได้รับความนิยมมากในตอนแรก แต่ ในภายหลัง เนื่องจากไม่มีเอาต์พุตที่สอดคล้องกับ HEVC, H.265 และ HDMI 2.2 จึงมีสวิตช์
บทช่วยสอน: วิธีที่ Arduino ควบคุมอุปกรณ์ที่อยู่เดียวกันหลายตัวโดยใช้ TCA9548A I2C Multiplexer: 3 ขั้นตอน
บทช่วยสอน: วิธีที่ Arduino ควบคุมอุปกรณ์ที่อยู่เดียวกันหลายตัวโดยใช้ TCA9548A I2C Multiplexer: คำอธิบาย:โมดูลมัลติเพล็กเซอร์ TCA9548A I2C คือการเปิดใช้งานเพื่อเชื่อมต่ออุปกรณ์ที่มีที่อยู่ I2C เดียวกัน (ที่อยู่เดียวกันสูงสุด 8 I2C) ที่เชื่อมต่อกับไมโครคอนโทรลเลอร์หนึ่งตัว มัลติเพล็กเซอร์ทำหน้าที่เป็นผู้รักษาประตู โดยส่งคำสั่งไปยังชุดที่เลือก o
Arduboy Clone พร้อม Arduino Nano และ I2C Oled Display: 3 ขั้นตอน
Arduboy Clone พร้อม Arduino Nano และ I2C Oled Display: Arduboy clone รุ่นราคาถูกซึ่งคุณสามารถเล่นเกม Arduboy ดั้งเดิมจำนวนมาก
RuuviTag และ PiZero W และ Blinkt! เทอร์โมมิเตอร์แบบ Bluetooth Beacon: 3 ขั้นตอน (พร้อมรูปภาพ)
RuuviTag และ PiZero W และ Blinkt! เครื่องวัดอุณหภูมิที่ใช้ Bluetooth Beacon: คำแนะนำนี้อธิบายวิธีการอ่านข้อมูลอุณหภูมิและความชื้นจาก RuuviTag โดยใช้ Bluetooth กับ Raspberry Pi Zero W และเพื่อแสดงค่าเป็นเลขฐานสองบน Pimoroni กะพริบตา! pHAT.หรือเรียกสั้นๆ ว่า จะสร้างสถานะอย่างไร
วิธีการสร้าง Quadcoptor (NTM 28-30S 800kV 300W และ Arducopter APM 2.6 & 6H GPS 3DR Radio และ FlySky TH9X): 25 ขั้นตอน (พร้อมรูปภาพ)
วิธีการสร้าง Quadcoptor (NTM 28-30S 800kV 300W และ Arducopter APM 2.6 & 6H GPS 3DR Radio และ FlySky TH9X): นี่คือบทแนะนำเกี่ยวกับวิธีการสร้าง Quadcopter โดยใช้มอเตอร์ NTM 28-30S 800kV 300W และ Arducopter APM 2.6 & 6H GPS & วิทยุ 3DR ฉันพยายามอธิบายแต่ละขั้นตอนด้วยรูปภาพจำนวนหนึ่ง หากคุณมีคำถามหรือความคิดเห็นใด ๆ โปรดตอบกลับ