ในบทความนี้ เราจะมาดูว่าอินเทอร์เฟซ I2C (ay-tu-si, i-two-tse) คืออะไร ฟีเจอร์ของอินเทอร์เฟซนี้คืออะไร และใช้งานอย่างไร
มันจำเป็น
- - Arduino;
- - โพเทนชิออมิเตอร์แบบดิจิตอล AD5171;
- - ไดโอดเปล่งแสง;
- - ตัวต้านทาน 220 โอห์ม
- - ตัวต้านทาน 2 ตัวสำหรับ 4.7 kOhm;
- - สายเชื่อมต่อ
คำแนะนำ
ขั้นตอนที่ 1
โปรโตคอลการสื่อสารแบบอนุกรม IIC (เรียกอีกอย่างว่า I2C - Inter-Integrated Circuits) ใช้สายการสื่อสารแบบสองทิศทางสองสายในการถ่ายโอนข้อมูล เรียกว่าบัส SDA (Serial Data) และบัส SCL (Serial Clock) นอกจากนี้ยังมีสายไฟสองเส้น บัส SDA และ SCL ถูกดึงขึ้นไปที่พาวเวอร์บัสผ่านตัวต้านทาน
มีอย่างน้อยหนึ่ง Master ในเครือข่ายที่เริ่มต้นการรับส่งข้อมูลและสร้างสัญญาณการซิงโครไนซ์ เครือข่ายยังมีทาสที่ส่งข้อมูลตามคำร้องขอของต้นแบบ อุปกรณ์สเลฟแต่ละตัวมีแอดเดรสเฉพาะที่มาสเตอร์แอดเดรส ที่อยู่ของอุปกรณ์ระบุไว้ในหนังสือเดินทาง (เอกสารข้อมูล) สามารถเชื่อมต่ออุปกรณ์สูงสุด 127 เครื่องกับบัส I2C หนึ่งบัส รวมถึงมาสเตอร์หลายตัว อุปกรณ์สามารถเชื่อมต่อกับบัสระหว่างการทำงาน เช่น รองรับการเสียบปลั๊กร้อน
ขั้นตอนที่ 2
Arduino ใช้สองพอร์ตเพื่อทำงานบนอินเทอร์เฟซ I2C ตัวอย่างเช่น ใน Arduino UNO และ Arduino Nano พอร์ตแอนะล็อก A4 สอดคล้องกับ SDA พอร์ตแอนะล็อก A5 สอดคล้องกับ SCL
สำหรับบอร์ดรุ่นอื่นๆ:
Arduino Pro และ Pro Mini - A4 (SDA), A5 (SCL)
Arduino เมกะ - 20 (SDA), 21 (SCL)
Arduino เลโอนาร์โด - 2 (SDA), 3 (SCL)
Arduino ครบกำหนด - 20 (SDA), 21 (SCL), SDA1, SCL1
ขั้นตอนที่ 3
เพื่ออำนวยความสะดวกในการแลกเปลี่ยนข้อมูลกับอุปกรณ์ต่างๆ ผ่านบัส I2C จึงได้มีการเขียนไลบรารี "Wire" มาตรฐานสำหรับ Arduino มันมีฟังก์ชั่นดังต่อไปนี้:
เริ่มต้น (ที่อยู่) - การเริ่มต้นของไลบรารีและการเชื่อมต่อกับบัส I2C หากไม่มีการระบุที่อยู่ อุปกรณ์ที่เชื่อมต่อจะถือเป็นอุปกรณ์หลัก ใช้การกำหนดแอดเดรส 7 บิต
requestFrom () - มาสเตอร์ใช้เพื่อขอจำนวนไบต์จากทาส
BeginTransmission (ที่อยู่) - จุดเริ่มต้นของการถ่ายโอนข้อมูลไปยังอุปกรณ์ทาสตามที่อยู่เฉพาะ
endTransmission () - สิ้นสุดการส่งข้อมูลไปยังทาส
เขียน () - เขียนข้อมูลจากทาสเพื่อตอบสนองต่อคำขอ;
มี () - ส่งกลับจำนวนไบต์ของข้อมูลที่สามารถรับจากทาส;
อ่าน () - อ่านไบต์ที่ถ่ายโอนจากสเลฟไปยังมาสเตอร์หรือจากมาสเตอร์ไปยังสเลฟ
onReceive () - ระบุฟังก์ชันที่จะเรียกเมื่อทาสได้รับการส่งสัญญาณจากต้นแบบ
onRequest () - ระบุฟังก์ชันที่จะเรียกเมื่อต้นแบบได้รับการส่งสัญญาณจากทาส
ขั้นตอนที่ 4
เรามาดูวิธีการทำงานกับบัส I2C โดยใช้ Arduino กัน
ขั้นแรกเราจะประกอบวงจรดังแสดงในรูป เราจะควบคุมความสว่างของ LED โดยใช้โพเทนชิออมิเตอร์แบบดิจิตอล AD5171 64 ตำแหน่ง ซึ่งเชื่อมต่อกับบัส I2C ที่อยู่ที่เราจะอ้างถึงโพเทนชิออมิเตอร์คือ 0x2c (44 เป็นทศนิยม)
ขั้นตอนที่ 5
ตอนนี้ มาเปิดภาพร่างจากตัวอย่างไลบรารี "Wire":
ไฟล์ -> ตัวอย่าง -> Wire -> digital_potentiometer ลองโหลดลงในหน่วยความจำ Arduino มาเปิดกันเถอะ
คุณเห็นไหมว่าความสว่างของ LED เพิ่มขึ้นเป็นวัฏจักรแล้วดับลงในทันใด ในกรณีนี้ เราควบคุมโพเทนชิออมิเตอร์โดยใช้ Arduino ผ่านบัส I2C