นางสาวภิภาวดี ธรรมสอน เลขที่ 1 กลุ่ม3
SPI
วิธีใช้ SPI (Serial Peripheral Interface) ใน Arduino เพื่อสื่อสารระหว่างบอร์ด Arduino สองตัว
ไมโครคอนโทรลเลอร์ใช้โปรโตคอลต่างๆมากมายเพื่อสื่อสารกับเซ็นเซอร์และโมดูลต่างๆ มีโปรโตคอลการสื่อสารหลายประเภทสำหรับการสื่อสารแบบไร้สายและแบบใช้สายและเทคนิคการสื่อสารที่ใช้กันมากที่สุดคือการสื่อสารแบบอนุกรม การสื่อสารแบบอนุกรมคือกระบวนการส่งข้อมูลทีละบิตตามลำดับผ่านช่องทางการสื่อสารหรือบัส การสื่อสารแบบอนุกรมมีหลายประเภทเช่นการสื่อสาร UART, CAN, USB, I2C และ SPI
ในบทช่วยสอนนี้เราเรียนรู้เกี่ยวกับโปรโตคอล SPI และวิธีใช้งานใน Arduino เราจะใช้ SPI Protocol สำหรับการสื่อสารระหว่างสอง Arduinos ที่นี่ Arduino หนึ่งตัวจะทำหน้าที่เป็น Master และอีกอันจะทำหน้าที่เป็น Slave ไฟ LED สองดวงและปุ่มกดจะเชื่อมต่อกับทั้ง Arduino เพื่อแสดงให้เห็นถึงการสื่อสาร SPI เราจะควบคุม LED ด้านหลักด้วยปุ่มกดที่ด้านทาสและในทางกลับกันโดยใช้โปรโตคอลการสื่อสาร SPI Serial
SPI คืออะไร?
SPI (Serial Peripheral Interface) คือโปรโตคอลการสื่อสารแบบอนุกรม โมโตโรล่าพบอินเทอร์เฟซ SPI ในปี 1970 SPI มีการเชื่อมต่อแบบฟูลดูเพล็กซ์ซึ่งหมายความว่าข้อมูลจะถูกส่งและรับพร้อมกัน นั่นคือมาสเตอร์สามารถส่งข้อมูลไปยังทาสและทาสสามารถส่งข้อมูลไปยังมาสเตอร์ได้พร้อมกัน SPI เป็นการสื่อสารแบบอนุกรมแบบซิงโครนัสหมายความว่าต้องใช้นาฬิกาเพื่อวัตถุประสงค์ในการสื่อสาร
ก่อนหน้านี้การสื่อสาร SPI ได้อธิบายไว้ในไมโครคอนโทรลเลอร์อื่น ๆ :
การสื่อสาร
- SPI กับไมโครคอนโทรลเลอร์ PIC PIC16F877A
- การเชื่อมต่อหน้าจอสัมผัสขนาด 3.5 นิ้ว TFT LCD กับ Raspberry Pi
- การเขียนโปรแกรมไมโครคอนโทรลเลอร์ AVR ด้วยหมุด SPI
- การเชื่อมต่อจอ LCD กราฟิก Nokia 5110 กับ Arduino
การทำงานของ SPI
SPI มีการสื่อสารแบบ Master / Slave โดยใช้สี่บรรทัด SPI สามารถมีมาสเตอร์ได้เพียงคนเดียวและสามารถมีทาสได้หลายคน เจ้านายมักจะเป็นไมโครคอนโทรลเลอร์และทาสสามารถเป็นไมโครคอนโทรลเลอร์เซ็นเซอร์ ADC DAC LCD เป็นต้น
ด้านล่างนี้คือการแสดงแผนภาพบล็อกของ SPI Master พร้อม Single Slave
SPI มีสี่บรรทัดต่อไปนี้
MISO, MOSI, SS และ CLK
MISO (Master in Slave Out)
- สายทาสสำหรับส่งข้อมูลไปยังต้นแบบ
MOSI (Master Out Slave In)
- สายหลักสำหรับส่งข้อมูลไปยังอุปกรณ์ต่อพ่วง
SCK (Serial Clock)
- พัลส์นาฬิกาที่ซิงโครไนซ์การส่งข้อมูลที่สร้างโดยต้นแบบ
SS (Slave Select)
- Master สามารถใช้พินนี้เพื่อเปิดและปิดอุปกรณ์บางอย่าง
SPI Master พร้อมทาสหลายคน
ในการเริ่มต้นการสื่อสารระหว่างมาสเตอร์และสเลฟเราจำเป็นต้องตั้งค่าพิน Slave Select (SS) ของอุปกรณ์ที่ต้องการเป็น LOW เพื่อให้สามารถสื่อสารกับมาสเตอร์ได้ เมื่อมันสูงก็ไม่สนใจหลัก สิ่งนี้ช่วยให้คุณมีอุปกรณ์ SPI หลายเครื่องที่ใช้สายหลัก MISO, MOSI และ CLK เดียวกัน ดังที่คุณเห็นในภาพด้านบนมีทาสสี่ตัวที่ SCLK, MISO, MOSI เชื่อมต่อกับมาสเตอร์และ SS ของทาสแต่ละตัวเชื่อมต่อแยกกันกับหมุด SS แต่ละตัว (SS1, SS2, SS3) ของมาสเตอร์ โดยการตั้งค่า PIN SS ที่ต้องการ LOW มาสเตอร์สามารถสื่อสารกับทาสนั้นได้
SPI Pins ใน Arduino UNO
ภาพด้านล่างแสดงหมุด SPI แสดง Arduino UNO (ในกล่องสีแดง)
ใช้ SPI ใน Arduino
ก่อนเริ่มการเขียนโปรแกรมสำหรับการสื่อสาร SPI ระหว่างสอง Arduinos เราจำเป็นต้องเรียนรู้เกี่ยวกับไลบรารี Arduino SPI ที่ใช้ใน Arduino IDE
ไลบรารี <SPI.h> รวมอยู่ในโปรแกรมสำหรับการใช้ฟังก์ชันต่อไปนี้สำหรับการสื่อสาร SPI
1. SPI.begin ()
ใช้: เพื่อเริ่มต้นบัส SPI โดยตั้งค่า SCK, MOSI และ SS เป็นเอาต์พุตดึง SCK และ MOSI ให้ต่ำและ SS สูง
2. SPI.setClockDivider (ตัวแบ่ง)
ใช้: เพื่อตั้งค่าตัวแบ่งนาฬิกา SPI ที่สัมพันธ์กับนาฬิการะบบ วงเวียนที่มีคือ 2, 4, 8, 16, 32, 64 หรือ 128
วงเวียน:
- SPI_CLOCK_DIV2
- SPI_CLOCK_DIV4
- SPI_CLOCK_DIV8
- SPI_CLOCK_DIV16
- SPI_CLOCK_DIV32
- SPI_CLOCK_DIV64
- SPI_CLOCK_DIV128
3. SPI.attachInterrupt (ตัวจัดการ)
ใช้: ฟังก์ชันนี้ถูกเรียกใช้เมื่ออุปกรณ์ทาสรับข้อมูลจากต้นแบบ
4. SPI.transfer (วาล)
ใช้: ฟังก์ชั่นนี้ใช้เพื่อส่งและรับข้อมูลระหว่าง master และ slave พร้อมกัน
ตอนนี้เรามาเริ่มต้นด้วยการสาธิตโปรโตคอล SPI ใน Arduino กัน ในบทช่วยสอนนี้เราจะใช้ arduino สองตัวเป็น master และอีกตัวเป็น slave Arduino ทั้งสองตัวมีไฟ LED และปุ่มกดแยกกัน Master
LED สามารถควบคุมได้โดยใช้ปุ่มกดของ Arduino และทาส LED ของ Arduino
สามารถควบคุมได้โดยปุ่มกดของ Arduino หลักโดยใช้โปรโตคอลการสื่อสาร SPI
ที่มีอยู่ใน arduino
ส่วนประกอบที่จำเป็นสำหรับการสื่อสาร Arduino SPI
- Arduino UNO (2)
- LED (2)
- Push Button (2)
- Resistor 10k (2)
- Resistor 2.2k (2)
- Breadboard
- Connecting Wires
แผนภาพวงจรสื่อสาร Arduino SPI
แผนภาพวงจรด้านล่างแสดงวิธีใช้ SPI บน Arduino UNO แต่คุณสามารถทำตามขั้นตอนเดียวกันสำหรับการสื่อสาร Arduino Mega SPI หรือการสื่อสาร Arduino nano SPI เกือบทุกอย่างจะยังคงเหมือนเดิมยกเว้นหมายเลขพิน คุณต้องตรวจสอบ pinout ของ Arduino nano หรือ mega เพื่อค้นหาพิน Arduino nano SPI และหมุด Arduino Mega เมื่อคุณทำเสร็จแล้วทุกอย่างจะเหมือนเดิม
ความคิดเห็น
แสดงความคิดเห็น