สารบัญ:

ขอแนะนำ I2C พร้อมโมดูล Zio และ Qwiic: 6 ขั้นตอน
ขอแนะนำ I2C พร้อมโมดูล Zio และ Qwiic: 6 ขั้นตอน

วีดีโอ: ขอแนะนำ I2C พร้อมโมดูล Zio และ Qwiic: 6 ขั้นตอน

วีดีโอ: ขอแนะนำ I2C พร้อมโมดูล Zio และ Qwiic: 6 ขั้นตอน
วีดีโอ: Введение в LCD2004 ЖК-дисплей с модулем I2C для Arduino 2024, กรกฎาคม
Anonim
ขอแนะนำ I2C ด้วยโมดูล Zio และ Qwiic
ขอแนะนำ I2C ด้วยโมดูล Zio และ Qwiic

Robin Sharma กล่าวว่า: 'การปรับปรุงเล็ก ๆ น้อย ๆ ทุกวันเมื่อเวลาผ่านไปนำไปสู่ผลลัพธ์ที่น่าทึ่ง' คุณอาจจะคิดว่า 'แย่จัง โพสต์ I2C อื่นเหรอ' มีข้อมูลมากมายเกี่ยวกับ I2C อย่างแน่นอน แต่คอยติดตาม นี่ไม่ใช่เพียงบทความ I2C อื่น ระบบเชื่อมต่อ Qwiic และกระดานฝ่าวงล้อม Zio เป็นตัวเปลี่ยนเกมI²Cอย่างแน่นอน!

บทนำ

หากคุณกำลังสร้างโปรเจ็กต์อิเล็กทรอนิกส์และทำสิ่งที่ยอดเยี่ยม คุณอาจตระหนักว่าเมื่อโปรเจ็กต์ของคุณใหญ่ขึ้น เขียงหั่นขนมของคุณก็เริ่มดูเหมือนหลุมงู

นอกจากนี้ หากคุณมีหลายโครงการที่กำลังดำเนินอยู่ คุณต้องใช้เวลามากมายในการเปลี่ยนสายจากโครงการหนึ่งไปอีกโครงการหนึ่ง

เราเป็นผู้สร้าง เราจึงเข้าใจการต่อสู้ การสนับสนุนล่าสุดของเราในชุมชน OHS คือระบบสร้างต้นแบบแบบแยกส่วนที่เรียกว่า ZIO ซึ่งใช้ระบบเชื่อมต่อ Qwiic Qwiic เป็นวิธีที่สะดวกมากในการสื่อสารแผงวงจรที่ตั้งโปรแกรมได้กับเซ็นเซอร์ แอคทูเอเตอร์ และบอร์ดฝ่าวงล้อมผ่าน I²C

ขั้นตอนที่ 1: I²Cคืออะไรและทำไมเราถึงชอบ

I²Cคืออะไรและทำไมเราถึงชอบ
I²Cคืออะไรและทำไมเราถึงชอบ

I²C เป็นบัสมัลติมาสเตอร์ที่ใช้กันอย่างแพร่หลายที่สุด หมายความว่าสามารถเชื่อมต่อชิปต่างๆ กับบัสเดียวกันได้ มันถูกใช้ในแอพพลิเคชั่นมากมายระหว่างมาสเตอร์และสเลฟหรืออุปกรณ์มาสเตอร์และสเลฟหลายตัว ตั้งแต่ไมโครคอนโทรลเลอร์ สมาร์ทโฟน ไปจนถึงแอปพลิเคชันอุตสาหกรรม โดยเฉพาะสำหรับอุปกรณ์วิดีโอ เช่น จอคอมพิวเตอร์ สามารถใช้งานได้ง่ายในการออกแบบอิเล็กทรอนิกส์จำนวนมาก (และล่าสุดง่ายยิ่งขึ้นด้วยขั้วต่อ Qwiic)

ถ้าเราต้องอธิบายI²Cด้วยคำสองคำ เราอาจจะใช้ความเรียบง่ายและความยืดหยุ่น

ข้อได้เปรียบที่ใหญ่ที่สุดอย่างหนึ่งของ I²C เหนือโปรโตคอลการสื่อสารอื่นๆ คือ เป็นอินเทอร์เฟซแบบสองสาย ซึ่งหมายความว่าต้องการเพียงสายสัญญาณสองเส้นเท่านั้น SDA (Serial Data Line) และ SCL (Serial Clock Line) อาจไม่ใช่โปรโตคอลที่เร็วที่สุด แต่เป็นที่รู้จักกันดีว่ามีความยืดหยุ่นสูง ทำให้แรงดันไฟฟ้าบัสมีความยืดหยุ่น

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

ขั้นตอนที่ 2: มาดูกันดีกว่า

มาดูกันดีกว่า
มาดูกันดีกว่า
มาดูกันดีกว่า
มาดูกันดีกว่า
มาดูกันดีกว่า
มาดูกันดีกว่า
มาดูกันดีกว่า
มาดูกันดีกว่า

แล้วI²Cทำงานอย่างไร? ก่อนหน้านี้เรากล่าวว่าคุณลักษณะที่สำคัญที่สุดประการหนึ่งคือค่าเผื่อแรงดันไฟฟ้า ซึ่งเป็นไปได้เนื่องจาก I²C ใช้ open collector (หรือที่เรียกว่า open drain) สำหรับทั้งสายสื่อสาร SDA และ SCL

SCL คือสัญญาณนาฬิกา ซิงโครไนซ์การถ่ายโอนข้อมูลระหว่างอุปกรณ์บนบัส I²C และถูกสร้างขึ้นโดยมาสเตอร์ ในขณะที่ SDA จะนำข้อมูลไปส่งหรือรับจากเซ็นเซอร์หรืออุปกรณ์อื่นๆ ที่เชื่อมต่อกับบัส

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

ด้วยโมดูล ZIO เราช่วยคุณได้ บอร์ดฝ่าวงล้อมทั้งหมดของเรารวมเอาตัวต้านทานแบบดึงขึ้นที่จำเป็น

I²C ปฏิบัติตามโปรโตคอลข้อความเพื่อสื่อสารต้นแบบกับอุปกรณ์สเลฟ สองบรรทัด (SCL และ SDA) เป็นเรื่องปกติในทาส I²C ทั้งหมด ทาสทั้งหมดบนรถบัสจะฟังข้อความ

โปรโตคอลข้อความเป็นไปตามรูปแบบที่แสดงในภาพที่แนบมา:

อาจดูซับซ้อนในแวบแรก แต่เรามีข่าวดีมาบอก เมื่อใช้ Arduino IDE จะมีไลบรารี Wire.h เพื่อลดความซับซ้อนของการตั้งค่าทั้งหมดสำหรับโปรโตคอลข้อความI²C

เงื่อนไขการเริ่มต้นถูกสร้างขึ้นเมื่อสายข้อมูล (SDA) ลดลงต่ำในขณะที่สายสัญญาณนาฬิกา (SCL) ยังคงสูงอยู่ เมื่อตั้งค่าโปรเจ็กต์บนอินเทอร์เฟซ Arduino เราไม่จำเป็นต้องกังวลเกี่ยวกับการสร้างเงื่อนไขการเริ่มต้น มันจะเริ่มด้วยฟังก์ชันเฉพาะ (Wire.beginTransmission(slaveAddress))

นอกจากนี้ ฟังก์ชันนี้ยังเริ่มต้นการส่งด้วยที่อยู่สเลฟเฉพาะ ในการเลือกสเลฟเพื่อสื่อสารบนบัสที่ใช้ร่วมกัน มาสเตอร์จะส่งต่อที่อยู่ไปยังสเลฟเพื่อสื่อสาร หลังจากที่ตั้งค่าแอดเดรสให้สื่อสารกับสเลฟที่เกี่ยวข้องแล้ว ข้อความ de จะตามด้วยบิตอ่านหรือเขียน ขึ้นอยู่กับโหมดที่เลือก

salve ตอบกลับพร้อมการตอบรับ (ACK หรือ NACK) และอุปกรณ์ทาสอื่น ๆ บนบัสจะลดราคาข้อมูลที่เหลือจนกว่าข้อความจะสมบูรณ์และบัสว่าง ตาม ACK ลำดับของการลงทะเบียนที่อยู่ภายในของทาสจะทำการส่งสัญญาณต่อไป

เมื่อส่งข้อมูลแล้ว ข้อความโอนจะจบลงด้วยเงื่อนไขการหยุด เพื่อสิ้นสุดการส่งข้อมูล สายข้อมูลจะเปลี่ยนเป็นสูงและสายนาฬิกายังคงสูง

ขั้นตอนที่ 3: I²C และ ZIO

I²C และ ZIO
I²C และ ZIO

เราพบว่าฉันควรพิมพ์เขียวข้อมูลทั้งหมดข้างต้นในการสนทนาระหว่างผู้เชี่ยวชาญ (a.k.a Zuino, micro ของเรา) และทาส (a.k.a ZIO breakout boards)

ในตัวอย่างพื้นฐานนี้ เรากำลังใช้เซ็นเซอร์วัดระยะ ZIO TOF และจอแสดงผล ZIO OLED TOF ให้ข้อมูลระยะทางในขณะที่ ZIO Oled แสดงข้อมูล ส่วนประกอบและอุปกรณ์ที่ใช้:

  • ZUINO M UNO - ปรมาจารย์
  • จอแสดงผล ZIO OLED - Slave_01
  • เซ็นเซอร์ระยะ ZIO TOF - Slave_02
  • สายเคเบิล Qwiic - เชื่อมต่อง่ายสำหรับอุปกรณ์ I²C

ต่อไปนี้คือวิธีง่ายๆ ในการเชื่อมต่อบอร์ดเข้าด้วยกันโดยใช้ Qwiic โดยไม่ต้องใช้เขียงหั่นขนม ต่อสายเคเบิลเพิ่มเติม หรือหมุด ZUINO Serial Clock และ Data line ของ ZUINO เชื่อมต่อกับเซ็นเซอร์ Distance และ OLED โดยอัตโนมัติโดยใช้ขั้วต่อ Qwiic อีกสองสายคือ 3V3 และ GND

ก่อนอื่น มาดูข้อมูลที่จำเป็นกันก่อน เพื่อสื่อสารเจ้านายกับทาส เราจำเป็นต้องรู้ที่อยู่เฉพาะ

อุปกรณ์: ZIO Distance Sensor

  • หมายเลขชิ้นส่วน: RFD77402
  • ที่อยู่ I2C: 0x4C
  • ลิงค์เอกสารข้อมูล

อุปกรณ์: ZIO OLED Display

  • หมายเลขชิ้นส่วน: SSD1306
  • ที่อยู่: 0x3C
  • ลิงค์เอกสารข้อมูล

หากต้องการค้นหาที่อยู่เฉพาะสำหรับอุปกรณ์ทาสให้เปิดแผ่นข้อมูลที่ให้ไว้ สำหรับเซ็นเซอร์วัดระยะทาง ที่อยู่มีให้ที่ส่วนต่อประสานโมดูล เซ็นเซอร์หรือส่วนประกอบทุกตัวมีแผ่นข้อมูลที่แตกต่างกันพร้อมข้อมูลที่แตกต่างกัน บางครั้งอาจเป็นเรื่องยากที่จะค้นหาในแผ่นข้อมูล 30 หน้า (คำแนะนำ: เปิดเครื่องมือค้นหาในโปรแกรมดู PDF และพิมพ์ "ที่อยู่" หรือ "รหัสอุปกรณ์" เพื่อการค้นหาอย่างรวดเร็ว)

เมื่อทราบที่อยู่ที่ไม่ซ้ำกันสำหรับแต่ละอุปกรณ์แล้ว ในการอ่าน/เขียนข้อมูล จะต้องระบุที่อยู่การลงทะเบียนภายใน (จากแผ่นข้อมูลด้วย) ดูแผ่นข้อมูลเซ็นเซอร์ระยะทาง ZIO ที่อยู่เพื่อรับระยะทางที่สอดคล้องกับ 0x7FF

ในกรณีนี้ เราไม่ต้องการข้อมูลนี้จริงๆ เพื่อใช้เซ็นเซอร์เหมือนที่ห้องสมุดใช้อยู่แล้ว

ขั้นตอนต่อไป แจกโค้ด ZUINO M UNO เข้ากันได้กับ Arduino IDE ซึ่งทำให้การตั้งค่าง่ายขึ้นมาก ห้องสมุดที่จำเป็นสำหรับโครงการนี้มีดังต่อไปนี้:

  • Wire.h
  • Adafruit_GFX.h
  • Adafruit_SSD1306.h
  • SparkFun_RFD77402_Arduino_Library.h

Wire.h เป็นห้องสมุด Arduino ห้องสมุด Adafruit สองแห่งใช้สำหรับ OLED และห้องสมุดสุดท้ายใช้สำหรับเซ็นเซอร์ระยะทาง ตรวจสอบบทช่วยสอนนี้เกี่ยวกับวิธีการเชื่อมโยงไลบรารี *.zip กับ Arduino IDE

เมื่อดูโค้ดแล้ว ก่อนอื่นต้องประกาศไลบรารี่และที่อยู่สำหรับ OLED

ในการตั้งค่า () การส่งจะเริ่มขึ้นและข้อความจะแสดงขึ้นสำหรับฟังก์ชันเซ็นเซอร์ระยะทาง

loop() ใช้การวัดระยะทางและ OLED จะพิมพ์ออกมา

ตรวจสอบซอร์สโค้ดตัวอย่างบนลิงค์ github

การใช้กระดานฝ่าวงล้อมทั้งสองนั้นค่อนข้างง่ายในทุกแง่มุม ทางด้านฮาร์ดแวร์ตัวเชื่อมต่อ Qwiic ทำให้การติดตั้งฮาร์ดแวร์เร็วขึ้นและยุ่งน้อยกว่าการมีสายเขียงหั่นขนมและจัมเปอร์ และสำหรับเฟิร์มแวร์ การใช้ไลบรารีที่เกี่ยวข้องสำหรับการสื่อสาร I2C เซ็นเซอร์และจอแสดงผลทำให้โค้ดง่ายขึ้นมาก

ขั้นตอนที่ 4: ความยาวสายเคเบิลสูงสุดคืออะไร?

ความยาวสูงสุดขึ้นอยู่กับตัวต้านทานแบบดึงขึ้นที่ใช้สำหรับ SDA และ SCL และความจุของสายเคเบิล ตัวต้านทานยังกำหนดความเร็วบัส ยิ่งความเร็วบัสต่ำเท่าใด ขีดจำกัดของสายเคเบิลก็จะยิ่งยาวขึ้น ความจุของสายเคเบิลจำกัดจำนวนอุปกรณ์บนบัส เช่นเดียวกับความยาวของสายเคเบิล การใช้งานทั่วไปจำกัดความยาวของสายไฟไว้ที่ 2.5-3.5 ม. (9-12 ฟุต) แต่มีความแตกต่างกันขึ้นอยู่กับสายที่ใช้ สำหรับการอ้างอิง ความยาวสูงสุดในการใช้งาน I2C โดยใช้สายเคเบิลคู่บิดเกลียว 22 AWG ที่มีฉนวนหุ้มอยู่ที่ประมาณ 1 ม. (3 ฟุต) ที่ 100 kbaund, 10 ม. (30 ฟุต) ที่ 10kbaud

มีบางไซต์เช่น mogami หรือ WolframAlpha ที่อนุญาตให้ประมาณความยาวของสายเคเบิลได้

ขั้นตอนที่ 5: วิธีเชื่อมต่ออุปกรณ์หลายเครื่องบนบัสเดียวกัน

จะเชื่อมต่ออุปกรณ์หลายเครื่องบนบัสเดียวกันได้อย่างไร?
จะเชื่อมต่ออุปกรณ์หลายเครื่องบนบัสเดียวกันได้อย่างไร?
จะเชื่อมต่ออุปกรณ์หลายเครื่องบนบัสเดียวกันได้อย่างไร?
จะเชื่อมต่ออุปกรณ์หลายเครื่องบนบัสเดียวกันได้อย่างไร?

I2C เป็นบัสอนุกรมที่อุปกรณ์ทั้งหมดเชื่อมต่อกับบัสที่ใช้ร่วมกัน ด้วยขั้วต่อ Qwiic บอร์ดฝ่าวงล้อมต่างๆ สามารถเชื่อมต่อกันได้โดยใช้ขั้วต่อ Qwiic แต่ละบอร์ดมีตัวเชื่อมต่อ Qwiic อย่างน้อย 2 ตัว

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

ในการเชื่อมต่ออุปกรณ์ต่างๆ บนเครือข่ายรถบัสหรือต้นไม้ เราได้ใช้ Zio Qwiic Hub

สุดท้ายแต่ไม่ท้ายสุด Zio Qwiic MUX อนุญาตให้เชื่อมต่ออุปกรณ์สองเครื่องขึ้นไปโดยใช้ที่อยู่เดียวกัน

ขั้นตอนที่ 6: การยกเลิก I2C คืออะไร?

จำเป็นต้องมี I2C เพื่อยุติการเชื่อมต่อ ดังนั้นสายจึงสามารถเพิ่มอุปกรณ์อื่นๆ ได้ฟรี นี่อาจทำให้สับสนเล็กน้อย เนื่องจากคำสิ้นสุดมักใช้เพื่ออธิบายตัวต้านทานแบบดึงขึ้นของบัส (เพื่อให้เป็นสถานะเริ่มต้น ในกรณีนี้เพื่อจ่ายกระแสไฟให้กับวงจร) สำหรับบอร์ด Zuino ค่าความต้านทานคือ4.7kΩ

หากละเว้นการสิ้นสุด จะไม่มีการสื่อสารใด ๆ บนบัส - ต้นแบบจะไม่สามารถสร้างเงื่อนไขการเริ่มต้นได้ ดังนั้นข้อความจะไม่ถูกส่งไปยังทาส

สำหรับข้อมูลเพิ่มเติมและความสามารถของ Zio ให้ตรวจสอบผลิตภัณฑ์ Zio ล่าสุด เป้าหมายของบทความนี้คือการอธิบายพื้นฐานการสื่อสาร I²C และวิธีการทำงานกับตัวเชื่อมต่อ Zio และ Qwiic คอยติดตามการปรับปรุงมากขึ้น.

แนะนำ: