- SPI क्या है?
- एसपीआई का कार्य करना
- Arduino UNO में SPI पिंस
- Arduino में SPI का उपयोग करना
- Arduino SPI संचार के लिए आवश्यक घटक
- Arduino SPI संचार सर्किट आरेख
- SPI संचार के लिए Arduino प्रोग्राम कैसे करें:
- Arduino SPI मास्टर प्रोग्रामिंग स्पष्टीकरण
- Arduino SPI गुलाम प्रोग्रामिंग स्पष्टीकरण
- Arduino पर SPI कैसे काम करता है? - चलिए इसे टेस्ट करते हैं!
एक माइक्रोकंट्रोलर विभिन्न सेंसर और मॉड्यूल के साथ संचार करने के लिए कई अलग-अलग प्रोटोकॉल का उपयोग करता है। वायरलेस और वायर्ड संचार के लिए कई अलग-अलग प्रकार के संचार प्रोटोकॉल हैं, और सबसे अधिक इस्तेमाल की जाने वाली संचार तकनीक सीरियल कम्युनिकेशन है। सीरियल संचार एक समय में, एक संचार चैनल या बस पर, क्रमिक रूप से डेटा भेजने की प्रक्रिया है। UART, CAN, USB, I2C, और SPI संचार जैसे कई प्रकार के धारावाहिक संचार हैं।
इस ट्यूटोरियल में, हमने एसपीआई प्रोटोकॉल और अरुडिनो में इसका उपयोग कैसे करें, इसके बारे में जाना । हम दो Arduinos के बीच संचार के लिए SPI प्रोटोकॉल का उपयोग करेंगे । यहाँ एक Arduino मास्टर के रूप में कार्य करेगा और दूसरा एक दास के रूप में कार्य करेगा, दो LED और पुश बटन दोनों Arduino से जुड़े होंगे। एसपीआई संचार को प्रदर्शित करने के लिए, हम दास पक्ष पर पुश बटन द्वारा मास्टर साइड एलईडी को नियंत्रित करेंगे और एसपीआई सीरियल संचार प्रोटोकॉल का उपयोग करते हुए इसके विपरीत ।
SPI क्या है?
एसपीआई (सीरियल पेरिफेरल इंटरफेस) एक धारावाहिक संचार प्रोटोकॉल है। एसपीआई इंटरफ़ेस मोटोरोला द्वारा 1970 में पाया गया था। एसपीआई में एक पूर्ण-द्वैध कनेक्शन है, जिसका अर्थ है कि डेटा एक साथ भेजा और प्राप्त किया जाता है। यह एक मास्टर एक गुलाम को डेटा भेज सकता है और एक गुलाम एक साथ मास्टर को डेटा भेज सकता है। एसपीआई सिंक्रोनस सीरियल संचार है मतलब संचार प्रयोजनों के लिए घड़ी की आवश्यकता है।
SPI संचार को पहले अन्य माइक्रोकंट्रोलर में समझाया गया है:
- PIC माइक्रोकंट्रोलर PIC16F877A के साथ SPI कम्युनिकेशन
- रास्पबेरी पाई के साथ 3.5 इंच टच स्क्रीन टीएफटी एलसीडी को इंटरफैस करना
- SPI पिन के साथ AVR माइक्रोकंट्रोलर प्रोग्रामिंग
- Arduino के साथ नोकिया 5110 ग्राफिकल एलसीडी को इंटरफैस करना
एसपीआई का कार्य करना
एक एसपीआई में चार लाइनों का उपयोग करके एक मास्टर / स्लेव संचार होता है। एक एसपीआई में केवल एक मास्टर हो सकता है और कई दास हो सकते हैं। एक मास्टर आमतौर पर एक माइक्रोकंट्रोलर होता है और दास एक माइक्रोकंट्रोलर, सेंसर, एडीसी, डीएसी, एलसीडी आदि हो सकते हैं।
नीचे एकल दास के साथ एसपीआई मास्टर का ब्लॉक आरेख प्रतिनिधित्व है ।
एसपीआई की चार पंक्तियाँ हैं- MISO, MOSI, SS और CLK
- MISO (मास्टर इन स्लेव आउट) - मास्टर को डेटा भेजने के लिए दास रेखा।
- MOSI (मास्टर आउट स्लेव इन) - बाह्य उपकरणों को डेटा भेजने के लिए मास्टर लाइन।
- SCK (सीरियल क्लॉक) - घड़ी की दाल जो मास्टर द्वारा उत्पन्न डेटा ट्रांसमिशन को सिंक्रनाइज़ करती है।
- SS (स्लेव सेलेक्ट) -मास्टर इस पिन का उपयोग विशिष्ट उपकरणों को सक्षम और अक्षम करने के लिए कर सकते हैं।
एकाधिक दासों के साथ एसपीआई मास्टर
मास्टर और दास के बीच संचार शुरू करने के लिए हमें आवश्यक डिवाइस के स्लेव सेलेक्ट (SS) पिन को LOW पर सेट करना होगा, ताकि यह मास्टर के साथ संवाद कर सके। जब यह उच्च होता है, तो यह मास्टर की उपेक्षा करता है। यह आपको एक ही MISO, MOSI और CLK लाइनों को मास्टर करने के लिए कई SPI डिवाइस साझा करने की अनुमति देता है। जैसा कि आप ऊपर की छवि में देख सकते हैं कि चार दास हैं जिनमें SCLK, MISO, MOSI मास्टर से जुड़े हुए हैं और प्रत्येक दास का SS अलग-अलग SS पिन (SS1, SS2, SS3) से अलग-अलग जुड़ा होता है। आवश्यक एसएस पिन को कम करके एक स्वामी उस दास के साथ संवाद कर सकता है।
Arduino UNO में SPI पिंस
नीचे दी गई छवि एसपीआई पिन को Arduino UNO (लाल बॉक्स में) दिखाती है।
एसपीआई लाइन |
Arduino में पिन करें |
MOSI |
11 या आईसीएसपी -4 |
मीसो |
12 या ICSP-1 |
SCK |
13 या आईसीएसपी -3 |
एसएस |
१० |
Arduino में SPI का उपयोग करना
दो Arduinos के बीच SPI संचार के लिए प्रोग्रामिंग शुरू करने से पहले । हमें Arduino IDI में प्रयुक्त Arduino SPI लाइब्रेरी के बारे में जानने की आवश्यकता है ।
पुस्तकालय
1. SPI.begin ()
उपयोग: SCK, MOSI और SS को आउटपुट पर सेट करके SPI बस को इनिशियलाइज़ करने के लिए, 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 (वैल)
उपयोग: इस फ़ंक्शन का उपयोग मास्टर और दास के बीच डेटा भेजने और प्राप्त करने के लिए किया जाता है।
तो अब चलिए Arduino में SPI प्रोटोकॉल के व्यावहारिक प्रदर्शन के साथ शुरू करते हैं। इस ट्यूटोरियल में हम दो आर्डिनो का उपयोग करेंगे एक मास्टर के रूप में और दूसरा दास के रूप में। दोनों Arduino एक एलईडी और एक पुश बटन के साथ अलग से जुड़े हुए हैं। मास्टर एलईडी को Arduino के पुश बटन का उपयोग करके नियंत्रित किया जा सकता है और Arduino में मौजूद SPI संचार प्रोटोकॉल का उपयोग करते हुए Arduino के पुश बटन द्वारा दास Arduino के एलईडी बटन को नियंत्रित किया जा सकता है।
Arduino SPI संचार के लिए आवश्यक घटक
- Arduino UNO (2)
- एलईडी (2)
- पुश बटन (2)
- रोकनेवाला 10k (2)
- रेसिस्टर 2.2k (2)
- ब्रेड बोर्ड
- तारों को जोड़ना
Arduino SPI संचार सर्किट आरेख
नीचे दिए गए सर्किट आरेख से पता चलता है कि Arduino UNO पर SPI का उपयोग कैसे किया जाता है, लेकिन आप Arduino Mega SPI संचार या Arduino नैनो SPI संचार के लिए समान प्रक्रिया का पालन कर सकते हैं। पिन नंबर को छोड़कर लगभग सब कुछ वैसा ही रहेगा। आपको Arduino nano SPI पिन और Arduino मेगा पिन खोजने के लिए Arduino नैनो या मेगा के पिनआउट की जांच करनी होगी, एक बार जब आप यह कर लेंगे कि बाकी सब कुछ समान होगा।
मैंने एक ब्रेडबोर्ड पर ऊपर से दिखाए गए सर्किट का निर्माण किया है, आप सर्किट सेट-अप देख सकते हैं जो मैंने नीचे परीक्षण के लिए उपयोग किया था।
SPI संचार के लिए Arduino प्रोग्राम कैसे करें:
इस ट्यूटोरियल में मास्टर अर्डुइनो के लिए एक और गुलाम अरुडिनो के लिए दो कार्यक्रम हैं। इस परियोजना के अंत में दोनों पक्षों के लिए पूर्ण कार्यक्रम दिए गए हैं।
Arduino SPI मास्टर प्रोग्रामिंग स्पष्टीकरण
1. सबसे पहले हमें SPI संचार कार्यों का उपयोग करने के लिए SPI लाइब्रेरी को शामिल करना होगा।
#शामिल
2. शून्य सेटअप में ()
- हम बौड रेट 115200 पर सीरियल कम्युनिकेशन शुरू करते हैं।
सीरियल.बेगिन (115200);
- 2 पिन करने के लिए 7 और पुश बटन को एलईडी संलग्न करें और उन पिनों को क्रमशः OUTPUT और INPUT सेट करें।
पिनमोड (ipbutton, INPUT); पिनमोड (LED, OUTPUT);
- अगला हम एसपीआई संचार शुरू करते हैं
SPI.begin ();
- आगे हमने SPI संचार के लिए क्लॉकडिवीडर स्थापित किया। यहां हमने डिवाइडर 8 स्थापित किया है।
SPI.setClockDivider (SPI_CLOCK_DIV8);
- फिर एसएस पिन हाई सेट करें क्योंकि हमने दास आर्डिनो को कोई हस्तांतरण शुरू नहीं किया है।
digitalWrite (एसएस, हाई);
3. शून्य लूप () में:
- हमने गुलाम Arduino को उन मानों को भेजने के लिए pin2 (मास्टर Arduino) से जुड़े पुशबटन पिन की स्थिति को पढ़ा।
buttonvalue = digitalRead (ipbutton);
- पिन 2 से इनपुट के आधार पर x मान सेट करने के लिए लॉजिक सेट करें (गुलाम को भेजा जाए)
अगर (बटनवाल == उच्च) { x = 1; } और { x = 0; }
- मूल्य भेजने से पहले हमें गुलाम का चयन करना होगा ताकि स्वामी से दास को हस्तांतरण शुरू किया जा सके।
digitalWrite (SS, LOW);
- यहां महत्वपूर्ण चरण आता है, निम्नलिखित कथन में हम मास्टर्सएंड चर में संग्रहीत पुश बटन मान को दास आर्डिनो में भेजते हैं और दास से मूल्य भी प्राप्त करते हैं जो मास्टेरिव चर में स्टोर किया जाएगा ।
मास्टरीसिव = SPI.transfer (मास्टर्सेंड);
- उसके बाद मास्टरीवेटिव वैल्यू के आधार पर हम मास्टर अरुडिनो एलईडी को चालू या बंद करेंगे।
if (मास्टरीसेिव == 1) { digitalWrite (LED, HIGH); // सेट्स पिन 7 हाई सीरीयल.प्रिंट ("मास्टर एलईडी ऑन"); } और { digitalWrite (LED, LOW); // सेट्स पिन 7 लो सीरीयल। प्रिंट ("मास्टर एलईडी ऑफ"); }
नोट: हम Arduino IDE के सीरियल मोटर में परिणाम देखने के लिए serial.println () का उपयोग करते हैं । वीडियो को अंत में देखें।
Arduino SPI गुलाम प्रोग्रामिंग स्पष्टीकरण
1. सबसे पहले हमें SPI संचार कार्यों का उपयोग करने के लिए SPI लाइब्रेरी को शामिल करना होगा।
#शामिल
2. शून्य सेटअप में ()
- हम बौड रेट 115200 पर सीरियल कम्युनिकेशन शुरू करते हैं।
सीरियल.बेगिन (115200);
- पिन 7 में पिन 7 और पुश बटन के लिए एलईडी संलग्न करें और उन पिनों को क्रमशः OUTPUT और INPUT सेट करें।
पिनमोड (ipbutton, INPUT); पिनमोड (LED, OUTPUT);
- यहाँ महत्वपूर्ण कदम निम्नलिखित कथन है
पिनमोड (MISO, OUTPUT);
उपरोक्त कथन MISO को OUTPUT (मास्टर इन में डेटा भेजना है) के रूप में सेट करता है। तो डेटा स्लेव Arduino के MISO के माध्यम से भेजा जाता है।
- अब SPI कंट्रोल रजिस्टर का उपयोग करके SPI को स्लेव मोड में चालू करें
SPCR - = _BV (SPE);
- फिर एसपीआई संचार के लिए ऑन इंटरप्ट चालू करें। यदि एक डेटा मास्टर से प्राप्त होता है, तो इंटरप्ट रूटिन कहा जाता है और प्राप्त मूल्य SPDR (SPI डेटा रजिस्टर) से लिया जाता है
SPI.attachInterrupt ();
- मास्टर से मूल्य SPDR से लिया जाता है और Slavereceived चर में संग्रहीत किया जाता है। यह इंटरप्ट रूटीन फ़ंक्शन के बाद होता है।
ISR (SPI_STC_vect) { Slavereceived = SPDR; प्राप्त = सत्य; }
3. आगे शून्य लूप () में हम स्लेव अरुडिनो एलईडी को सेट करते हैं जो Slavereceived मान के आधार पर चालू या बंद करता है।
if (Slavereceived == 1) { digitalWrite (LEDpin, HIGH); // सेट 7 पिन के रूप में उच्च एलईडी पर Serial.println ("गुलाम एलईडी पर"); } और { digitalWrite (LEDpin, LOW); // सेट पिन 7 के रूप में कम एलईडी बंद सीरियल। प्रिंट ("गुलाम एलईडी बंद"); }
- आगे हमने स्लेव अरुडिनो पुश बटन की स्थिति पढ़ी और स्लेवेंडेंड में मूल्य को एसपीडीआर रजिस्टर को मूल्य देकर मास्टर अरुडिनो को मूल्य भेजने के लिए संग्रहीत किया ।
buttonvalue = digitalRead (बटनपिन); अगर (बटनवाल == उच्च) {x = 1; } और {x = 0; } दास = x; एसपीडीआर = दास;
नोट: हम Arduino IDE के सीरियल मोटर में परिणाम देखने के लिए serial.println () का उपयोग करते हैं । वीडियो को अंत में देखें।
Arduino पर SPI कैसे काम करता है? - चलिए इसे टेस्ट करते हैं!
नीचे दो Arduino बोर्डों के बीच SPI संचार के लिए अंतिम सेटअप की तस्वीर है ।
जब मास्टर साइड में पुश बटन दबाया जाता है, तो गुलाम की तरफ सफेद एलईडी चालू हो जाती है।
और जब स्लेव साइड में पुश बटन दबाया जाता है, तो मास्टर साइड पर रेड एलईडी चालू होता है।
आप Arduino SPI संचार के प्रदर्शन को देखने के लिए नीचे दिए गए वीडियो की जांच कर सकते हैं। यदि आपके कोई प्रश्न हैं तो कृपया टिप्पणी अनुभाग में उन्हें छोड़ दें हमारे मंचों का उपयोग करें।