- Bit Banging क्या है?
- बिट बंगिंग का उपयोग कब करें
- बिट बैंगिंग के माध्यम से सीरियल कम्युनिकेशन के लिए एल्गोरिदम
- एसपीआई पर बिट बैंगिंग
- बिट बैंगिंग का उदाहरण: Arduino में SPI संचार
- बिट बैंगिंग के नुकसान
- Arduino में बिट पीटने के माध्यम से UART
संचार इंटरफेस उन कारकों में से एक हैं जिन्हें एक परियोजना के लिए उपयोग किए जाने वाले माइक्रोकंट्रोलर का चयन करते समय माना जाता है। डिजाइनर यह सुनिश्चित करता है कि चुने जाने वाले माइक्रोकंट्रोलर में उत्पाद के लिए उपयोग किए जाने वाले अन्य सभी घटकों के साथ संचार करने के लिए आवश्यक सभी इंटरफेस हों। माइक्रोकंट्रोलर पर एसपीआई और आई 2 सी जैसे कुछ इंटरफेस का अस्तित्व हमेशा ऐसे माइक्रोकंट्रोलर की लागत को बढ़ाता है, और बीओएम बजट के आधार पर यह एक वांछित माइक्रोकंट्रोलर को सस्ती नहीं बना सकता है। इन स्थितियों में बिट बैंगिंग जैसी तकनीकें खेलने के लिए आती हैं।
Bit Banging क्या है?
बिट बैंगिंग धारावाहिक संचार के लिए एक तकनीक है जिसमें संपूर्ण संचार प्रक्रिया को समर्पित हार्डवेयर के बजाय सॉफ्टवेयर के माध्यम से नियंत्रित किया जाता है। डेटा संचारित करने के लिए, तकनीक में डेटा को संकेतों और दालों में सांकेतिक शब्दों में बदलना करने के लिए सॉफ्टवेयर का उपयोग शामिल है जो कि एक माइक्रोकंट्रोलर के I / O पिन की स्थिति में हेरफेर करने के लिए उपयोग किया जाता है जो लक्ष्य डिवाइस को डेटा भेजने के लिए Tx पिन के रूप में कार्य करता है। डेटा प्राप्त करने के लिए, तकनीक में कुछ अंतरालों के बाद आरएक्स पिन की स्थिति का नमूना लेना शामिल है जो संचार बॉड दर द्वारा निर्धारित किया जाता है। सॉफ्टवेयर इस संचार को प्राप्त करने के लिए आवश्यक सभी पैरामीटर सेट करता है जिसमें सिंक्रोनाइज़ेशन, टाइमिंग, स्तर आदि शामिल हैं, जो आमतौर पर समर्पित हार्डवेयर द्वारा तय किए जाते हैं जब बिट पीटने का उपयोग नहीं किया जाता है।
बिट बंगिंग का उपयोग कब करें
बिट-बैंगिंग आमतौर पर उन स्थितियों में उपयोग किया जाता है जहां आवश्यक इंटरफ़ेस वाला एक माइक्रोकंट्रोलर उपलब्ध नहीं होता है या जब आवश्यक इंटरफ़ेस के साथ एक माइक्रोकंट्रोलर पर स्विच करना बहुत महंगा हो सकता है। इस प्रकार यह कई प्रोटोकॉल का उपयोग करके संवाद करने के लिए एक ही उपकरण को सक्षम करने का एक सस्ता तरीका प्रदान करता है। एक माइक्रोकंट्रोलर जो पहले केवल UART संचार के लिए सक्षम है, को बिट बैंगिंग के माध्यम से SPI और 12C का उपयोग करके संचार करने के लिए सुसज्जित किया जा सकता है।
बिट बैंगिंग के माध्यम से सीरियल कम्युनिकेशन के लिए एल्गोरिदम
जबकि बिट बैंगिंग को लागू करने का कोड विविध माइक्रोकंट्रोलर में भिन्न हो सकता है और विभिन्न सीरियल प्रोटोकॉल के लिए भी भिन्न हो सकता है, लेकिन बिट बैंग को लागू करने के लिए प्रक्रिया / एल्गोरिदम सभी प्लेटफार्मों पर समान है।
उदाहरण के लिए डेटा भेजने के लिए नीचे छद्म कोड का उपयोग किया जाता है;
- शुरू
- प्रारंभ बिट भेजें
- रिसीवर की बॉड दर के अनुरूप समय के लिए प्रतीक्षा करें
- डेटा बिट भेजें
- रिसीवर की बॉड दर के साथ फिर से मेल करने के लिए अवधि की प्रतीक्षा करें
- जांचें कि क्या सभी डेटा बिट्स भेजे गए हैं। यदि नहीं, तो 4 पर जाएं। यदि हां, गोटो 7
- स्टॉप बिट भेजें
- रुकें
डेटा प्राप्त करना थोड़ा और अधिक जटिल हो जाता है, आमतौर पर यह निर्धारित करने के लिए एक बाधा का उपयोग किया जाता है कि रिसीवर पिन पर डेटा कब उपलब्ध है। यह सुनिश्चित करने में मदद करता है कि माइक्रोकंट्रोलर बहुत अधिक प्रसंस्करण शक्ति बर्बाद न करे। हालाँकि कुछ कार्यान्वयन में किसी भी माइक्रोकंट्रोलर I / O पिन का उपयोग किया जाता है, लेकिन शोर और त्रुटियों की संभावना, यदि संभवत: नहीं संभाली जाती है, तो अधिक होती है। इंटरप्ट का उपयोग करके डेटा प्राप्त करने के लिए एल्गोरिथ्म को नीचे समझाया गया है।
- शुरू
- Rx पिन पर व्यवधान सक्षम करें
- जब रुकावट शुरू होती है, तो प्रारंभ बिट प्राप्त करें
- बॉड दर के अनुसार समय का इंतजार करें
- आरएक्स पिन पढ़ें
- सभी डेटा प्राप्त होने तक 4 से दोहराएं
- बॉड दर के अनुसार समय का इंतजार करें
- स्टॉप बिट के लिए जाँच करें
- रुकें
एसपीआई पर बिट बैंगिंग
जैसा कि ऊपर उल्लेख किया गया है, अलग-अलग प्रोटोकॉल के लिए बिट पीटना अलग तरीके से काम करता है और इस प्रकार प्रत्येक प्रोटोकॉल के बारे में पढ़ना महत्वपूर्ण है, डेटा फ्रेमन और लागू करने से पहले क्लॉकिंग को समझने के लिए। उदाहरण के रूप में SPI मोड 1 को लेते हुए, घड़ी का आधार मान हमेशा 0 होता है और डेटा हमेशा घड़ी के बढ़ते किनारे पर भेजा या प्राप्त किया जाता है। SPI मोड 1 संचार प्रोटोकॉल के लिए समय आरेख नीचे दिखाया गया है।
इसे लागू करने के लिए, निम्नलिखित एल्गोरिथ्म का उपयोग किया जा सकता है;
- शुरू
- संचार शुरू करने के लिए एसएस पिन कम सेट करें
- भेजे जाने वाले डेटा के पहले बिट में मास्टर आउट स्लेव इन (MOSI) के लिए पिन सेट करें
- क्लॉक पिन (SCK) उच्च सेट करें ताकि डेटा मास्टर द्वारा प्रेषित हो और दास द्वारा प्राप्त हो
- गुलाम से डेटा का पहला बिट प्राप्त करने के लिए मास्टर ऑफ स्लेव आउट (MISO) की स्थिति पढ़ें
- SCK Low सेट करें, ताकि अगली बढ़ती बढ़त पर डेटा भेजा जा सके
- सभी डेटा बिट्स प्रेषित होने तक 2 पर जाएं।
- ट्रांसमिशन को रोकने के लिए SS पिन हाई सेट करें।
- रुकें
बिट बैंगिंग का उदाहरण: Arduino में SPI संचार
एक उदाहरण के रूप में, चलिए Arduino में बिट बैंगिंग के माध्यम से SPI संचार के लिए एल्गोरिदम को लागू करते हैं, यह दिखाने के लिए कि नीचे दिए गए कोड का उपयोग करके डेटा को SPI पर कैसे धमाका किया जा सकता है।
हम Arduino के पिन का उपयोग करने की घोषणा करके शुरू करते हैं ।
const int SSPin = 11; const int SCKPin = 10; const int MISOPin = 9; const int MOSIPin = 8; बाइट सेंडडाटा = 64; // भेजी जाने वाली बाइट slaveData = 0; // दास द्वारा भेजे गए मूल्य को संग्रहीत करने के लिए
अगला, हम शून्य सेटअप () फ़ंक्शन पर जाते हैं जहां पिंस की स्थिति घोषित की जाती है। केवल मास्टर इन स्लेव आउट (MISO) पिन को एक इनपुट के रूप में घोषित किया जाता है क्योंकि यह एकमात्र पिन है जो डेटा प्राप्त करता है। अन्य सभी पिन आउटपुट के रूप में घोषित किए जाते हैं। पिन मोड घोषित करने के बाद, SS पिन को हाई पर सेट किया जाता है। इसका कारण यह सुनिश्चित करने के लिए है कि प्रक्रिया त्रुटि मुक्त है और संचार केवल तब शुरू होता है जब इसे कम पर सेट किया जाता है।
शून्य सेटअप () { pinMode (MISOPin, INPUT); पिनमोड (SSPin, OUTPUT); पिनमोड (SCKPin, OUTPUT); पिनमोड (MOSIPIN, OUTPUT); डिजिटलव्रीट (एसएसपीएन, हाई); }
अगला, हम डेटा भेजने के लिए लूप शुरू करते हैं । ध्यान दें कि यह लूप बार-बार डेटा भेजता रहेगा।
हम एसएस पिन को कम लिखकर लूप शुरू करते हैं, संचार की शुरुआत करने के लिए, और बिटबैंगटाटा फ़ंक्शन पर कॉल करते हैं जो पूर्वनिर्धारित डेटा को बिट्स में भेजते हैं और भेजते हैं। ऐसा किए जाने के साथ, हम फिर डेटा ट्रांसमिशन के अंत को इंगित करने के लिए एसएस पिन हाई लिखते हैं।
शून्य लूप () { digitalWrite (SSPin, LOW); // एसएस कम दासता = बिटबंगडाटा (सेंडडाटा); // डेटा ट्रांसमिशन डिजिटलव्रीट (एसएसपीएन, हाई); // SS उच्च फिर }
Bitbangdata () समारोह नीचे लिखा है। फ़ंक्शन को भेजे जाने वाले डेटा में लेता है और इसे बिट्स में तोड़ता है और ट्रांसमिशन के लिए कोड पर लूपिंग करके भेजता है जैसा कि एल्गोरिथ्म के चरण 7 में इंगित किया गया है।
बाइट bitBangData (बाइट _send) // यह फ़ंक्शन बिटबैंगिंग { बाइट _recep = 0 के माध्यम से डेटा संचारित करता है ; for (int i = 0; i <8; i ++) // 8 बिट में एक बाइट { digitalWrite (MOSIPIN, bitRead (_send, i)); // सेट MOSI digitalWrite (SCKPin, HIGH); // SCK उच्च बिटराइट (_receive, i, digitalRead (MISOPin)); // कैप्चर MISO digitalWrite (SCKPin, LOW); // SCK कम } वापसी _receive; // प्राप्त डेटा वापस करें }
बिट बैंगिंग के नुकसान
लेकिन बिट बैंगिंग को अपनाना एक अच्छा निर्णय होना चाहिए क्योंकि बिट बैंगिंग के लिए कई डाउनसाइड हैं जो कि कुछ समाधानों में कार्यान्वयन के लिए विश्वसनीय नहीं हो सकते हैं। बिट बैंगिंग प्रक्रिया द्वारा खपत उच्च प्रसंस्करण शक्ति के कारण माइक्रोकंट्रोलर द्वारा खपत की गई शक्ति को बढ़ाता है। समर्पित हार्डवेयर की तुलना में, ग्लिट्स और जिटर्स की तरह अधिक संचार त्रुटियां होती हैं, जब बिट बैंगिंग का उपयोग विशेष रूप से तब किया जाता है, जब अन्य कार्यों की तरह एक ही समय में माइक्रोकंट्रोलर द्वारा डेटा संचार किया जा रहा हो। बिट बैंगिंग के माध्यम से संचार उस गति के एक अंश पर होता है जिसके साथ यह तब होता है जब समर्पित हार्डवेयर का उपयोग किया जाता है। यह कुछ अनुप्रयोगों में महत्वपूर्ण हो सकता है और बिट को "इतना अच्छा नहीं" विकल्प बना सकता है।
बिट बैंगिंग का उपयोग सभी प्रकार के धारावाहिक संचार के लिए किया जाता है; RS-232, एसिंक्रोनस सीरियल कम्युनिकेशन, UART, SPI और I2C।
Arduino में बिट पीटने के माध्यम से UART
बिट बैंगिंग के लोकप्रिय कार्यान्वयन में से एक Arduino Software Serial पुस्तकालय है जो Arduino को समर्पित हार्डवेयर UART पिन (D0 और D1) का उपयोग किए बिना UART पर संवाद करने में सक्षम बनाता है। यह बहुत अधिक लचीलापन देता है क्योंकि उपयोगकर्ता कई धारावाहिक उपकरणों से जुड़ सकते हैं क्योंकि Arduino बोर्ड पर पिन की संख्या का समर्थन कर सकते हैं।