- Ano ang SPI?
- Paggawa ng SPI
- Ang mga SPI Pin sa Arduino UNO
- Paggamit ng SPI sa Arduino
- Mga Kinakailangan na Bahagi para sa Arduino SPI na komunikasyon
- Arduino SPI Communication Circuit Diagram
- Paano Mag-Program ng Arduino para sa SPI Communication:
- Arduino SPI Master Programming Paliwanag
- Paliwanag ng Arduino SPI Slave Programming
- Paano gumagana ang SPI sa Arduino? - Subukan natin ito!
Ang isang Microcontroller ay gumagamit ng maraming iba't ibang mga protokol upang makipag-usap sa iba't ibang mga sensor at module. Mayroong maraming iba't ibang mga uri ng mga protocol ng komunikasyon para sa wireless at wired na komunikasyon, at ang pinakakaraniwang ginagamit na pamamaraan ng komunikasyon ay Serial Communication. Ang serial na komunikasyon ay ang proseso ng pagpapadala ng data nang paunti-unti, nang sunud-sunod, sa isang channel ng komunikasyon o bus. Mayroong maraming mga uri ng serial na komunikasyon tulad ng komunikasyon sa UART, CAN, USB, I2C, at SPI.
Sa tutorial na ito, natutunan namin ang tungkol sa SPI protocol at kung paano ito gamitin sa Arduino. Gagamitin namin ang SPI Protocol para sa komunikasyon sa pagitan ng dalawang Arduinos. Dito ang isang Arduino ay gaganap bilang Master at ang isa pa ay gaganap bilang Alipin, ang dalawang LEDs at mga push button ay maiugnay sa parehong Arduino. Upang maipakita ang komunikasyon ng SPI, makokontrol namin ang master side na LED sa pamamagitan ng pindutan ng itulak sa panig ng alipin at kabaligtaran gamit ang SPI Serial na komunikasyon sa komunikasyon.
Ano ang SPI?
Ang SPI (Serial Peripheral Interface) ay isang serial protocol ng komunikasyon. Ang interface ng SPI ay natagpuan ng Motorola noong 1970. Ang SPI ay may isang buong duplex na koneksyon, na nangangahulugang ang data ay ipinapadala at natanggap nang sabay-sabay. Iyon ay isang master ay maaaring magpadala ng data sa isang alipin at ang isang alipin ay maaaring magpadala ng data sa master nang sabay-sabay. Ang SPI ay magkasabay na serial na komunikasyon ay nangangahulugang kinakailangan ang orasan para sa mga layunin ng komunikasyon.
Ang komunikasyon ng SPI ay dating ipinaliwanag sa iba pang mga microcontroller:
- Pakikipag-usap sa SPI sa PIC Microcontroller PIC16F877A
- Pag-interface ng 3.5 pulgada na Touch Screen TFT LCD na may Raspberry Pi
- Programming AVR microcontroller na may mga SPI pin
- Pag-interfacing ng Nokia 5110 Graphical LCD kasama ang Arduino
Paggawa ng SPI
Ang isang SPI ay may master / Slave na komunikasyon sa pamamagitan ng paggamit ng apat na linya. Ang isang SPI ay maaaring magkaroon lamang ng isang panginoon at maaaring magkaroon ng maraming mga alipin. Ang isang master ay karaniwang isang microcontroller at ang mga alipin ay maaaring maging isang microcontroller, sensor, ADC, DAC, LCD atbp.
Nasa ibaba ang representasyon ng bloke ng diagram ng SPI Master na may Single Slave.
Ang SPI ay sumusunod sa apat na linya na MISO, MOSI, SS, at CLK
- MISO (Master in Slave Out) - Ang linya ng Alipin para sa pagpapadala ng data sa master.
- MOSI (Master Out Slave In) - Ang linya ng Master para sa pagpapadala ng data sa mga peripheral.
- SCK (Serial Clock) - Ang pulso ng orasan na sumasabay sa paghahatid ng data na nabuo ng master.
- SS (Slave Select) –Maaaring gamitin ng Master ang pin na ito upang paganahin at huwag paganahin ang mga tukoy na aparato.
SPI Master na may Maramihang Mga Alipin
Upang simulan ang komunikasyon sa pagitan ng master at alipin kailangan naming itakda ang pin na kinakailangan ng Slave Select (SS) ng aparato sa LOW, upang maaari itong makipag-usap sa master. Kapag ito ay mataas, hindi nito pinapansin ang master. Pinapayagan ka nitong magkaroon ng maraming mga aparato ng SPI na nagbabahagi ng parehong mga linya ng master ng MISO, MOSI, at CLK. Tulad ng nakikita mo sa imahe sa itaas mayroong apat na alipin kung saan ang SCLK, MISO, MOSI ay karaniwang konektado sa master at ang SS ng bawat alipin ay magkakaugnay na konektado sa mga indibidwal na SS pin (SS1, SS2, SS3) ng master. Sa pamamagitan ng pagtatakda ng kinakailangang SS pin LOW isang master ay maaaring makipag-usap sa alipin na iyon.
Ang mga SPI Pin sa Arduino UNO
Ipinapakita ng imahe sa ibaba ang mga SPI pin na naroroon sa Arduino UNO (sa pulang kahon).
Linya ng SPI |
I-pin sa Arduino |
MOSI |
11 o ICSP-4 |
MISO |
12 o ICSP-1 |
SCK |
13 o ICSP-3 |
SS |
10 |
Paggamit ng SPI sa Arduino
Bago simulan ang programa para sa komunikasyon ng SPI sa pagitan ng dalawang Arduinos. Kailangan nating malaman ang tungkol sa Arduino SPI library na ginamit sa Arduino IDE.
Ang silid-aklatan
1. SPI.begin ()
PAGGAMIT: Upang Pasimulan ang SPI bus sa pamamagitan ng pagtatakda ng SCK, MOSI, at SS sa mga output, hinila ang SCK at MOSI mababa, at mataas ang SS.
2. SPI.setClockDivider (divider)
GAMIT: Upang Itakda ang divider ng relo ng SPI na may kaugnayan sa orasan ng system. Ang mga magagamit na divider ay 2, 4, 8, 16, 32, 64 o 128.
Dividers:
- SPI_CLOCK_DIV2
- SPI_CLOCK_DIV4
- SPI_CLOCK_DIV8
- SPI_CLOCK_DIV16
- SPI_CLOCK_DIV32
- SPI_CLOCK_DIV64
- SPI_CLOCK_DIV128
3. SPI.attachInterrupt (handler)
PAGGAMIT: Ang pagpapaandar na ito ay tinawag kapag ang isang aparato ng alipin ay tumatanggap ng data mula sa master.
4. SPI.transfer (val)
PAGGAMIT: Ang pagpapaandar na ito ay ginagamit upang sabay na magpadala at tumanggap ng data sa pagitan ng master at alipin.
Kaya't magsimula tayo ngayon sa praktikal na pagpapakita ng SPI protocol sa Arduino. Sa tutorial na ito gagamitin namin ang dalawang arduino isa bilang master at iba pa bilang alipin. Parehong nakakabit ang Arduino na may magkahiwalay na LED at isang pindutan ng push. Ang Master LED ay maaaring makontrol sa pamamagitan ng paggamit ng push button ng alipin at ang LED ng alipin na Arduino ay maaaring makontrol ng push button ng master Arduino gamit ang SPI komunikasyon protocol na naroroon sa arduino.
Mga Kinakailangan na Bahagi para sa Arduino SPI na komunikasyon
- Arduino UNO (2)
- LED (2)
- Push Button (2)
- Resistor 10k (2)
- Resistor 2.2k (2)
- Breadboard
- Mga Koneksyon sa Mga Wires
Arduino SPI Communication Circuit Diagram
Ipinapakita ng diagram ng circuit sa ibaba kung paano gamitin ang SPI sa Arduino UNO, ngunit maaari mong sundin ang parehong pamamaraan para sa Arduino Mega SPI Communication o Arduino nano SPI na komunikasyon. Halos lahat ay mananatiling pareho maliban sa numero ng pin. Kailangan mong suriin ang pinout ng Arduino nano o mega upang makita ang mga pin ng Arduino nano SPI at Arduino Mega pin, sa oras na nagawa mo na ang lahat ay magiging pareho.
Naitayo ko ang circuit na ipinakita sa itaas sa isang breadboard, makikita mo ang set-up ng circuit na ginamit ko para sa pagsubok sa ibaba.
Paano Mag-Program ng Arduino para sa SPI Communication:
Ang tutorial na ito ay may dalawang programa isa para sa master Arduino at iba pa para sa alipin na Arduino. Ang kumpletong mga programa para sa magkabilang panig ay ibinibigay sa pagtatapos ng proyektong ito.
Arduino SPI Master Programming Paliwanag
1. Una sa lahat kailangan nating isama ang library ng SPI para sa paggamit ng mga pagpapaandar sa komunikasyon ng SPI.
# isama
2. Sa void setup ()
- Nagsisimula Kami ng Serial Communication sa Baud Rate 115200.
Serial.begin (115200);
- Ikabit ang LED upang i-pin ang 7 at pindutan ng Push upang i-pin ang 2 at itakda ang mga pin na OUTPUT at INPUT ayon sa pagkakabanggit.
pinMode (ipbutton, INPUT); pinMode (LED, OUTPUT);
- Susunod na sinisimulan namin ang komunikasyon ng SPI
SPI.begin ();
- Susunod na itinakda namin ang Clockdivider para sa komunikasyon ng SPI. Dito naitakda namin ang divider 8.
SPI.setClockDivider (SPI_CLOCK_DIV8);
- Pagkatapos itakda ang SS pin MATAAS dahil hindi namin sinimulan ang anumang paglipat sa alipin arduino.
digitalWrite (SS, TAAS);
3. Sa void loop ():
- Nabasa namin ang katayuan ng pushbutton pin na konektado sa pin2 (Master Arduino) para sa pagpapadala ng halagang iyon sa alipin na Arduino.
buttonvalue = digitalRead (ipbutton);
- Itakda ang Logic para sa pagtatakda ng x halaga (Upang maipadala sa alipin) depende sa pag-input mula sa pin 2
kung (buttonvalue == MATAAS) { x = 1; } iba pa { x = 0; }
- Bago ipadala ang halagang kailangan namin upang MABABA ang halaga ng pagpili ng alipin upang simulan ang paglipat sa alipin mula sa master.
digitalWrite (SS, LOW);
- Narito ang mahalagang hakbang, sa sumusunod na pahayag ipinadala namin ang halaga ng push button na nakaimbak sa variable ng Mastersend sa alipin na arduino at tumatanggap din ng halaga mula sa alipin na maiimbak sa variable ng Mastereceive .
Mastereceive = SPI.transfer (Mastersend);
- Matapos na nakasalalay sa halaga ng Mastereceive bubuksan natin ang Master Arduino LED ON o OFF.
kung (Mastereceive == 1) { digitalWrite (LED, HIGH); // Nagtatakda ng pin 7 TAAS Serial.println ("Master LED ON"); } iba pa { digitalWrite (LED, LOW); // Sets pin 7 LOW Serial.println ("Master LED OFF"); }
Tandaan: Gumagamit kami ng serial.println () upang matingnan ang resulta sa Serial Motor ng Arduino IDE. Suriin ang Video sa dulo.
Paliwanag ng Arduino SPI Slave Programming
1. Una sa lahat kailangan nating isama ang library ng SPI para sa paggamit ng mga pagpapaandar sa komunikasyon ng SPI.
# isama
2. Sa void setup ()
- Nagsisimula Kami ng Serial Communication sa Baud Rate 115200.
Serial.begin (115200);
- Ikabit ang LED upang i-pin ang 7 at pindutan ng Push sa pin2 at itakda ang mga pin na OUTPUT at INPUT ayon sa pagkakabanggit.
pinMode (ipbutton, INPUT); pinMode (LED, OUTPUT);
- Ang mahalagang hakbang dito ay ang mga sumusunod na pahayag
pinMode (MISO, OUTPUT);
Itinakda ng pahayag sa itaas ang MISO bilang OUTPUT (Kailangang Magpadala ng data sa Master IN). Kaya't ang data ay ipinadala sa pamamagitan ng MISO ng Slave Arduino.
- Ngayon I-on ang SPI sa Slave Mode sa pamamagitan ng paggamit ng SPI Control Rehistro
SPCR - = _BV (SPE);
- Pagkatapos ay i-ON ang makagambala para sa komunikasyon ng SPI. Kung ang isang data ay natanggap mula sa master ang Interrupt Routine ay tinawag at ang natanggap na halaga ay kinuha mula sa SPDR (SPI Data register)
SPI.attachInterrupt ();
- Ang halaga mula sa master ay kinuha mula sa SPDR at nakaimbak sa Slavereceived variable. Nagaganap ito sa pagsunod sa pag-andar ng Nakagambala na Rutin.
ISR (SPI_STC_vect) { Slavereceived = SPDR; natanggap = totoo; }
3. Susunod sa void loop () itinakda namin ang Slave arduino LED upang buksan o I-OFF depende sa halaga ng Slavereceived.
kung (Slavereceived == 1) { digitalWrite (LEDpin, HIGH); // Itinatakda ang pin 7 bilang HIGH LED ON Serial.println ("Slave LED ON"); } iba pa { digitalWrite (LEDpin, LOW); // Itinatakda ang pin 7 bilang LOW LED OFF Serial.println ("Slave LED OFF"); }
- Susunod na nabasa namin ang katayuan ng pindutan ng Slave Arduino Push at iimbak ang halaga sa Slavesend upang maipadala ang halaga kay Master Arduino sa pamamagitan ng pagbibigay halaga sa rehistro ng SPDR.
buttonvalue = digitalRead (buttonpin); kung (buttonvalue == MATAAS) {x = 1; } iba pa {x = 0; } Alipin = x; SPDR = Slavesend;
Tandaan: Gumagamit kami ng serial.println () upang matingnan ang resulta sa Serial Motor ng Arduino IDE. Suriin ang Video sa dulo.
Paano gumagana ang SPI sa Arduino? - Subukan natin ito!
Nasa ibaba ang larawan ng pangwakas na pag-set up para sa pakikipag-usap sa SPI sa pagitan ng dalawang Arduino Boards.
Kapag ang pindutan ng push sa Master side ay pinindot, ang puting LED sa bahagi ng alipin ay ON.
At kapag ang push button sa Slave side ay pinindot, ang Red LED sa Master side ay ON.
Maaari mong suriin ang video sa ibaba upang makita ang pagpapakita ng komunikasyon sa Arduino SPI. Kung mayroon kang anumang mga katanungan mangyaring iwanan ang mga ito sa seksyon ng komento ang aming paggamit sa aming mga forum.