एलईडी इंटरफेसिंग पहली चीज है, जो किसी भी माइक्रोकंट्रोलर के साथ शुरू करते समय करने की कोशिश करेगा। तो यहां इस ट्यूटोरियल में हम 8051 माइक्रोकंट्रोलर के साथ एक एलईडी को इंटरफ़ेस करने जा रहे हैं, और एलईडी को ब्लिंक करने के लिए एक सी प्रोग्राम लिखेंगे। हमने ATMEL द्वारा 8051 परिवार के एक बहुत लोकप्रिय माइक्रोकंट्रोलर AT89S52 का उपयोग किया है ।
विस्तार में जाने से पहले, हमें माइक्रोकंट्रोलर AT89S52 के बारे में कुछ संक्षिप्त विचार प्राप्त करना चाहिए । यह 40 पिन माइक्रोकंट्रोलर है, और इसमें 4 पोर्ट (P0, P1, P2, P3) हैं, प्रत्येक पोर्ट में 8 पिन हैं। हम सॉफ्टवेयर के दृष्टिकोण से प्रत्येक बंदरगाह को 8 बिट रजिस्टर के रूप में मान सकते हैं। प्रत्येक पिन में एक इनपुट / आउटपुट लाइन होती है, जिसका अर्थ है कि प्रत्येक पिन का उपयोग इनपुट के साथ-साथ आउटपुट के लिए भी किया जा सकता है, अर्थात डेटा डिवाइस को सेंसर जैसे कुछ डिवाइस को पढ़ने के लिए या कुछ आउटपुट डिवाइस को अपना आउटपुट प्रदान करने के लिए। कुछ पिनों में दोहरी कार्यक्षमता होती है, जिसका उल्लेख नीचे पिन चित्र में ब्रैकेट में किया गया है। व्यवधान, काउंटर, टाइमर आदि के लिए दोहरी कार्यात्मकता
AT89S52 में दो प्रकार की मेमोरी होती है, पहली रैम होती है जिसमें 256 बाइट्स होती हैं और दूसरी होती है EEPROM (इलेक्ट्रॉनिक रूप से इरेज़ेबल और प्रोग्रामेबल रीड ओनली मेमोरी) जिसमें 8k बाइट्स होती हैं। RAM का उपयोग किसी प्रोग्राम के निष्पादन के दौरान डेटा को स्टोर करने के लिए किया जाता है और EEPROM का उपयोग प्रोग्राम को स्टोर करने के लिए किया जाता है। EEPROM फ्लैश मेमोरी है जिसे हम प्रोग्राम को बर्न करने के लिए उपयोग करते हैं।
सर्किट आरेख और स्पष्टीकरण
हम एलईडी को जोड़ने के लिए पोर्ट 1 में से एक का उपयोग कर रहे हैं। में एम्बेडेड सी प्रोग्रामिंग हम P1_0 का उपयोग करके पोर्ट 1 की पिन 1 पहुँच सकते हैं। हमने पिन 19 और 18 यानी XTAL1 और XTAL2 को 11.0592 मेगाहर्ट्ज आवृत्ति का एक क्रिस्टल थरथरानवाला जोड़ा है। क्रिस्टल थरथरानवाला का उपयोग घड़ी की दालों को उत्पन्न करने के लिए किया जाता है, और घड़ी की नाड़ी का उपयोग समय गणना के लिए साधन प्रदान करने के लिए किया जाता है, जो सभी घटनाओं को सिंक्रनाइज़ करने के लिए अनिवार्य है। इस तरह के क्रिस्टल का उपयोग लगभग हर आधुनिक डिजिटल उपकरण जैसे कंप्यूटर, घड़ी आदि में किया जाता है । आमतौर पर इस्तेमाल होने वाला क्रिस्टल क्वार्ट्ज है। यह एक गुंजयमान ऑसिलेटर सर्किट है और कैपेसिटर का उपयोग क्रिस्टल को ऑसिलेट करने के लिए किया जाता है, इसलिए हमने यहां 22pf कैपेसिटर कनेक्ट किया है। आप अधिक जानने के लिए "अनुनाद सर्किट" के बारे में पढ़ सकते हैं।
एलईडी के लिए सर्किट आरेख 8051 microcontroller 89S52 के साथ इंटरफ़ेस ऊपर चित्र में दिखाया गया है। पिन 31 (EA) Vcc से जुड़ा है, जो एक सक्रिय लो पिन है। यह Vcc से तब जुड़ा होना चाहिए जब हम किसी बाहरी मेमोरी का उपयोग नहीं कर रहे हों। पिन 30 (एएलई) और पिन 29 (पीएसईएन) का उपयोग माइक्रोकंट्रोलर को बाहरी मेमोरी से जोड़ने के लिए किया जाता है और पिन 31 ग्राउंड से कनेक्ट होने पर माइक्रो मेमोरी को बाहरी मेमोरी का उपयोग करने के लिए कहता है। हम किसी भी बाहरी मेमोरी का उपयोग नहीं कर रहे हैं इसलिए हमने पिन 31 को वीसीसी से जोड़ा।
पिन 9 (आरएसटी) रीसेट पिन है, जिसे माइक्रोकंट्रोलर को रीसेट करने के लिए उपयोग किया जाता है और कार्यक्रम फिर से शुरू होता है। यह उच्च से जुड़ा होने पर माइक्रोकंट्रोलर को रीसेट करता है। हमने RST पिन को जोड़ने के लिए मानक रीसेट सर्किटरी, 10k ओम अवरोधक और 1uF कैपेसिटर का उपयोग किया है।
अब यहां दिलचस्प बात यह है कि हम एलईडी को रिवर्स में कनेक्ट करते हैं, इसका मतलब है कि माइक्रोकंट्रोलर पिन के साथ नकारात्मक पैर, क्योंकि माइक्रोकंट्रोलर एक एलईडी को चमकाने के लिए पर्याप्त शक्ति प्रदान नहीं करते हैं, इसलिए यहां एलईडी नकारात्मक तर्क पर चलते हैं जैसे, पिन P1_0 1 इसके बाद LED को ऑफ कर दिया जाएगा और जब पिन आउटपुट 0 होगा तो LED को ऑन कर दिया जाएगा। जब पिन आउटपुट 0 होता है, तो यह जमीन और एलईडी चमक की तरह व्यवहार करता है।
कोड स्पष्टीकरण
हैडर REGX52.h को मूल रजिस्टर परिभाषाओं को शामिल करने के लिए शामिल किया गया है। एम्बेडेड C में कई प्रकार के चर और स्थिरांक होते हैं जैसे int, char, unsigned int, float आदि, आप इन्हें आसानी से सीख सकते हैं। यहाँ हम अहस्ताक्षरित int का उपयोग कर रहे हैं, जिसकी सीमा 0 से 65535 तक है। हम देरी पैदा करने के लिए "लूप के लिए" का उपयोग कर रहे हैं, ताकि एलईडी कुछ समय के लिए चालू रहे (P1_0 = 0, नकारात्मक एलईडी तर्क) और OFF (P1_0 = 1), नकारात्मक एलईडी तर्क) विलंबित समय के लिए। आम तौर पर जब "लूप के लिए" 1275 बार चलता है, तो 1ms की देरी देता है, इसलिए हमने DELAY बनाने के लिए 'विलंब' फ़ंक्शन बनाया है और इसे मुख्य कार्यक्रम (मुख्य ()) से बुलाया है। हम मुख्य कार्य से "देरी" फ़ंक्शन को कॉल करते हुए DELAY समय (ms में) पास कर सकते हैं। कार्यक्रम में, "जबकि (1)" का अर्थ है कि कार्यक्रम असीम रूप से निष्पादित होगा।
मैं संक्षेप में समझा रहा हूँ, कैसे "के लिए" लूप के 1275 बार 1ms की देरी दे:
8051 में, 1 मशीन चक्र को निष्पादित करने के लिए 12 क्रिस्टल दालों की आवश्यकता होती है और हमारे पास 11.0592 मेगाहर्ट्ज क्रिस्टल का उपयोग होता है।
तो 1 मशीन चक्र के लिए आवश्यक समय: 12 / 11.0592 = 1.085us
तो 1275 * 1.085 = 1.3ms, 1275 गुना “for” लूप लगभग 1ms देरी देता है।
"C" प्रोग्राम द्वारा सही समय देरी उत्पादन, गणना करने के लिए बहुत मुश्किल है, जब आस्टसीलस्कप (सीआरओ) से मापते हैं, (j = 0; j <1275; j ++) लगभग 1ms की देरी।
तो हम केवल 8051 माइक्रोकंट्रोलर के साथ एलईडी को इंटरफेस करके समझ सकते हैं, कि एक साधारण कोडिंग के साथ, हम माइक्रोकंट्रोलर का उपयोग करके सॉफ़्टवेयर (प्रोग्रामिंग) के माध्यम से हार्डवेयर को इंटरैक्ट और नियंत्रित कर सकते हैं। इसके अलावा, हम प्रोग्रामिंग के माध्यम से प्रत्येक पोर्ट और माइक्रोकंट्रोलर के पिन को हेरफेर कर सकते हैं।