- सामग्री की आवश्यकता:
- क्या रुकावट हैं और उनका उपयोग कहां करना है:
- सर्किट आरेख और स्पष्टीकरण:
- PIC माइक्रोकंट्रोलर में रुकावटों का अनुकरण:
- कोड स्पष्टीकरण:
- PIC16F877A के कार्य में बाधा:
इस ट्यूटोरियल में हम सीखेंगे कि PIC माइक्रोकंट्रोलर में एक बाहरी इंटरप्ट का उपयोग कैसे करें और हमें उनकी आवश्यकता क्यों और कहाँ होगी। यह PIC ट्यूटोरियल्स के अनुक्रम का एक हिस्सा है जिसमें हमने PIC माइक्रोकंट्रोलर्स को खरोंच से सीखना शुरू किया; इसलिए यह ट्यूटोरियल मानता है कि आप MPLABX का उपयोग करके PIC MCU को कैसे प्रोग्राम करें और PIC के साथ एक एलसीडी को कैसे इंटरफ़ेस करें, से परिचित हैं। यदि कृपया उनके संबंधित लिंक पर वापस नहीं आते हैं और उन्हें गर्त में पढ़ते हैं, तो क्योंकि मैं पहले से ही कवर की गई अधिकांश जानकारी को छोड़ दूंगा।
सामग्री की आवश्यकता:
- PIC16F877A परफेक्ट बोर्ड
- 16x2 एलसीडी डिस्प्ले
- बटन दबाओ
- तारों को जोड़ना
- ब्रेड बोर्ड
- PicKit 3
क्या रुकावट हैं और उनका उपयोग कहां करना है:
PIC माइक्रोकंट्रोलर को बाधित करने के कार्यक्रम के बारे में जानने से पहले, आइए हम यह समझें कि वास्तव में एक बाधा क्या है और हमें उनका उपयोग करने की आवश्यकता कहां होगी। इसके अलावा, माइक्रोकंट्रोलर और PIC16F877A में कई प्रकार के व्यवधान हैं, उनमें से लगभग 15 हैं। आइए अब हम उन सभी को अपने सिर में न बांधें।
इसलिए! माइक्रोकंट्रोलर्स में क्या बाधा है?
जैसा कि हम सभी जानते हैं कि माइक्रोकंट्रोलर्स का उपयोग प्री-डिफाइंड (प्रोग्राम्ड) एक्टीविटीज़ के सेट को करने के लिए किया जाता है जो इनपुट के आधार पर आवश्यक आउटपुट को ट्रिगर करता है। लेकिन, जब आपका माइक्रोकंट्रोलर कोड के एक टुकड़े को निष्पादित करने में व्यस्त होता है, तो एक आपातकालीन स्थिति हो सकती है जहां आपके कोड के अन्य टुकड़े पर तत्काल ध्यान देने की आवश्यकता होती है। कोड के इस अन्य टुकड़े को जिस पर तत्काल ध्यान देने की आवश्यकता है उसे एक बाधा के रूप में माना जाना चाहिए।
उदाहरण के लिए: आइए विचार करें कि आप अपने मोबाइल पर अपना पसंदीदा गेम खेल रहे हैं और आपके फोन के अंदर कंट्रोलर (अनुमान) उन सभी ग्राफिक्स को फेंकने में व्यस्त है जो आपको गेम का आनंद लेने के लिए आवश्यक हैं। लेकिन, अचानक आपकी गर्लफ्रेंड आपके नंबर पर कॉल करती है। अब, सबसे खराब बात यह है कि आप अपनी गर्लफ्रेंड कॉल को नजरअंदाज करने के लिए अपने मोबाइल पर कंट्रोलर हैं क्योंकि आप गेम खेलने में व्यस्त हैं। इस दुःस्वप्न को रोकने के लिए हम कुछ का उपयोग करते हैं जिसे इंटरप्ट कहा जाता है।
ये व्यवधान हमेशा कुछ विशेष क्रियाओं को करने के लिए सक्रिय लिस्टिंग होंगे और जब वे होते हैं तो वे कोड का एक टुकड़ा निष्पादित करते हैं और फिर वापस सामान्य फ़ंक्शन में पहुंच जाते हैं। कोड के इस टुकड़े को इंटरप्ट सर्विस रूटीन (ISR) कहा जाता है । एक व्यावहारिक परियोजना जिसमें रुकावट होना अनिवार्य है "डिजिटल माइक्रोमीटर और ओडोमीटर सर्किट पीआईसी माइक्रोकंट्रोलर का उपयोग करना"
माइक्रोकंट्रोलर्स में दो मुख्य प्रकार के व्यवधान हैं । वे बाह्य व्यवधान और आंतरिक व्यवधान हैं। किसी कार्य को करने के लिए माइक्रोस्ट्रोलर के अंदर आंतरिक व्यवधान उत्पन्न होते हैं, उदाहरण के लिए टाइमर इंटरप्ट, एडीसी इंटरप्ट आदि आदि। इन अवरोधों को सॉफ्टवेयर द्वारा क्रमशः टाइमर ऑपरेशन या एडीसी ऑपरेशन को पूरा करने के लिए ट्रिगर किया जाता है।
बाहरी व्यवधान वह है जो उपयोगकर्ता द्वारा ट्रिगर किया जा सकता है। इस कार्यक्रम में हम सीखेंगे कि कैसे एक बाधा को ट्रिगर करने के लिए एक पुश बटन का उपयोग करके एक बाहरी रुकावट का उपयोग किया जाए। हम 0 से 1000 तक की संख्या बढ़ाने के लिए एक एलसीडी का उपयोग करेंगे और जब एक रुकावट पैदा होती है तो हमें इसके बारे में सूचित करना चाहिए इंटर सर्विस सर्विस रूटीन ISR से और फिर वापस संख्या बढ़ाने के लिए जारी रखें।
सर्किट आरेख और स्पष्टीकरण:
PIC16F877 इंटरप्ट का उपयोग करने के लिए सर्किट आरेख उपरोक्त छवि में दिया गया है। आपको बस LCD को PIC से कनेक्ट करना होगा जैसा कि हमने LCD tutorial को इंटरफेस करने में किया था।
अब इंटरप्ट पिन को कनेक्ट करने के लिए, हमें एक्सटर्नल इंटरप्ट के लिए PIC के किस पिन का उपयोग किया जाता है, यह जानने के लिए हमें डेटाशीट को देखना चाहिए । हमारे मामले में मैं n PIC16F877A 33 rd पिन RBO / INT का उपयोग बाहरी व्यवधान के लिए किया जाता है। आप इस पिन के अलावा किसी अन्य पिन का उपयोग नहीं कर सकते। इस सर्किट आरेख के लिए पिन कनेक्शन नीचे दी गई तालिका में दिखाया गया है।
S.No: |
पिन नम्बर |
पिन नाम |
से जुड़ा |
1 |
२१ |
RD2 |
एलसीडी का आर.एस. |
२ |
२२ |
RD3 |
ई का एलसीडी |
३ |
२। |
RD4 |
डी 4 की एलसीडी |
४ |
२। |
RD5 |
डी 5 की एलसीडी |
५ |
२ ९ |
RD6 |
डी 6 एलसीडी की |
६ |
३० |
RD7 |
डी 7 की एलसीडी |
। |
३३ |
RBO / INT |
बटन दबाओ |
हमने PORT B पर आंतरिक पुल प्रतिरोधों को सक्षम किया है, इसलिए हम पुश बटन के माध्यम से सीधे RB0 पिन को जमीन से जोड़ सकते हैं। इसलिए जब भी यह पिन कम हो जाता है तो एक अवरोध उत्पन्न हो जाएगा।
नीचे दिखाए गए अनुसार ब्रेड बोर्ड पर कनेक्शन बनाए जा सकते हैं।
यदि आप हमारे ट्यूटोरियल का अनुसरण कर रहे हैं, तो आपको इस परफ़ेक्ट बोर्ड से परिचित होना चाहिए जो मैंने यहाँ उपयोग किया है। यदि नहीं, तो आपको इसके बारे में ज्यादा सोचने की जरूरत नहीं है, बस सर्किट आरेख का पालन करें और आपको काम करने की चीजें मिलेंगी।
PIC माइक्रोकंट्रोलर में रुकावटों का अनुकरण:
इस परियोजना के लिए सिमुलेशन प्रोटीन का उपयोग करके बनाया गया है।
जब आप प्रोजेक्ट का अनुकरण करते हैं, तो आपको एलसीडी डिस्प्ले पर संख्याओं का क्रम देखना चाहिए। यह मुख्य लूप के अंदर होता है और जब भी पुश बटन दबाया जाता है तो एलसीडी को प्रदर्शित करना चाहिए कि उसने ISR में प्रवेश कर लिया है। आप कोड में अपने संशोधन कर सकते हैं और इसे यहाँ परीक्षण करने का प्रयास कर सकते हैं।
कोड स्पष्टीकरण:
इस प्रोजेक्ट का पूरा कोड इस ट्यूटोरियल के अंत में पाया जा सकता है। हालाँकि कार्यक्रम को महत्वपूर्ण विखंडनों में विभाजित किया गया है और आपकी बेहतर समझ के लिए नीचे समझाया गया है।
सभी कार्यक्रमों की तरह हमें अपने प्रोग्राम में उपयोग किए जाने वाले पिन के लिए पिन कॉन्फ़िगरेशन को परिभाषित करके कोड को शुरू करना होगा। यहां हमें यह भी परिभाषित करने की आवश्यकता है कि हम RB0 / INT का उपयोग एक बाहरी रुकावट पिन के रूप में कर रहे हैं न कि इनपुट या आउटपुट पिन के रूप में। कोड की निचली रेखा पोर्टबी पर आंतरिक पुल-अप रोकनेवाला को 7 वें बिट को 0 बनाकर सक्षम बनाती है ।
OPTION_REG = 0b00000000;
तब हम ग्लोबल / पेरीफेरल इंटरप्ट को सक्षम करते हैं और घोषणा करते हैं कि हम RB0 का उपयोग बाहरी अवरोधक पिन के रूप में कर रहे हैं।
GIE = 1; // वैश्विक रुकावट PEIE = 1 सक्षम करें; // पेरिफेरल इंटरप्ट INTE = 1 को सक्षम करें; // RB0 को बाहरी इंटरप्ट पिन के रूप में सक्षम करें
एक बार RB0 पिन को एक बाहरी अवरोधक पिन के रूप में परिभाषित किया जाता है, हर बार जब यह कम हो जाता है तो बाहरी व्यवधान ध्वज INTF 1 हो जाएगा और शून्य व्यवधान फ़ंक्शन के अंदर का कोड निष्पादित हो जाएगा क्योंकि इंटरप्ट सर्विस सर्विस रूट (ISR) कहा जाएगा।
void व्यवधान ISR_example () {if (INTF == 1) // बाहरी व्यवधान {Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("दर्ज ISR"); INTF = 0; // यह __delay_ms (2000) के साथ किए जाने के बाद बाधा झंडा को साफ़ करें; Lcd_Clear (); }}
जैसा कि आप देख सकते हैं कि मैंने रुकावट फ़ंक्शन को ISR_example नाम दिया है। आप इसे अपनी इच्छानुसार नाम दे सकते हैं। इंटरप्ट फंक्शन के अंदर हम जाँचेंगे कि क्या INTF झंडा ऊँचा है और आवश्यक कार्यवाही करता है। एक बार जब आप रूटीन के साथ काम कर लेते हैं, तो ध्वज को साफ करना बहुत महत्वपूर्ण होता है। इसके बाद ही कार्यक्रम वापस मुख्य समारोह में वापस आ जाएगा। यह क्लियरिंग लाइन का उपयोग करके सॉफ्टवेयर द्वारा किया जाना है
INTF = 0; // इसके साथ किए जाने के बाद बाधा ध्वज को साफ़ करें
मुख्य फ़ंक्शन के अंदर, हम हर 500 एमएस के लिए सिर्फ एक नंबर बढ़ाते हैं और इसे एलसीडी स्क्रीन पर प्रदर्शित करते हैं। RB0 पिन की स्थिति की जांच करने के लिए हमारे पास कोई विशिष्ट लाइन नहीं है। रुकावट हमेशा सक्रिय रहेगी और जब भी पुश बटन दबाया जाता है तो यह शून्य से बाहर कूद जाएगा और आईएसआर में लाइनों को निष्पादित करेगा।
Lcd_Set_Cursor (2,1); Lcd_Print_String ("मेन लूप के अंदर"); Lcd_Set_Cursor (1,1); Lcd_Print_String ("संख्या:"); Lcd_Print_Char (ch1 + '0'); Lcd_Print_Char (ch2 + '0'); Lcd_Print_Char (ch3 + '0'); Lcd_Print_Char (ch4 + '0'); __delay_ms (500); संख्या ++;
PIC16F877A के कार्य में बाधा:
एक बार जब आप समझ जाते हैं कि कैसे बाधा काम करती है तो आप इसे हार्डवेयर पर आज़मा सकते हैं और इसके चारों ओर फ़िफ़ल बना सकते हैं। यहाँ दिया गया यह कार्यक्रम बाहरी रुकावट का एक बहुत ही बुनियादी उदाहरण है जहाँ एक रुकावट का पता लगने पर यह एलसीडी स्क्रीन के प्रदर्शन को बदल देता है।
परियोजना का पूरा काम नीचे दिए गए वीडियो में पाया जा सकता है। आपको व्यवधानों के बारे में समझ में आया और कहां / कैसे उनका उपयोग करना है। यदि आपको कोई संदेह है, तो आप मंचों या टिप्पणी अनुभाग के माध्यम से मुझ तक पहुँच सकते हैं।