- I2C Communication Protocol คืออะไร?
- I2C Communication ทำงานอย่างไร?
- จะใช้การสื่อสาร I2C ได้ที่ไหน?
- I2C ใน MSP430: การควบคุม AD5171 Digital Potentiometer
MSP430 เป็นแพลตฟอร์มที่ทรงพลังซึ่งจัดหาโดย Texas Instruments สำหรับโครงการฝังตัวลักษณะที่หลากหลายทำให้สามารถค้นหาวิธีการใช้งานหลาย ๆ แอปพลิเคชันและขั้นตอนยังคงดำเนินต่อไป หากคุณได้ติดตามบทเรียน MSP430 ของเราแล้วคุณจะสังเกตเห็นว่าเราได้ครอบคลุมบทช่วยสอนมากมายเกี่ยวกับไมโครคอนโทรลเลอร์นี้แล้วโดยเริ่มตั้งแต่พื้นฐานเบื้องต้น ตั้งแต่นี้เป็นต้นมาเราได้กล่าวถึงพื้นฐานที่เราสามารถเข้าไปในสิ่งที่น่าสนใจมากขึ้นเช่นพอร์ทัลการสื่อสาร
ในระบบแอพพลิเคชั่นฝังตัวมากมายไม่มีไมโครคอนโทรลเลอร์ที่สามารถทำกิจกรรมทั้งหมดได้ด้วยตัวเอง ในขั้นตอนของเวลาที่มันมีการสื่อสารกับอุปกรณ์อื่น ๆ ที่จะแบ่งปันข้อมูลบางส่วนมีหลาย ประเภทแตกต่างกันของโปรโตคอลการสื่อสาร ที่จะแบ่งปันข้อมูลเหล่านี้ แต่คนที่ใช้มากที่สุดคือ USART, IIC, SPI และ CAN โปรโตคอลการสื่อสารแต่ละแบบมีข้อดีและข้อเสียของตัวเอง มาเน้นที่ ส่วน I2C กันก่อน เพราะนั่นคือสิ่งที่เราจะเรียนรู้ในบทช่วยสอนนี้
I2C Communication Protocol คืออะไร?
ระยะ IIC ย่อมาจาก“ วงจรอินเตอร์แบบบูรณาการ ” โดยปกติจะแสดงเป็น I2C หรือ I กำลังสอง C หรือแม้กระทั่งเป็นโปรโตคอลอินเทอร์เฟซ 2 สาย (TWI) ในบางแห่ง แต่ก็มีความหมายเหมือนกัน I2C เป็นโปรโตคอลการสื่อสารแบบซิงโครนัสซึ่งหมายความว่าอุปกรณ์ทั้งสองที่ใช้ข้อมูลร่วมกันจะต้องใช้สัญญาณนาฬิการ่วมกัน มีสายไฟเพียงสองสายในการแบ่งปันข้อมูลซึ่งสายหนึ่งใช้สำหรับสัญญาณไก่และอีกสายหนึ่งใช้สำหรับการส่งและรับข้อมูล
I2C Communication ทำงานอย่างไร?
การสื่อสาร I2C เป็นครั้งแรกโดย Phillips ดังที่ได้กล่าวไว้ก่อนหน้านี้ว่ามีสายไฟสองเส้นสายไฟทั้งสองนี้จะเชื่อมต่อกับอุปกรณ์สองเครื่อง นี่คืออุปกรณ์หนึ่งที่เรียกว่า ต้นแบบ และอุปกรณ์อื่น ๆ จะเรียกว่าเป็น ทาสการสื่อสารควรจะเกิดขึ้นระหว่างสอง นายและทาสเสมอ ข้อดีของการสื่อสารแบบ I2C คือสามารถเชื่อมต่อกับ Master ได้มากกว่าหนึ่ง Slave
การสื่อสารที่สมบูรณ์เกิดขึ้นผ่านสายไฟทั้งสองนี้คือ Serial Clock (SCL) และ Serial Data (SDA)
Serial Clock (SCL): แชร์สัญญาณนาฬิกาที่สร้างโดยต้นแบบกับทาส
Serial Data (SDA): ส่งข้อมูลไปและกลับระหว่าง Master และ Slave
ในช่วงเวลาที่กำหนดมีเพียงผู้เชี่ยวชาญเท่านั้นที่จะสามารถเริ่มการสื่อสาร เนื่องจากมีทาสมากกว่าหนึ่งคนในรถบัสนายจึงต้องอ้างถึงทาสแต่ละคนโดยใช้ที่อยู่ต่างกัน เมื่อระบุเฉพาะทาสที่มีที่อยู่นั้นจะตอบกลับพร้อมข้อมูลในขณะที่คนอื่น ๆ ยังคงเลิกใช้ วิธีนี้เราสามารถใช้บัสเดียวกันเพื่อสื่อสารกับอุปกรณ์หลายเครื่อง
ระดับแรงดันไฟฟ้าของ I2C ยังไม่ได้กำหนดไว้ล่วงหน้า การสื่อสาร I2C มีความยืดหยุ่นหมายถึงอุปกรณ์ที่ใช้พลังงาน 5v โวลต์สามารถใช้ 5v สำหรับ I2C และอุปกรณ์ 3.3v สามารถใช้ 3v สำหรับการสื่อสาร I2C แต่จะเกิดอะไรขึ้นหากอุปกรณ์สองเครื่องที่ใช้แรงดันไฟฟ้าต่างกันจำเป็นต้องสื่อสารโดยใช้ I2C? รถบัส I2C 5V ไม่สามารถเชื่อมต่อกับอุปกรณ์ ในกรณีนี้ตัวปรับแรงดันไฟฟ้าใช้เพื่อจับคู่ระดับแรงดันไฟฟ้าระหว่างบัส I2C สองตัว
มีเงื่อนไขบางอย่างที่กำหนดกรอบธุรกรรม การเริ่มต้นการส่งข้อมูลเริ่มต้นด้วยขอบที่ลดลงของ SDA ซึ่งกำหนดเป็นเงื่อนไข 'เริ่มต้น' ในแผนภาพด้านล่างโดยที่ต้นแบบปล่อยให้ SCL สูงในขณะที่ตั้งค่า SDA ให้ต่ำ
ดังแสดงในแผนภาพด้านบนด้านล่าง
ขอบที่ตกลงมาของ SDA เป็นตัวกระตุ้นฮาร์ดแวร์สำหรับสภาวะเริ่มต้น หลังจากนี้อุปกรณ์ทั้งหมดบนบัสเดียวกันจะเข้าสู่โหมดการฟัง
ในทำนองเดียวกันขอบที่เพิ่มขึ้นของ SDA จะหยุดการส่งข้อมูลซึ่งแสดงเป็นเงื่อนไข 'STOP' ในแผนภาพด้านบนโดยที่ต้นแบบจะปล่อยให้ SCL สูงและปล่อย SDA เพื่อไปที่สูง ขอบที่เพิ่มขึ้นของ SDA จึงหยุดการส่งผ่าน
บิต R / W ระบุทิศทางของการส่งของไบต์ต่อไปนี้ถ้าเป็น HIGH หมายความว่าทาสจะส่งและถ้ามันต่ำหมายความว่ามาสเตอร์จะส่ง
แต่ละบิตจะถูกส่งไปในแต่ละรอบนาฬิกาดังนั้นจึงใช้เวลา 8 รอบนาฬิกาในการส่งไบต์ หลังจากแต่ละไบต์ส่งหรือรับรอบนาฬิกาที่เก้าจะถูกระงับไว้สำหรับ ACK / NACK (รับทราบ / ไม่รับทราบ) บิต ACK นี้สร้างขึ้นโดยทาสหรือมาสเตอร์ขึ้นอยู่กับสถานการณ์ สำหรับ ACK บิต SDA ถูกตั้งไว้ที่ระดับต่ำโดยต้นแบบหรือทาสที่ 9 THรอบสัญญาณนาฬิกา ดังนั้นจึงถือว่าต่ำเป็น ACK อย่างอื่น NACK
จะใช้การสื่อสาร I2C ได้ที่ไหน?
การสื่อสาร I2C ใช้สำหรับ การสื่อสารระยะสั้นเท่านั้น แน่นอนว่าเชื่อถือได้ในระดับหนึ่งเนื่องจากมีพัลส์นาฬิกาที่ซิงโครไนซ์เพื่อให้สมาร์ท โปรโตคอลนี้ส่วนใหญ่ใช้ในการสื่อสารกับเซ็นเซอร์หรืออุปกรณ์อื่น ๆ ที่ต้องส่งข้อมูลไปยังผู้เชี่ยวชาญ มีประโยชน์มากเมื่อไมโครคอนโทรลเลอร์ต้องสื่อสารกับโมดูลทาสอื่น ๆ จำนวนมากโดยใช้สายไฟขั้นต่ำเท่านั้น หากคุณกำลังมองหาการสื่อสารระยะไกลคุณควรลองใช้ RS232 และหากคุณกำลังมองหาการสื่อสารที่เชื่อถือได้มากขึ้นคุณควรลองใช้โปรโตคอล SPI
I2C ใน MSP430: การควบคุม AD5171 Digital Potentiometer
Energia IDE เป็นหนึ่งในซอฟต์แวร์ที่ง่ายที่สุดในการเขียนโปรแกรม MSP430 ของเรา เหมือนกับ Arduino IDE คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการเริ่มต้นกับ MSP430 โดยใช้ Energia IDE ได้ที่นี่
ดังนั้นในการใช้ I2C ใน Energia IDEเราต้องรวมไฟล์ส่วนหัว wire.h เท่านั้น การประกาศพิน (SDA และ SCL) อยู่ภายในไลบรารีลวดดังนั้นเราจึงไม่จำเป็นต้องประกาศในฟังก์ชัน การตั้งค่า
ตัวอย่างสามารถพบได้ในเมนูตัวอย่างของ IDE หนึ่งในตัวอย่างมีคำอธิบายด้านล่าง:
ตัวอย่างนี้แสดงวิธีการควบคุมโพเทนชิออมิเตอร์ดิจิตอล AD5171 อุปกรณ์อนาล็อกซึ่งสื่อสารผ่านโปรโตคอลอนุกรมซิงโครนัสI2C ด้วยการใช้ I2C Wire Library ของ MSP หม้อดิจิทัลจะก้าวผ่านระดับความต้านทาน 64 ระดับทำให้ LED จางลง
ขั้นแรกเราจะรวมไลบรารีที่รับผิดชอบในการสื่อสาร i2c เช่นไลบรารีลวด
# รวม
ในฟังก์ชัน การตั้งค่า เราจะเริ่มต้นไลบรารีลวดโดยฟังก์ชัน. begin ()
การตั้งค่าเป็นโมฆะ () { Wire.begin (); }
จากนั้นเริ่มต้นตัวแปร วาล์ว เพื่อเก็บค่าของโพเทนชิออมิเตอร์
ไบต์ val = 0;
ในฟังก์ชัน ลูป เราจะเริ่มส่งไปยังอุปกรณ์ทาส i2c (ในกรณีนี้คือ Digital Potentiometer IC) โดยระบุที่อยู่ของอุปกรณ์ซึ่งระบุไว้ในแผ่นข้อมูลของ IC
ห่วงเป็นโมฆะ () { Wire.beginTransmission (44); // ส่งไปยังอุปกรณ์ # 44 (0x2c)
ต่อจากนั้นคิวไบต์คือข้อมูลที่คุณต้องการส่งไปยัง IC เพื่อส่งด้วย ฟังก์ชัน write ()
Wire.write (ไบต์ (0x00)); // ส่งคำสั่ง byte Wire.write (val); // ส่งค่าโพเทนชิออมิเตอร์ไบต์
แล้วส่งพวกเขาโดยการเรียก endTransmission ()
Wire.endTransmission (); // หยุดส่งval ++; // ค่าที่เพิ่มขึ้นถ้า (val == 64) {// ถ้าถึงตำแหน่งที่ 64 (สูงสุด) val = 0; // เริ่มต้นใหม่จากค่าต่ำสุด} ล่าช้า (500); }