อินเทอร์เฟซ SPI และ Arduino

สารบัญ:

อินเทอร์เฟซ SPI และ Arduino
อินเทอร์เฟซ SPI และ Arduino

วีดีโอ: อินเทอร์เฟซ SPI และ Arduino

วีดีโอ: อินเทอร์เฟซ SPI และ Arduino
วีดีโอ: arduino spi 2024, พฤศจิกายน
Anonim

เราศึกษาอินเทอร์เฟซ SPI และเชื่อมต่อ shift register กับ Arduino ซึ่งเราจะเข้าถึงโดยใช้โปรโตคอลนี้เพื่อควบคุม LED

อินเทอร์เฟซ SPI
อินเทอร์เฟซ SPI

จำเป็น

  • - Arduino;
  • - กะทะเบียน 74HC595;
  • - ไฟ LED 8 ดวง;
  • - ตัวต้านทาน 8 ตัว 220 โอห์ม

คำแนะนำ

ขั้นตอนที่ 1

SPI - Serial Peripheral Interface หรือ "Serial Peripheral Interface" เป็นโปรโตคอลการถ่ายโอนข้อมูลแบบซิงโครนัสสำหรับเชื่อมต่ออุปกรณ์หลักกับอุปกรณ์ต่อพ่วง (ทาส) เจ้านายมักเป็นไมโครคอนโทรลเลอร์ การสื่อสารระหว่างอุปกรณ์ดำเนินการผ่านสายสี่สาย ซึ่งเป็นสาเหตุที่บางครั้ง SPI ถูกเรียกว่า "อินเทอร์เฟซแบบสี่สาย" ยางเหล่านี้คือ:

MOSI (Master Out Slave In) - สายส่งข้อมูลจากมาสเตอร์ไปยังอุปกรณ์สเลฟ

MISO (Master In Slave Out) - สายส่งจากสเลฟไปยังมาสเตอร์

SCLK (นาฬิกาอนุกรม) - พัลส์นาฬิกาการซิงโครไนซ์ที่สร้างโดยต้นแบบ

SS (Slave Select) - บรรทัดการเลือกอุปกรณ์สเลฟ เมื่ออยู่ในบรรทัด "0" ทาส "เข้าใจ" ว่ามีการเข้าถึง

การถ่ายโอนข้อมูลมีสี่โหมด (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3) เนื่องจากการรวมกันของขั้วสัญญาณนาฬิกา (เราทำงานที่ระดับสูงหรือต่ำ) ขั้วนาฬิกา CPOL และเฟสของพัลส์นาฬิกา (การซิงโครไนซ์ บนขอบขึ้นหรือลงของพัลส์นาฬิกา), เฟสนาฬิกา, CPHA

รูปแสดงสองตัวเลือกสำหรับการเชื่อมต่ออุปกรณ์โดยใช้โปรโตคอล SPI: อิสระและแบบเรียงซ้อน เมื่อเชื่อมต่อกับบัส SPI อย่างอิสระ มาสเตอร์จะสื่อสารกับแต่ละสเลฟทีละตัว ด้วยน้ำตก - อุปกรณ์สเลฟจะถูกทริกเกอร์สลับกันในน้ำตก

ประเภทของการเชื่อมต่อ SPI
ประเภทของการเชื่อมต่อ SPI

ขั้นตอนที่ 2

ใน Arduino บัส SPI อยู่บนพอร์ตเฉพาะ แต่ละบอร์ดมีการกำหนดพินของตัวเอง เพื่อความสะดวก หมุดจะถูกทำซ้ำและวางบนตัวเชื่อมต่อ ICSP (In Circuit Serial Programming) แยกต่างหาก โปรดทราบว่าไม่มีพินเลือกทาสบนตัวเชื่อมต่อ ICSP - SS เนื่องจาก สันนิษฐานว่าจะใช้ Arduino เป็นต้นแบบในเครือข่าย แต่ถ้าจำเป็น คุณสามารถกำหนดพินดิจิทัลของ Arduino เป็น SS ได้

รูปแสดงการกำหนดมาตรฐานของพินไปยังบัส SPI สำหรับ Arduino UNO และ Nano

การใช้ SPI ใน Arduino
การใช้ SPI ใน Arduino

ขั้นตอนที่ 3

มีการเขียนไลบรารีพิเศษสำหรับ Arduino ที่ใช้โปรโตคอล SPI มีการเชื่อมต่อดังนี้: ที่จุดเริ่มต้นของโปรแกรม ให้เพิ่ม #include SPI.h

ในการเริ่มทำงานกับโปรโตคอล SPI คุณต้องตั้งค่าและเริ่มต้นโปรโตคอลโดยใช้ขั้นตอน SPI.beginTransaction () คุณสามารถทำได้ด้วยคำสั่งเดียว: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0))

ซึ่งหมายความว่าเราเริ่มต้นโปรโตคอล SPI ที่ความถี่ 14 MHz การถ่ายโอนข้อมูลเริ่มต้นจาก MSB (บิตที่สำคัญที่สุด) ในโหมด "0"

หลังจากการเริ่มต้น เราเลือกอุปกรณ์สเลฟโดยใส่พิน SS ที่สอดคล้องกันในสถานะ LOW

จากนั้นเราถ่ายโอนข้อมูลไปยังอุปกรณ์สเลฟด้วยคำสั่ง SPI.transfer ()

หลังจากส่ง เราจะคืน SS เป็นสถานะสูง

ทำงานกับโปรโตคอลลงท้ายด้วยคำสั่ง SPI.endTransaction () ขอแนะนำให้ลดเวลาดำเนินการของการถ่ายโอนระหว่างคำสั่ง SPI.beginTransaction () และ SPI.endTransaction () เพื่อไม่ให้เกิดการทับซ้อนกันหากอุปกรณ์อื่นพยายามเริ่มต้นการถ่ายโอนข้อมูลโดยใช้การตั้งค่าที่แตกต่างกัน

การส่ง SPI
การส่ง SPI

ขั้นตอนที่ 4

ลองพิจารณาการใช้งานจริงของอินเทอร์เฟซ SPI เราจะจุดไฟ LED โดยควบคุมการลงทะเบียนกะ 8 บิตผ่านบัส SPI มาเชื่อมต่อ 74HC595 shift register กับ Arduino เราเชื่อมต่อกับเอาต์พุตทั้ง 8 เอาต์พุตผ่าน LED (ผ่านตัวต้านทานที่จำกัด) แผนภาพแสดงในรูป

กำลังเชื่อมต่อ shift register 74HC595 กับ Arduino
กำลังเชื่อมต่อ shift register 74HC595 กับ Arduino

ขั้นตอนที่ 5

มาเขียนแบบร่างกันเถอะ

ขั้นแรก มาเชื่อมต่อไลบรารี SPI และเริ่มต้นอินเทอร์เฟซ SPI มากำหนดพิน 8 เป็นพินการเลือกสเลฟ มาล้างการลงทะเบียนกะโดยส่งค่า "0" ไปที่มัน เราเริ่มต้นพอร์ตอนุกรม

หากต้องการให้ไฟ LED เฉพาะโดยใช้ shift register คุณต้องใส่ตัวเลข 8 บิตกับอินพุต ตัวอย่างเช่น เพื่อให้ LED ดวงแรกสว่างขึ้น เราป้อนเลขฐานสอง 00000001 สำหรับอันที่สอง - 00000010 สำหรับอันที่สาม - 00000100 เป็นต้น เลขฐานสองเหล่านี้ในรูปแบบเลขฐานสิบมีลำดับต่อไปนี้: 1, 2, 4, 8, 16, 32, 64, 128 และเป็นกำลังสองจาก 0 ถึง 7

ดังนั้นในลูป () ด้วยจำนวน LED เราคำนวณใหม่จาก 0 ถึง 7 ฟังก์ชัน pow (ฐาน, องศา) ยก 2 เป็นกำลังของตัวนับรอบ ไมโครคอนโทรลเลอร์ทำงานไม่ถูกต้องนักกับตัวเลขประเภท "คู่" ดังนั้นในการแปลงผลลัพธ์เป็นจำนวนเต็ม เราใช้ฟังก์ชันปัดเศษ () และเราโอนหมายเลขผลลัพธ์ไปยังรีจิสเตอร์กะ เพื่อความชัดเจน จอภาพพอร์ตอนุกรมจะแสดงค่าที่ได้รับระหว่างการดำเนินการนี้: หนึ่งวิ่งผ่านตัวเลข - ไฟ LED จะสว่างเป็นคลื่น

ร่างสำหรับควบคุม shift register ผ่าน SPI bus
ร่างสำหรับควบคุม shift register ผ่าน SPI bus

ขั้นตอนที่ 6

ไฟ LED จะสว่างขึ้น และเราสังเกตเห็น "คลื่น" ที่กำลังเคลื่อนที่ LED ถูกควบคุมโดยใช้ shift register ซึ่งเราเชื่อมต่อผ่านอินเทอร์เฟซ SPI เป็นผลให้ใช้พิน Arduino เพียง 3 ตัวเพื่อขับเคลื่อน LED 8 ดวง

เราได้ศึกษาตัวอย่างที่ง่ายที่สุดว่า Arduino ทำงานร่วมกับบัส SPI อย่างไร เราจะพิจารณารายละเอียดเพิ่มเติมเกี่ยวกับการเชื่อมต่อของ shift register ในบทความแยกต่างหาก

แนะนำ: