माइक्रोकंट्रोलर मूल बातें समझाया

माइक्रोकंट्रोलर मूल बातें समझाया

एक बात माइक्रोकंट्रोलर आईसी के बारे में बहुत अच्छी है, ये दुनिया के सभी हिस्सों और इलेक्ट्रॉनिक खुदरा विक्रेताओं में उपलब्ध हैं।



परिचय

मौलिक रूप से माइक्रोकंट्रोलर उपकरणों का उपयोग आसपास के वातावरण के मूल्यांकन और इसी तरह के इलेक्ट्रॉनिक्स में शामिल अनुप्रयोगों में किया जाता है।

आप इन उपकरणों को एक निश्चित पैरामीटर, मोटर नियंत्रण अनुप्रयोगों, एलईडी प्रकाश व्यवस्था, विभिन्न प्रकार के झुकाव सेंसर, एक्सेलेरोमीटर, वेग मीटर, डेटा लॉगर, तापमान नियंत्रक, कीबोर्ड आदि में प्रदर्शित करने के लिए इस्तेमाल किया जा सकता है।





माइक्रोकंट्रोलर्स के बारे में प्राथमिक समझ AVR Amega32 माइक्रोकंट्रोलर के संदर्भ में प्राप्त की जा सकती है जो इतनी उन्नत है कि कभी-कभी इसे एक चिप के भीतर एक कंप्यूटर कहा जाता है।

यह उपकरण प्रोग्राम बनाने के लिए कमांड की श्रृंखला को पूरा करने के लिए दिया गया है।



कार्यक्रम की भाषा जो आप यहाँ देख रहे हैं वह C ++ है। आपको इस पाठ्यक्रम में इस भाषा को अधिक गहराई से सीखना होगा।

जब यह MCUs की बात आती है, तो आपको इसके सभी पिनआउट को नियंत्रित करने और कॉन्फ़िगर करने का विकल्प मिलता है।

यदि आप इसके साथ थोड़ा थक गए हैं, तो बस ठंड का कारण है, यह कुछ भी जटिल नहीं है, आपको सभी पहलुओं के माध्यम से दृढ़ता से लेकिन आसानी से आगे बढ़ना होगा।

MCU चिप में Vdd और Vss को छोड़कर सभी पिन जो चिप के पावर पिन होते हैं, को अनन्य पदनामों के साथ सौंपा जा सकता है।

पिनआउट विवरण

यदि आप चिप को ऊपर से देखते हैं, तो आपको थोड़ा त्रिभुजाकार पायदान मिलेगा, जो उस बिंदु को शुरू करने का संकेत देता है, जहाँ से पिनआउट शुरू होता है, यह गिनता है कि चिप का # 1 पिन इस पायदान के नीचे शुरू होता है।

इस पिन से शुरू करने पर आपको उस तरफ (बाएं) पर नीचे तक 20 पिन मिलेंगे, और दूसरी तरफ (दाईं ओर) एक और 20 पिन, दाहिने हाथ की तरफ नीचे से ऊपर की ओर बढ़ते रहेंगे।

पायदान से शुरू होने वाले पहले 8 पिन PBO-7 हैं जो आईसी के इंडेक्स पिंस को बनाते हैं क्योंकि यहां सभी प्रोग्राम इंडेक्स शून्य से शुरू होते हैं।

पिनआउट की उपरोक्त श्रृंखला को PORT B ​​कहा जाता है, जबकि पोर्ट के अन्य समान सेट A से D तक निर्धारित होते हैं।

इन पोर्टों को INPUT नामक एक फीड किए गए डेटा को स्वीकार करने और पहचानने के लिए सौंपा जा सकता है, और OUTPUT नामक कुछ निर्दिष्ट रूप में डेटा प्रसारित करने के लिए भी।

सामान्य श्रेणी में आने वाले दो पिन हैं (+) / (-) पिन जिन्हें Vdd और GND भी कहा जाता है।

पोर्ट डी (पीडीओ -6) से एक पिन नीचे क्षेत्र में चिप के बाईं ओर स्थित देखा जा सकता है।

PD7 जो PORT D का # 7 पिन है, उसे अकेले खड़े होकर पिनआउट की दाएं हाथ की श्रृंखला शुरू किया जा सकता है।

अब चिप के दाहिने हाथ की ओर से चलते हुए जहाँ PORT D समाप्त होता है, PORT C क्रम में अपनी गिनती शुरू करता है।

ये एनालॉग से डिजिटल तक MCU के कई दिलचस्प पिनों में योगदान करते हैं।

इन पिनों को बाह्य रूप से कॉन्फ़िगर किए गए एनालॉग सर्किट चरणों के माध्यम से कई मापदंडों का पता लगाने के लिए संवेदन इनपुट बन जाते हैं।

उपरोक्त पिन PORT A का गठन करते हैं।

उपरोक्त पिंस में डिजिटल रूपांतरण के एनालॉग को एक उदाहरण की मदद से समझा जा सकता है जिसमें एक सामान्य तापमान जैसे थर्मिस्टर के उपयोग से एक एनालॉग तापमान स्तर का पता लगाया जाता है जो पोर्ट ए पिंस में से एक पर लागू होता है जिसे एमसीयू द्वारा आसानी से स्वीकार किया जाता है और कनवर्टर करता है। शून्य से 255 डिग्री F (एक 8-बिट आंकड़ा जो 10-बिट आउटपुट प्राप्त करने के लिए उन्नत किया जा सकता है) से डिजिटल रीडआउट का उत्पादन करने के लिए।

एक अन्य विशेषता जो MCUs में देखी जा सकती है, वह है उपलब्ध प्रोग्रामिंग स्पेस या मेमोरी जो माइक्रोकंट्रोलर के लिए निर्दिष्ट चर और प्रोग्राम के लिए स्थान निर्धारित करती है।

इसके अलावा, MCUs के पास संबंधित मापदंडों की गणना के लिए एक अंतर्निहित घड़ी है।

घड़ी की विशेषताएं MCU को कई अलग-अलग गणना प्रक्रियाओं के लिए खुद को लागू करने में सक्षम बनाती हैं जो कि विशेष डिवाइस के विनिर्देश के आधार पर माइक्रोसेकंड की सीमा में तेजी से हो सकता है, और किसी भी वांछित extents के लिए धीमा हो सकता है।

अब तक आप कुछ हद तक और इसके बंदरगाहों और पिन के बारे में माइक्रोकंट्रोलर अवधारणा को समझ गए होंगे।

प्रोग्रामर से माइक्रोकंट्रोलर तक एक एसपीआई कनेक्टर कैसे बनाएं

अब इस विषय में थोड़ी गहराई में जाने और प्रोग्रामिंग की दुनिया की जांच करने का समय आ गया है।

कहा कि चिप में एक प्रोग्राम लोडिंग प्रक्रिया में शामिल होने से पहले, हमें MCU के साथ SPI (सीरियल पेरिफेरल इंटरफ़ेस) कनेक्टर को एकीकृत करने के लिए एक उचित तरीका खोजने की आवश्यकता है।

हालाँकि इसके बाद भी हम SPI को MCU पिनआउट में नहीं डाल सकते, क्या हम कर सकते हैं? न तो हम SPI से विस्तारित तारों को सीधे ब्रेड बोर्ड में सम्मिलित करने की अनुमति दे सकते हैं। यह गलत तारों को गलत कनेक्शन बनाने के साथ गलत तारों की सेटिंग का कारण भी हो सकता है।

इसलिए चीजों को पूरी तरह से त्रुटिहीन बनाने के लिए, हम एक छोटे वर्बार्ड पर प्रक्रियाएं करते हैं जिसमें हमें आवश्यक कनेक्टिंग मेटल पिन भी मिलते हैं जिसे 'हेडर' कहा जाता है। इन हेडर पिंस को अब SPI कनेक्टर से जोड़ने के लिए इस्तेमाल किया जा सकता है। इस हेडर से कनेक्शन को दूसरे समानांतर हेडर पिन से समाप्त किया जा सकता है जो ब्रेडबोर्ड कनेक्शन के लिए उपयोग किया जा सकता है।

इस प्रकार उपरोक्त विधानसभा अब SPI को MCU के लिए एक स्नग और विश्वसनीय मध्यवर्ती कनेक्टिंग प्लेटफॉर्म बनाती है।

अब तक सब कुछ अच्छा विज्ञापन पूर्ण लगता है, इसलिए अपने पीसी और एमसीयू के बीच प्रोग्रामर के बारे में कमाने के लिए आगे बढ़ें।

ऐसी कई कंपनियाँ हो सकती हैं जो इन प्रोग्रामर इकाइयों को बनाती हैं और बेचती हैं, इसलिए इनकी खरीद करना आपके लिए कोई समस्या नहीं है, जैसे कि Adafruit Industries, USBtinyISP या Sparkfun आदि।

इनमें से कुछ पारंपरिक प्रकारों के लिए पूरी तरह से अलग दिख सकते हैं, लेकिन मूल रूप से सब कुछ समान है और मानक प्रोग्रामिंग नियमों का पालन करते हैं और आपके पीसी और एवीआर माइक्रोकंट्रोलर के बीच इंटरफ़ेस के रूप में उपयोग किया जा सकता है।

हालांकि, एक विचार सुनिश्चित करें, यदि आप कुछ अन्य MCU का उपयोग कर रहे हैं और AVR Atmega32 का नहीं, तो आपको उस विशेष MCU चिप के लिए संगत संगत प्रोग्रामर की जांच करनी पड़ सकती है।

यह देखा जा सकता है कि इनमें से काफी प्रोग्रामर समान ड्राइवरों को नियुक्त करते हैं, कुछ टैट का ध्यान रखा जाना चाहिए और हम अपने बाद के अध्यायों में इसके बारे में अधिक सीखेंगे।

अपने पीसी को माइक्रोकंट्रोलर चिप से जोड़ना वास्तव में बुनियादी है, और आपको यह जानकर खुशी होगी कि इसके लिए कार्यवाही कितनी सरल है। तो बटन को तुरंत दूर दबाएं

ऊपर बताया गया SPI इंटरफ़ेस बोर्ड बनाना मुश्किल नहीं है, यह सब आपके सोल्डर आयरन को एक छोटे से सामान्य प्रयोजन बोर्ड पर पिन की दो हेडर पंक्तियों में सभी कनेक्शन के माध्यम से काम करने के बारे में है।

ऊपर दिया गया आंकड़ा कनेक्शन विवरण दिखाता है जिसे आपको हेडर के बीच तारों को इंटरकनेक्ट करते समय पालन करना होगा।

चीजों को और भी सरल बनाने के लिए, ऊपर दी गई छवि का उल्लेख करके निम्नलिखित कनेक्शन विवरणों के माध्यम से जाने दें:

शीर्ष बाएं से शुरू होने वाला SPI पिन 'मास्टर इन, दास आउट' (MISO) तक जाता है

सेंटर लेफ्ट से SPI पिन क्लॉक पिन (SCK) से जुड़ता है

नीचे बाईं ओर SPI पिन रीसेट के साथ जुड़ता है। (हम निम्नलिखित ट्यूटोरियल में इस पिन के बारे में विस्तार से जानेंगे)

एमसीआई के जीएनडी पिन के साथ नीचे दाएं हुक के लिए प्रासंगिक एसपीआई, जीएनडी उस पिन को संदर्भित करता है जो शून्य आपूर्ति लाइन या आपूर्ति के नकारात्मक (रिश्तेदार) रेल बनाता है।

मध्यम दाएं शीर्ष लेख से समाप्त होने वाला SPI MCU के 'मास्टर आउट, स्लेव इन' (MOSI) पिन के साथ लिंक करता है।

SPI शीर्ष दाएं शीर्ष लेख से बाहर आ रहा है, जो MCU के (+) के साथ वायर्ड होता है, जो स्पष्ट रूप से Vdd या MCU का सकारात्मक आपूर्ति पिन है।

इतना ही।

बताए गए अनुसार दो कनेक्टर कनेक्ट करें और आवश्यक क्रियाओं के लिए आपका SPI इंटरफ़ेस बोर्ड तैयार है।

आगे की मदद के लिए आप ऊपर दिखाए गए आंकड़े से परामर्श कर सकते हैं, आपके अंतिम इंटरफ़ेस बोर्ड को इस तरह दिखना चाहिए क्योंकि उपरोक्त चर्चा की मदद से सभी तार कनेक्शन उचित रूप से किए जाते हैं।

मुझे आशा है कि आपने पहले ही ट्यूटोरियल में बताए गए SPI इंटरफ़ेस का निर्माण कर लिया होगा, और अब यह सुनिश्चित करने का समय है कि हमारा कंप्यूटर प्रोग्रामर को स्वीकार करता है जिसे हमें PC और MCU के बीच एकीकृत करने की आवश्यकता है।

MCU के लिए एक सरल प्रोग्रामिंग कोड बनाना

कंप्यूटर को माइक्रोकंट्रोलर से लिंक करने के लिए, हम स्पार्कफुन से उपलब्ध एक यूएसबीटीएनपी यूनिट लेते हैं।

हम जानते हैं कि किसी भी कंप्यूटर ऑपरेटिंग सिस्टम जैसे विंडोज के लिए ड्राइवरों की आवश्यकता होगी जिसके बिना कंप्यूटर में कुछ भी लोड करना बेकार होगा, इस प्रकार हमारे प्रोग्रामर को आपके कंप्यूटर में लोड करने के लिए ड्राइवरों की आवश्यकता होगी।

अपने कंप्यूटर ओएस में ड्राइवरों को स्थापित करने के लिए आवश्यक प्रक्रियाओं में झांकें, यहाँ हम 32-बिट या 64-बिट स्पेक्स के साथ विंडोज 7 ओएस का उदाहरण लेते हैं।

Sparkfun.com खोलें और 'पॉकेट AVR प्रोग्रामर पेज' पर क्लिक करें। लिंक को पृष्ठ के भीतर आसानी से देखा जा सकता है।

अगला, दस्तावेजों के तहत 'विंडोज ड्राइवर' ढूंढें और बस उस पर क्लिक करें।

यह आपको आपके कंप्यूटर में Pocketprog-driver.zip फ़ाइल प्रदान करेगा।

अपने कंप्यूटर पर जाएं, डाउनलोड स्थान ढूंढें और डाउनलोड की गई फ़ाइल को फ़ोल्डर में अनज़िप करें।

यदि आपका कंप्यूटर 64-बिट OS है, तो आपको कुछ और चरणों का पालन करना होगा, जैसा कि नीचे दिया गया है, 32-बिट OS के साथ, आप सीधे अनज़ैप्ड फ़ाइल से इंस्टॉलेशन शुरू कर सकते हैं।

64-बिट के लिए इन का पालन करें, 32-बिट के लिए बस अनदेखा करें:

Google 'libusb sourceforge' और इस लिंक के नवीनतम संस्करण पर क्लिक करें।

आप कुछ अतिरिक्त फ़ाइलों के पार आएंगे, हालाँकि आपको बिब फ़ाइल खोजने में दिलचस्पी होगी, वह है: libusb-win32-bin - #। #। #। #। #। Zip।

अब, जाओ और अपने कंप्यूटर में इस डाउनलोड स्थान को ढूंढें, इसे अनज़िप करें और इसे किसी एक फ़ोल्डर में सहेजें।

इस फ़ोल्डर में, बिन फ़ोल्डर पर नेविगेट करें, amd64 फ़ोल्डर पर आगे बढ़ें।

आपको यहां कुछ फ़ोल्डर दिखाई देंगे जैसे: ghcalled libusb0.dll और libusb0.sys।

आप इनका नाम बदलना चाहेंगे: libusb0_x64.dll और libusb0_x64.sys।

अब आपको उपरोक्त फाइलों को पॉकेटप्रोग-ड्राइवर फ़ोल्डर में कॉपी करना होगा, बस मौजूदा संस्करण की फाइलों को ओवरराइट कर दें।

उपरोक्त ड्राइवरों को स्थापित करने के लिए, निम्नलिखित विधि जो कि अपने प्रकार में एक गैर-पारंपरिक है, आपको रुचि देगी:

यह एक 'लीगेसी हार्डवेयर जोड़ें' मोड है।

'स्टार्ट मेनू' पर क्लिक करें

फिर 'कंप्यूटर' पर राइट क्लिक करके आगे बढ़ें

'प्रबंधित करें' पर क्लिक करें, और अंत में 'डिवाइस मैनेजर' पर क्लिक करें

अगला, मेनू के अंदर, 'विरासत हार्डवेयर जोड़ें' चुनें

'अगला' दबाएं, जब तक कि विज़ार्ड सम्मिलित न हो जाए

निर्देशों का पालन करते हुए, 'हार्डवेयर इंस्टॉल करें जिसे आपको एक उन्नत सूची से चुनने की आवश्यकता होगी' यह रेडियो बटन आइकन को उस विशेष चयन में संकेत देगा। यह वास्तव में एक विंडोज़ कंट्रोल बटन है जो अब एक छोटे वृत्त की तरह दिखाई देगा जिसके अंदर एक गोल नीली फाइलिंग होगी।

अब बस 'अगला' पर क्लिक करें

यह आपको 'सभी डिवाइस दिखाएं' मेनू दिखाएगा, जिस पर आपको क्लिक करना होगा।

इसके बाद 'हैव डिस्क' आइकन पर क्लिक करें।

'ब्राउज़ करें' आइकन की मदद से, पॉकेटप्रोग-ड्राइवर फ़ोल्डर के स्थान पर आगे बढ़ें। यदि आपके द्वारा चयन सही ढंग से किया गया था, तो आप उस विशेष फ़ोल्डर में पॉकेटप्रोग.इन फ़ाइल की कल्पना करेंगे।

इस फ़ाइल पर डबल क्लिक करें और आप निश्चित रूप से अपने पीसी में स्थापित होने वाले ड्राइवर को देखेंगे।

बात पूरी की!! चलिए अगले पेज पर हमारे अगले ट्यूटोरियल के साथ आते हैं।

अब तक आप आवश्यक सॉफ़्टवेयर स्थापित कर सकते हैं और SPI इंटरफ़ेस का निर्माण कर सकते हैं।

कैसे एक कार्यक्रम को एक माइक्रोकंट्रोलर चिप में स्थानांतरित करें

अगला चरण कुछ घटकों जैसे ब्रेडबोर्ड, एक एलईडी और इच्छित एप्लिकेशन के लिए एक परिकलित अवरोधक के लिए कॉल करेगा।

इस भाग में हम प्रोग्रामर की परीक्षण विधि सीखेंगे और संबंधित ड्राइवरों और सॉफ्टवेयर की स्थापना की पुष्टि करेंगे।

यह सत्यापित करने के लिए कि क्या ड्राइवर और सॉफ़्टवेयर सही तरीके से इंस्टॉल किए गए हैं, हम एक साधारण प्रोग्राम को लागू कर सकते हैं, जिसे एवड्रूड कहा जाता है।

AVRdude नवीनतम WinAVR इंस्टालेशन से जुड़ा प्रोग्राम है, जिसके बिना MCU में फाइल का वास्तविक हस्तांतरण संभव नहीं हो सकता है।

यह कार्यक्रम एक .hex फ़ाइल स्वरूप है जो अनिवार्य रूप से आवश्यक निष्पादन के लिए MCU के लिए समझ में आता है।

यदि सत्यापन सफल नहीं होता है, तो प्रोग्रामर फ़ाइल के हस्तांतरण को करने में असमर्थ होगा।

आइए जल्दी से देखें कि हम निम्नलिखित निर्देशों की मदद से परीक्षण प्रक्रिया को कैसे लागू कर सकते हैं:

दिए गए खोज बॉक्स में 'स्टार्ट मेनू' पर क्लिक करके और cmd.exe टाइप करके DOS (डिस्क ऑपरेटिंग सिस्टम) खोलें।

अब AVRdude का वहन DOS प्रॉम्प्ट पर केवल avrdude –c usbtiny –p m32 टाइप करके किया जा सकता है। इसके लागू होते ही, डॉस तुरंत स्वीकार कर लेगा कि क्या कनेक्शन सफल था।

उपरोक्त कमांड में, '-c' एक सूचित ध्वज है जिसमें 'usbtiny' प्रोग्रामर पैरामीटर विनिर्देश शामिल है, जबकि '-p' टैग माइक्रोकंट्रोलर डिवाइस ('m32 Atmega32 को दर्शाता है) की पहचान करता है।

यदि आपने एक अलग MCU का उपयोग किया है, तो आपको कार्यान्वयन के लिए प्रासंगिक उपसर्गों को शामिल करना होगा।

एक बार जब उपरोक्त प्रक्रिया समाप्त हो जाती है, तो आप डॉस प्रॉम्प्ट पर 'बाहर निकलें' टाइप कर सकते हैं, और यह आपको खिड़की से बाहर ले जाएगा।

यदि आप गंभीरता से वास्तविक प्रोग्रामिंग विवरणों के बारे में सोच रहे हैं, तो इसके लिए हमें सबसे पहले सोल्डर और बाहरी एनालॉग एलईडी सर्किट का निर्माण करना होगा, जिस पर प्रोग्राम को लागू किया जा सकता है, क्योंकि जब तक एमसीयू, प्रोग्रामिंग से प्रतिक्रिया को स्वीकार करने के लिए कोई सिस्टम नहीं है। और माइक्रोकंट्रोलर का दौड़ना काफी अर्थहीन होगा।

एलईडी बोर्ड बनाना बहुत ही सरल है, यह सब एलईडी के दो लीडों को सोल्डर के एक टुकड़े पर टांका लगाने के बारे में है और प्रतिरोधी को एलईडी के एक लीड के साथ जोड़ता है। इस एलईडी की भूमिका केवल वर्तमान को एलईडी तक सीमित करने के लिए है ताकि एमसीयू आउटपुट से अतिरिक्त वोल्टेज विज्ञापन करंट के कारण यह जल न जाए।

रोकनेवाला के मूल्य की गणना निम्नलिखित सरल सूत्र का उपयोग करके की जा सकती है:

आर = (यूबी - एलईडीफीड) / आई

जहां यूबी आपूर्ति वोल्टेज है, एलईडी का इस्तेमाल किया जाने वाला एलईडी का इष्टतम ऑपरेटिंग वोल्टेज है, और मैं इसका इष्टतम एम्प्स हूं।

मान लें कि हम एक लाल एलईडी का उपयोग करते हैं जिसमें एक एलईडी फॉरवर्ड वोल्टेज = 2.5 वी और वर्तमान I = 20mA है, उपरोक्त समीकरण को निम्नानुसार हल किया जा सकता है:

चूंकि MCU से वोल्टेज 5V होगा, इसे इस प्रकार व्यक्त किया जा सकता है:

आर = (५ - २.५) / ०२ = १२५ ओम,, वाट, निकटतम मूल्य १२० ओम होगा।

अब हमारे पास एलईडी, एक 120 ओम अवरोधक और एक वर्बार्ड है, बस उपरोक्त घटकों को माइक्रोकंट्रोलर के साथ आरेख में दिया गया है।

एक बार ऐसा करने के बाद, उपरोक्त एलईडी सेट पर इच्छित प्रतिक्रिया के लिए MCU को प्रोग्राम किया जा सकता है।

अगला, MCU की प्रोग्रामिंग।

माइक्रोकंट्रोलर को कुछ सार्थक कार्यान्वयन करने की अनुमति देने के लिए, MCU में उचित निर्देश लिखना अनिवार्य है।

प्रोग्रामिंग पर्यावरण कैसे स्थापित करें और WinAVR की जांच करें

इसके लिए हम शायद अपने पीसी में अपने बहुत ही 'टेक्स्ट एडिटर' का उपयोग कर सकते हैं, हालांकि हम में से एक साधारण टेक्स्ट एडिटर के बजाय अधिक पेशेवर 'प्रोग्रामिंग वातावरण' के उपयोग की सराहना करेंगे, क्योंकि यह दृष्टिकोण आपको कुछ का आनंद लेने की अनुमति देगा इस 'प्रोग्रामिंग वातावरण' पैकेज के भीतर निर्मित दिलचस्प विशेषताएं।

यह विभिन्न भाषाओं के माध्यम से कार्यक्रम बनाने और संपादित करने का समर्थन करेगा और उन्हें एक माइक्रोकंट्रोलर चिप द्वारा आसानी से समझा और स्वीकार किए जाने योग्य वितरण मोड में संकलित करेगा।

अंततः यह WinAVR द्वारा समर्थित होगा और संबंधित MCU चिप में स्थानांतरित किया जाएगा।

WinAVR कई अन्य परिचालनों को निष्पादित करने के लिए भी सुसज्जित किया जा सकता है जैसे कि कार्यक्रमों का निवारण करना और हमें संभावित वाक्यविन्यास के बारे में चेतावनी देना और गलतियों और त्रुटियों को संकलित करना। हम इन पर चर्चा करेंगे I हमारे बाद के ट्यूटोरियल।

आप WinAVR का इंस्टालेशन कोर्स बेहद तेजी से और तड़क-भड़क वाला होगा। निम्नलिखित बिंदुओं के साथ विवरण में गोता लगाएँ:

आपको WinAVR स्रोत फोर्ज फ़ाइल फ़ोल्डर से नवीनतम संस्करण डाउनलोड करने की आवश्यकता होगी। आपको इस डाउनलोड से संबंधित कुछ उपयोगी जानकारी इसकी आधिकारिक वेबसाइट से मिलेगी।

आपको एक सुरक्षा क्वेरी के लिए संकेत दिया जाएगा, ताकि आप यह जवाब दे सकें कि क्या आप डाउनलोड करने के लिए जगह चाहते हैं, यह पूछताछ की जाती है कि डाउनलोड की जाने वाली फ़ाइल एक निष्पादन योग्य फ़ाइल है।

फ़ाइल डाउनलोड करें और उस पर क्लिक करके निष्पादन प्रक्रिया शुरू करें। स्थापना शुरू होने दें।

प्रक्रिया आपको कुछ जवाब देने योग्य प्रश्नों के साथ मार्गदर्शन करेगी ताकि आप अपने आराम के अनुसार स्थापना को कारगर बनाने में सक्षम हो सकें। आप इनमें से कई को उनके डिफ़ॉल्ट रूपों पर ध्यान नहीं देना चाहेंगे, यह आपको उन सभी को चुनना होगा जो आपको लगता है कि कार्यों के लिए सबसे उपयुक्त हैं।

अब तक आपको सब कुछ सामान्य और आसान लगता रहा होगा और कुछ विकल्प मिलेंगे, जो कि स्टार्ट मेन्यू है जो आप पर फेंका जा रहा है। कोई चिंता नहीं, केवल इनमें से कुछ वास्तव में 'प्रोग्रामर नोटपैड' नाम के मंदिर में से एक का उपयोग कर रहे होंगे।

एक बार इस आइकन पर क्लिक करने के बाद, उपयोगकर्ता इंटरफ़ेस शुरू करेगा ताकि आप प्रोग्रामों के लेखन (जैसे निर्माण और संपादन) को लागू करने में सक्षम हो सकें। आप कोड्स को संकलित करने और उन्हें माइक्रोकंट्रोलर में एम्बेड करने के लिए मेनू कमांड से मिलकर प्रोग्राम को भी देखेंगे।

उपरोक्त प्रोग्रामर नोटपैड का मौलिक काम एक मानव पठनीय कोड को बदलना है जिसे आप केवल MCU को समझने योग्य निर्देशों की श्रृंखला में लिख रहे होंगे।

अगला ट्यूटोरियल उपरोक्त प्रोग्रामर के परीक्षण को कवर करेगा ताकि हम विंडोज के साथ इसकी संगतता के बारे में सुनिश्चित हो सकें और क्या यह आपके माइक्रोकंट्रोलर आईसी के साथ पूरी तरह से 'हिलाता है'।

कैसे एक एलईडी चालू करने के लिए एक MCU कार्यक्रम के लिए

एक बार यह पुष्टि हो जाने के बाद हम एक छोटा 'कुछ भी नहीं' कोड बनाने के लिए आगे बढ़ेंगे, बस यह सुनिश्चित करने के लिए कि कोड ट्रांसफर की प्रक्रिया त्रुटियों का सामना न करे।

बेशक हम अब MCU के अंदर अपने पहले कार्यक्रम को लागू करने के लिए तैयार हैं, लेकिन इससे पहले कि हम अपने पिछले ट्यूटोरियल्स के दौरान हमने जो किया है, उसे संक्षेप में प्रस्तुत करना दिलचस्प होगा:

हमने अपने आवश्यक विनिर्देश के अनुसार AVR Atmel माइक्रोकंट्रोलर की खरीद की, यहाँ हमने चित्र के लिए ATMega32 का उपयोग किया है। अगला, हमने माइक्रोकंट्रोलर मूल बातें और प्रोग्रामर यूनिट के बारे में सीखा जो एक प्रोग्राम को MCU चिप में स्थानांतरित करने के लिए जिम्मेदार है।

इसके अलावा, हमने एसपी इंटरफ़ेस कनेक्टर बनाया जो आवश्यक है ताकि आपके कंप्यूटर को प्रोग्रामिंग क्रियाओं के लिए माइक्रोकंट्रोलर के साथ जोड़ा जा सके।

इसके बाद हमने पुष्टि की कि क्या ड्राइवरों को कंप्यूटर में 32-बिट के साथ-साथ 64-लेकिन ऑपरेटिंग सिस्टम के लिए सही तरीके से स्थापित किया गया था।

इसके बाद, हमने विन एवीआर नामक प्रोग्रामिंग वातावरण को माइक्रोकंट्रोलर में कोडों के आसान लेखन विज्ञापन को सुविधाजनक बनाने के लिए स्थापित किया, जिसके बाद प्रोग्रामर को आपके पीसी के साथ सत्यापित करने के लिए एवार्ड के कार्यान्वयन के साथ-साथ माइक्रोकंट्रोलर परस्पर जुड़े।

अंत में पिछले अध्याय में हमने एलईडी / प्रतिरोधक सर्किट का निर्माण किया और इसे संबंधित MCU आउटपुट के साथ जोड़ा।

यह वास्तव में काम का एक बहुत कुछ वास्तविक प्रोग्रामिंग सामान में दूर सिर करने का समय है!

शुरू करने के लिए हम माइक्रोकंट्रोलर को तीन श्रेणियों में विभाजित करना चाहेंगे, इससे हमारी समझ काफी सरल हो जाएगी:

नियंत्रण, जांच और संचार

यह जानना दिलचस्प होगा कि उपरोक्त कार्यों को कई अलग-अलग तरीकों से प्रोग्राम किया जा सकता है।

हमारे पहले कार्यक्रम में हम एक बाहरी पैरामीटर 'नियंत्रण' के लिए माइक्रोकंट्रोलर को ऑर्डर करने की कोशिश करेंगे, हाँ आप सही हैं कि यह एलईडी होगा जिसे हमने हाल ही में बनाया था।

सटीक होने के लिए, हम एमसीयू को कनेक्टेड एलईडी को चालू करने के लिए कहेंगे, हां मुझे पता है कि यह काफी आदिम दिखता है, लेकिन शुरुआती चरण को हमेशा आसान होना चाहिए।

वर्तमान नौकरी के साथ आगे बढ़ते हुए, MCU को एलईडी के रूप में नियंत्रित करना वास्तव में बहुत सरल है:

इसके लिए हम एलईडी 5 के लिए आवश्यक 5 वी का उत्पादन करने के लिए पोर्ट बी पर पिन # 0 का निर्देश देते हैं।

पिछले ट्यूटोरियल से याद करें, हमने एलईडी के एनोड को एमसीयू के उपर्युक्त पिन से जोड़ा।

MCU के इस पिन को संबोधित करने के लिए दो आवश्यक चीजें हैं: 1) आउटपुट और 2) 5 वोल्ट

हम एक ऐसा तरीका सीखेंगे जिसके माध्यम से हम विशेष पिन को MCU का आउटपुट बनने का निर्देश देते हैं।

एक बार जब यह चिप का आउटपुट होना तय हो जाता है, तो हम इसे 'उच्च' (5V) या 'कम' (0V) के रूप में किसी अनुप्रयोग के लिए वांछित करने के लिए निर्देश दे सकते हैं।

चूँकि किसी भी लॉजिक सर्किट जैसे MCU में पिंस आउटपुट या इनपुट को रोक सकता है और लॉजिक हाई या लॉजिक कम करने के लिए कॉन्फ़िगर किया जा सकता है, पिन को केवल लॉजिकल हाई या लॉजिकल कम होना चाहिए। , माइक्रोकंट्रोलर के लिए या उस मामले के लिए किसी भी डिजिटल आईसी के लिए इन राज्यों के अलावा कोई भी मध्यवर्ती या अपरिभाषित राज्य नहीं हैं। एमसीयू के प्रत्येक पिन के लिए भी यही बात लागू होती है।

इनपुट और आउटपुट पिन असाइनमेंट के लिए, इनपुट को बाह्य एनालॉग चरणों से संकेतों को स्वीकार करने के लिए तैनात किया जाएगा, जबकि आउटपुट निर्दिष्ट तार्किक राज्यों, या आवृत्ति में इनकी व्याख्या करने के लिए जिम्मेदार होंगे।

यद्यपि उपरोक्त कार्य कई अलग-अलग तरीकों से किए जा सकते हैं, हम उनमें से एक को सादगी के लिए चर्चा करेंगे। हालांकि यह ध्यान दिया जाना चाहिए कि हालांकि जो अभी प्रस्तुत किया गया है वह आसान और दिलचस्प लगता है, यह इतना व्यवहार्य नहीं है और सभी एमसीयू अनुप्रयोगों के लिए अनुशंसित प्रकार नहीं है, उसी कारण से आपको बाद में पाठ्यक्रम में अधिक लोकप्रिय प्रोग्रामिंग विधियों से परिचित कराया जाएगा। । ये कार्यक्रम केवल वांछित पिन को अन्य आसन्न को प्रभावित किए बिना चश्मा के अनुसार निर्दिष्ट करने की अनुमति देंगे जो संभवतः पहले से ही कुछ अन्य कार्यों को करने के लिए सौंपा जा सकता है।

हालाँकि अभी हम अन्य पिनों के बारे में बहुत परेशान कर रहे हैं और केवल ब्याज के प्रासंगिक पिन का उपयोग करेंगे, कुछ विस्तार से जटिलताओं से बचेंगे।

एक पिन को आउटपुट के रूप में असाइन करने के लिए हमें डेटा डायरेक्शन रजिस्टर (DDR) को नियोजित करना होगा। यदि आप सोच रहे हैं कि यहां पंजीकृत होने का क्या मतलब है, तो यह MCU में एक जगह है जो कुछ निर्दिष्ट तरीके से प्रतिक्रिया करने के लिए माइक्रोकंट्रोलर को सक्षम करता है।

DDR का उपयोग करके हम पिन को 'आउटपुट' की तरह एक डेटा भेजने के लिए सेट कर सकते हैं, या 'इनपुट' के रूप में डेटा स्वीकार कर सकते हैं।

हालाँकि आप शब्द के बारे में भ्रमित हो सकते हैं, इसका क्या अर्थ है? एक डेटा पिन में एक तीसरा आयाम जोड़ता है जिसे तर्क शून्य (0V) या तर्क उच्च (5V) पर लगातार सौंपा जा सकता है, लेकिन उन संकेतों के बारे में जो जल्दी से भिन्न हो सकते हैं जैसे कि दालों की आवृत्ति। उच्च और निम्न लॉजिक्स (5V और 0V) के साथ कुछ आवृत्ति अंतराल या अवधियों के साथ आवृत्ति होती है, इस प्रकार यह समय उन्मुख हो जाता है और समय के संबंध में समायोजित किया जा सकता है, इसीलिए हम 'डेटा' के रूप में पहचान करते हैं, जो एक पैरामीटर को इंगित करता है एक फ़ंक्शन दूसरे फ़ंक्शन (लॉजिक स्टेट्स एंड टाइम) के सापेक्ष होता है।

पिन 0 को आउटपुट के रूप में निर्दिष्ट करने का एक तरीका निम्नलिखित कोड लिखकर है:

DDRB = 0b00000001

उपरोक्त कार्यक्रम में, DDRB PORT B ​​0b के लिए डेटा डायरेक्शन रजिस्टर को दर्शाता है, संकलक को किसी संख्या के निम्नलिखित बाइनरी एक्सप्रेशन के बारे में निर्देश देता है, जबकि एक्सप्रेशन के अंत में '1' पिन 0 की स्थिति को इंगित करता है, अर्थात यह फॉर्म में स्थान है PORT B ​​की पहली पिन

अगर आपको याद है कि हमने सीखा है कि PORT B ​​इसके साथ 8 पिन को जोड़ता है (0 से pin7 तक), और यदि आप ऊपर दिए गए कोड को भी नोटिस करते हैं, तो इसमें 8 अंक हैं, मतलब प्रत्येक अंक PORT B ​​के इन 8 पिनों को दर्शाता है।

अब अगली प्रक्रिया इस पिन (pin0) को 5V सौंपने की होगी। फिर ऑपरेशन का सिद्धांत डीडीआर के समान है जैसा कि निम्नलिखित बाइनरी कोड के माध्यम से व्यक्त किया गया है:

PORTB = 0b00000001

जैसा कि देखा जा सकता है, उपरोक्त कोड और पहले वाले के बीच एकमात्र अंतर यह है कि इस कोड में हमने पोर्ट रजिस्टर का उपयोग किया है। यह रजिस्टर विशेष रूप से उस विशेष पोर्ट के पिन असाइनमेंट को संभालता है, जिसके लिए इसे टी एमसीयू के अंदर रखा गया है। इस प्रकार यह हमें उन पिनआउट के लिए वास्तविक डेटा लॉजिक (0 या 1) असाइन करने में सक्षम बनाता है।

अब हम अपने कार्यक्रम के अनुमानित विवरण के बारे में कुछ चर्चा करने के लिए इच्छुक हो सकते हैं। जैसा कि हम जानते हैं कि सभी कार्यक्रमों को निष्पादन शुरू करने के लिए एक विशेष स्थान की आवश्यकता होती है, इसकी तुलना एक रसोइये से की जा सकती है, जो एक विशेष नुस्खा के बारे में सभी सामग्री जानता है, लेकिन शुरू करने के लिए निर्देश नहीं दिया जाता है।

यहाँ 'मुख्य' फ़ंक्शन वह स्थान है जहाँ C / C ++ प्रोग्राम में से प्रत्येक निष्पादन को आरंभ करता है। इसलिए मुख्य के रूप में बनाया जा सकता है:

इंट मेन (शून्य)
{{
}

हालाँकि, प्रोग्राम को DDR और PORT रजिस्टर विवरण और MCU चिप के अंदर उनके कामकाज की व्याख्या करने में सक्षम करने के लिए, एक अतिरिक्त स्टेटमेंट को शामिल करने की आवश्यकता है, जिसमें AVR MCU के संबंध में सभी डेटा शामिल हो सकते हैं। शायद हम अपने सभी कार्यक्रमों में इस समावेश को जोड़ना चाहते हैं।

#शामिल
इंट मेन (शून्य)
{{
}

जैसे ही संकलन शुरू होता है, कंपाइलर का पूर्व-प्रोसेसर खंड 'io.h' फ़ाइल की पहचान करने के लिए AVR निर्देशिका पर केंद्रित होता है। यहां '.h' एक्सटेंशन इसे एक हेडर फ़ाइल के रूप में इंगित करता है, और यह कि फ़ाइल के अंदर यह कोड स्रोत फ़ाइल के प्रारंभ (सिर) में पेश किया जाएगा जो कि बनाया जा रहा है, इसलिए नाम 'हेडर'।

यहाँ पर हम DDR और PORT स्टेटमेंट्स को अपने कोड में पेश कर सकते हैं, क्योंकि io.h हेडर फाइल के अलावा ने उनके बारे में कंपाइलर को निर्देशित किया होगा।

#शामिल

इंट मेन (शून्य)

{{

DDRB = 0b00000001 // डेटा दिशा रजिस्टर आउटपुट के लिए pin0 और इनपुट के रूप में शेष पिन रजिस्टर करें

PORTB = 0b00000001 // pin0 को 5 वोल्ट पर सेट करें

}

उपरोक्त पिन के उन्मुखीकरण को 5V के परिमाण वाले आउटपुट के रूप में ठीक करता है। हालाँकि इस पिन के लिए अभी भी कोई समस्या निर्धारित नहीं की गई है, जबकि यह पिन अभी तक एमसीयू संचालित होने तक अनिश्चित काल के लिए चालू रहने का निर्देश नहीं है। यह अनंत फीडबैक लूप यह सुनिश्चित करेगा कि MCU का यह पिन ऑफ को स्विच न करे, बल्कि 5V आउटपुट के साथ अनिश्चित काल तक जारी रहे।

यद्यपि पिन के लिए लूप इंस्ट्रक्शन लगाने के कई अलग-अलग तरीके हैं, हम यहाँ 'जबकि' लूप को नियोजित करने का प्रयास करेंगे। जैसा कि नाम से पता चलता है, 'जबकि' लूप माइक्रोकंट्रोलर को बताता है कि 'जबकि' शक्ति उपलब्ध है आपको असाइन किए गए पिनआउट के लिए 5 वी के साथ सक्रिय रहने की आवश्यकता है।

#शामिल

इंट मेन (शून्य)

{{

DDRB = 0b00000001 // डेटा दिशा रजिस्टर आउटपुट के लिए pin0 और इनपुट के रूप में शेष पिन रजिस्टर करें

PORTB = 0b00000001 // pin0 को 5 वोल्ट पर सेट करें

जबकि (1)

{{

// कोड यहां होगा यदि इसे जरूरत से ज्यादा और बार-बार निष्पादित किया जाए ... अंतहीन

}

}

आप यह नोट करना चाहते हैं कि, यहाँ हमने 'जबकि' लूप के तर्क के रूप में in 1 'का उपयोग किया है, क्योंकि everything 0' को छोड़कर सब कुछ तार्किक 'सही' माना जा सकता है।

इसका मतलब है, 'जबकि' लूप विचार एक तार्किक 'सच' को छोड़कर किसी भी चीज के लिए जिम्मेदार नहीं होगा, जिसका अर्थ है कि विशेष पिन अनिश्चित काल के लिए निर्दिष्ट राज्य के साथ होगा।

जब तक MCU को अपने Vdd और Vss में शक्ति प्राप्त नहीं हो जाती, तब तक एलईडी को स्थायी रूप से नियत पिन पर देखा जा सकता है।

यही है, अब हमारे पास वह परिणाम है जिसे हम प्राप्त करना चाहते हैं और अंत में इसे इतनी मेहनत के बाद भी देख सकते हैं, लेकिन फिर भी हमारी मेहनत का मीठा परिणाम देखने के लिए इतना संतोषजनक है।

अगले ट्यूटोरियल में हम सीखेंगे कि उपरोक्त एलईडी में 'समय' आयाम कैसे जोड़ा जाता है, अर्थात इसे किसी भी अन्य दर पर ब्लिंक कैसे किया जाए।

दरअसल, उपरोक्त कार्यान्वयन में, एलईडी वास्तव में निमिष है, लेकिन लूप दर इतनी तेज है कि यह लगभग एलईडी रोशनी पर एक स्थायी स्विच की तरह है।

हम यह देखेंगे कि विलंबित दर पर एलईडी ब्लिंक बनाने के लिए इस लूप को विलंब के साथ कैसे जोड़ा जा सकता है।

एवीआर माइक्रोकंट्रोलर का उपयोग करके एक एलईडी ब्लिंक कैसे बनाएं

अंतिम चर्चा में, हमने सीखा कि कैसे माइक्रोकंट्रोलर के माध्यम से एक एलईडी स्विच बनाया जाए, यह बकाया था न? इतना भी नहीं हो सकता!

यहां हम सीखेंगे कि द्वि-दिशात्मक कार्यक्षमता को जिम्मेदार ठहराते हुए उपरोक्त एलईडी रोशनी को कैसे चमकाया जाए, अर्थात हम इसे कुछ निर्दिष्ट आवृत्ति या दर पर फ्लैश या ब्लिंक करने का प्रयास करेंगे। हम यह भी देखेंगे कि उपयोगकर्ता द्वारा वांछित दर को कैसे बढ़ाया या घटाया जा सकता है।

इस पर एक नजर डालते हैं:

#शामिल

#शामिल

इंट मेन (शून्य)

{{

DDRB | = 1 |<< PINB0

जबकि (1)

{{

PORTB ^ = 1<< PINB0

_delay_ms (100)

}

}

यदि आप उन अजीब प्रतीकों ((, ^,। Etc)) के साथ उपरोक्त अभिव्यक्ति में चकित महसूस कर रहे हैं (और वहाँ नहीं है, लेकिन अन्य समान कोड में इस्तेमाल किया जा सकता है), यहाँ संबंधित जानकारी आप इन के बारे में जानना चाहते हैं :

इसमें कई मानक तार्किक एल्गोरिदम जैसे AND, OR, NOT और XOR शामिल हैं जो आमतौर पर उपरोक्त कोड के साथ उपयोग किए जाते हैं।

ये तार्किक कार्यक्षमता विशेष रूप से दो बिट्स '1' और '0' की तुलना उनके निर्दिष्ट सत्य तालिकाओं के अनुसार करती है।

हमें निम्न बिट व्यवस्था का विश्लेषण करके एक विचार मिलेगा:

01001011 और
10001101 है
बराबरी
00001001 है

उपरोक्त कोड में और C प्रोग्रामिंग में AND का उपयोग किया गया है।

पंक्तियों को लंबवत रूप से पढ़ना, यह बताता है कि 0 और 1 बराबर 0, 1 और 0 भी 0, 0 और 0 के बराबर है, 0, 1 और 1 के बराबर है। यह पढ़ना उतना ही सरल है। ये एक AND ऑपरेटर की सत्य तालिका के अनुसार हैं।

यदि हम निम्न तालिका का आकलन करते हैं, तो यह प्रतीक को इंगित करता है ”| 'या' कार्यक्षमता के उपयोग को निरूपित करते हुए, '|' आपके कंप्यूटर कीबोर्ड में बस 'बैकस्पेस' के बाईं ओर पाया जा सकता है:

01001011 |
10001101 है
बराबरी
11001111 है

मूल रूप से OR तर्क कार्यक्षमता की यह सत्य तालिका इंगित करती है कि बिट्स 0 या 1 बराबर 1, 1 या 0 भी 1, 0 या 0 के बराबर होता है, जबकि 1 या 1 बराबर 1 होता है।

निम्न बिट संयोजन ^ द्वारा निरूपित XOR लॉजिक ऑपरेटर के लिए है और इसका अध्ययन वैसे ही किया जा सकता है जैसा हमने AND, या सत्य सारणी के साथ किया

01001011 ^
10001101 है
बराबरी
11000110 है

अब पहले कार्यक्रम को जारी रखें और जानें कि इसमें निम्न पंक्ति क्या दर्शाती है:

#शामिल

अपने पिछले ट्यूटोरियल्स के माध्यम से हम जानते हैं कि अभिव्यक्ति कैसे कार्य करती है, इसलिए हम इसे दोहरा नहीं रहे हैं लेकिन लगता है कि यह एक नया 'शामिल' है जो कि #include द्वारा व्यक्त किया गया है जिसकी जांच की जानी चाहिए।

इसमें 'देरी' शामिल है। यह हमें कार्यान्वयन के कुछ आसान तरीकों की अनुमति देता है।

जैसा कि नाम में देरी से पता चलता है। यह हमें विशेष कार्यक्रम में देरी को प्रेरित करने में सक्षम बनाता है।

अगली अभिव्यक्ति इंट मेन (शून्य) को चल रही चर्चा से हटा दिया जा सकता है क्योंकि हमने पहले ही अपनी पोस्ट में इसे कवर कर लिया है।

इसके बाद परिवर्तित DDRB आता है।

निम्नलिखित पहले के फॉर्म को दिखाता है जो पिन को असाइन करने का एक बेहतर तरीका नहीं है क्योंकि इनपुट बनाने के लिए 0 से 7 तक सभी पिन स्विच किए गए थे। लेकिन जरा सोचिए कि अगर हम किसी अन्य कार्यक्षमता के लिए उन पिनों की आवश्यकता के लिए एक लंबा कार्यक्रम बनाना चाहते हैं तो क्या स्थिति होगी? उदाहरण के लिए pin2 एक उपकरण के रिमोट स्विचिंग को लागू करने के लिए आवश्यक हो सकता है। उस मामले में हम परीक्षण और त्रुटि के माध्यम से एक इनपुट के रूप में ही असाइन करने की सराहना नहीं करेंगे। रिमोट ट्रांसमीटर से उपकरण रिसीवर को गलत प्रतिक्रिया का मतलब हो सकता है।

DDRB = 0b00000001

हम इसके बजाय सिर्फ एक बिट, हैट पिन0 बिट को प्रभावित करना चाहते हैं, 'बाइनरी' कार्यक्षमता को देखते हुए इसे बाइनरी मास्किंग के माध्यम से निष्पादित किया जा सकता है।

DDRB = DDRB | 0b00000001

यहाँ यह 'OR' मास्क के साथ घूमा हुआ है: 0b00000001, हालाँकि यह काफी हद तक एक प्रामाणिक बाइनरी नंबर प्रतीत होता है, उदाहरण के लिए पहले DDRB: 0b01001010, फिर मास्किंग के माध्यम से इसे लागू करना 0b01001010 | 0b00000001 = 0b01001011

परिणामी अंतर को देखा जा सकता है, केवल pin0 के साथ, जिनके बिट्स बदल गए हैं!

C ++ के माध्यम से उपरोक्त कथन को और भी अधिक प्रस्तुत करता है:

DDRB | = 0b00000001

हालाँकि हम पाते हैं कि दिए गए कार्यक्रम में और भी बहुत कुछ है। हालाँकि यह काफी वैध और स्पष्ट लग सकता है, लेकिन हमें io.h हेडर फ़ाइल से कुछ बयानों का लाभ उठाना चाहिए, खासकर जब यह हमारी सुविधा के लिए मौलिक रूप से बनाया गया हो?

तो अगर “DDRB | = 1 |<< PINBO, why it’s like that?

1<< PINBO is implemented for applying the masking effect. The “1” indicates what may be introduced inside the mask, while the < < is simply the left shift functionality. It executes exactly as it’s named, and PINBO is the number of locations that the “1” would sequence across the left hand side. To be precise PINBO may be equivalent of a 0.

इसलिए हम एक 0b00000000 के साथ शुरू करते हैं, और 0b0000001 का उत्पादन करने के लिए एक '1' डालते हैं और फिर हम इसे बाईं स्थिति में स्थानांतरित कर देते हैं, जो ऊपर के समान बिल्कुल 0b00000001 देता है।

अब, यदि यह पिनब 4 था, तो कथन 1 के रूप में व्यक्त किया जा सकता है<< PINB4. I this case the “1” would be pushed to the left 4 locations producing: 0b00010000.

खबरदार कि हम एक शून्य इंडेक्स का उपयोग कर रहे हैं जिसका अर्थ है कि '1' के बाद चार शून्य हैं।

अब 'जबकि' लूप पर आगे बढ़ते हुए हमने पहले 'अनंत लूप' में देखा था। लेकिन शायद अब हम चाहते हैं कि माइक्रोकंट्रोलर कुछ वांछित निष्पादन को लागू करें। यह केवल दिए गए लूप के अंदर संभव है। यह वह लूप है जहां विशेष अनुक्रम को बार-बार दोहराया जाता है।

यदि निष्पादन को लूप से पहले रखा जाएगा, तो यह सिर्फ एक बार लागू होगा।

हालाँकि एलईडी को पलक झपकने के लिए अनिश्चित काल के लिए पिन के अंदर पिनबोन को वैकल्पिक रूप से चालू / बंद करना होगा। यहां हम उन विलंबों का भी पता लगा रहे हैं, जिनके बिना एलईडी का निमिष असंभव होगा। लेकिन यह एलईडी को बहुत तेज दर से झपकी लेने के लिए मजबूर करेगा, नग्न आंखों से पहचानना मुश्किल होगा, इसे हमारी आंखों से पहचानने के लिए थोड़ा धीमा करना होगा।

हम बाइनरी संख्या में किसी विशेष बिट की स्थापना प्रक्रिया से अवगत हैं, लेकिन यह सुनिश्चित करने की विधि नहीं है कि किसी विशिष्ट बिट '0' को लागू करने की विधि अभी तक '1' है।

निम्नलिखित कार्यक्रम को ऐसा करते हुए देखा जा सकता है, लेकिन हम यह भी पाएंगे कि यह कार्यक्रम में दिखाई नहीं दे सकता है।

शुरुआती दो कथन '1' (5 वी, एलईडी लाइट्स) को थोड़ा बदल देते हैं, फिर 100 एमएस के लिए एक विराम पेश किया जाता है।

अगली दो पंक्तियाँ PINB0 बिट को '0' में बदल देती हैं (शून्य वोल्टेज, LED शट ऑफ), लेकिन क्षमा करें और तुलना बिट से '0' निष्पादित करने में सक्षम नहीं होगी, लेकिन यदि हम '~' का उपयोग नहीं करते हैं बाइनरी मास्क के लिए यह सभी 0s को 1s में बदल सकता है और इसके विपरीत।

यह हमें केवल PINB0 बिट को प्रभावित करने और '0' पर फ्लिप करने में सक्षम करेगा। कोष्ठक को मास्किंग निष्पादन को शामिल करने के लिए शामिल किया गया था ताकि न केवल ऑपरेशन पूरे मास्क के लिए लागू किया जा सके और न कि केवल बाईं ओर शिफ्ट होने से पहले '1' पर।<<”.

PORTB | = 1 |<< PINB0
_delay_ms (100)
PORTB & = ~ (1)<< PINB0)
_delay_ms (100)

ON OFF देरी या समान अवधि की अवधि बनाने के लिए, हम पिछली चार लाइनों को दो से कम कर सकते हैं और हमारे लाभ में XOR कार्यक्षमता लागू कर सकते हैं। यदि यह 0 है और इसके विपरीत एक XOR निष्पादन को एक निर्दिष्ट पिन को 1 में निर्दिष्ट किया जाना चाहिए। यह निष्पादन केवल PINB0 को प्रभावित करेगा। जितनी बार कमांड लागू की जाती है, यह बस मौजूदा लॉजिक के विपरीत होता है।

PORTB ^ = 1<< PINB0
_delay_ms (100)

किया हुआ! आपकी एलईडी अब निर्धारित दर के अनुसार पलक झपक रही होगी… .सिमल, ऐसा नहीं था?




पिछला: कई उपकरण रिमोट कंट्रोल सर्किट अगला: एसी फेज, न्यूट्रल, अर्थ फॉल्ट इंडिकेटर सर्किट