- इंटरप्ट और आईएसआर के प्रकार
- STM32 में इंटरप्ट के लिए सिंटैक्स
- अवयव आवश्यक
- सर्किट आरेख और कनेक्शन
- इंटरप्ट के लिए प्रोग्रामिंग STM32F103C8
व्यवधान एक ऐसा तंत्र है जिसके द्वारा I / O या एक निर्देश प्रोसेसर के सामान्य निष्पादन को निलंबित कर सकता है और खुद को इस तरह से सर्वोच्च प्राथमिकता देता है। उदाहरण के लिए, सामान्य निष्पादन करने वाला प्रोसेसर किसी प्रकार की घटना या घटित होने के लिए निरंतर निगरानी भी कर सकता है। ऐसा तब होता है जब एक बाहरी व्यवधान होता है (जैसे कि कुछ सेंसर से) तब प्रोसेसर अपनी सामान्य निष्पादन को रोक देता है और पहले बीच में व्यवधान डालता है और फिर अपने सामान्य निष्पादन को जारी रखता है।
यहाँ इस परियोजना में, STM32F103C8 में इंटरप्ट को समझने के लिए, हम बाहरी व्यवधान के रूप में पुश बटन का उपयोग करेंगे। यहां हम 0 से एक नंबर बढ़ाएंगे और 16x2 एलसीडी पर प्रदर्शित करेंगे, और जब भी पुश बटन दबाया जाता है तो एलईडी चालू होता है और एलसीडी डिस्प्ले INTERRUPT दिखाता है। बटन जारी होते ही एलईडी बंद हो जाती है।
इंटरप्ट और आईएसआर के प्रकार
रुकावटों को मोटे तौर पर दो प्रकारों में वर्गीकृत किया जा सकता है:
हार्डवेयर इंटरप्ट: यदि प्रोसेसर का सिग्नल किसी बाहरी डिवाइस से होता है जैसे बटन या सेंसर या किसी अन्य हार्डवेयर डिवाइस से जो कि एक सिग्नल उत्पन्न करता है और प्रोसेसर को ISR में मौजूद विशेष कार्य करने के लिए कहता है जिसे हार्डवेयर इंटरप्ट कहा जाता है।
सॉफ्टवेयर इंटरप्ट: इंटरप्ट जो सॉफ्टवेयर निर्देशों द्वारा उत्पन्न होते हैं।
बाधित सेवा दिनचर्या
इंटरप्ट सर्विस रूटीन या इंटरप्ट हैंडलर एक ऐसी घटना है जिसमें निर्देशों के छोटे सेट होते हैं और जब कोई अवरोध उत्पन्न होता है तो प्रोसेसर सबसे पहले इन कोड को क्रियान्वित करता है जो ISR में मौजूद होता है और फिर उस कार्य के साथ जारी रहता है जो कि बाधित होने से पहले कर रहा था।
STM32 में इंटरप्ट के लिए सिंटैक्स
ISR के पास Arduino में सिंटैक्स अनुलग्नक (digitalPinToInterrupt (पिन), ISR, मोड) का अनुसरण है और STM32 में भी इसका उपयोग किया जा सकता है क्योंकि हम कोड अपलोड करने के लिए arduino IDE का उपयोग करते हैं।
- digitalPinToInterrupt (pin): Arduino बोर्ड Uno की तरह हमारे पास 2,3 पिन हैं और मेगा में हमारे पास इंटरप्ट के लिए 2,3,18,19,20,21 हैं। STM32F103C8 में हमारे पास इंटरप्ट पिंस भी हैं, किसी भी GPIO पिन को इंटरप्ट के लिए इस्तेमाल किया जा सकता है। हम केवल उस इनपुट पिन को निर्दिष्ट करना चाहते हैं जिसका उपयोग हम रुकावट के लिए कर रहे हैं। लेकिन एक ही समय में एक से अधिक व्यवधानों का उपयोग करते समय हमें कुछ प्रतिबंधों का पालन करने की आवश्यकता हो सकती है।
- ISR: यह एक इंटरप्टल हैंडलर फंक्शन है जिसे बाहरी अवरोधन होने पर कहा जाता है। इसका कोई तर्क और शून्य वापसी प्रकार नहीं है।
- मोड: रुकावट को ट्रिगर करने के लिए संक्रमण का प्रकार
- RISING: जब पिन LOW से HIGH तक पहुंचता है, तो एक बाधा को ट्रिगर करने के लिए।
- FALLING: पिन को हाई से लो ट्रांसफर करते समय एक अवरोध को ट्रिगर करना।
- CHANGE: जब पिन या तो LOW से HIGH या HIGH से LOW (यानी, जब पिन बदलता है) में ट्रांसफर होता है, तो एक बाधा को ट्रिगर करने के लिए।
रुकावट का उपयोग करते समय कुछ शर्तें
- इंटरप्ट सर्विस रूटीन फ़ंक्शन (ISR) यथासंभव छोटा होना चाहिए।
- विलंब () फ़ंक्शन ISR के अंदर काम नहीं करता है और इसे टाला जाना चाहिए।
अवयव आवश्यक
- STM32F103C8
- बटन दबाओ
- एलईडी
- रेसिस्टर (10K)
- एलसीडी (16x2)
सर्किट आरेख और कनेक्शन
पुश बटन पिन का एक पक्ष STM32 के 3.3V से जुड़ा होता है और दूसरा पक्ष STM32 के इनपुट पिन (PA0) से जुड़ा होता है।
पुल डाउन रेसिस्टर का उपयोग किया जाता है ताकि बटन दबाए जाने या जारी होने पर माइक्रोकंट्रोलर को अपने इनपुट में केवल हाई या लो मिलें। अन्यथा, पुल डाउन रेज़र के बिना, MCU भ्रमित हो सकता है और इनपुट को कुछ यादृच्छिक फ्लोटिंग मान खिला सकता है।
STM32F103C8 और एलसीडी के बीच कनेक्शन
निम्न तालिका एलसीडी (16X2) और STM32F103C8 माइक्रोकंट्रोलर के बीच पिन कनेक्शन को दिखाती है।
STM32F103C8 |
एलसीडी |
GND |
वीएसएस |
+ 5 वी |
VDD |
पोटेंशियोमीटर सेंटर पिन करने के लिए |
वि ० |
पीबी ० |
रुपये |
GND |
आरडब्ल्यू |
पीबी 1 |
इ |
PB10 |
डी 4 |
पीबी 11 |
D5 |
PC13 |
डी 6 |
PC14 |
डी 7 |
+ 5 वी |
ए |
GND |
क |
इंटरप्ट के लिए प्रोग्रामिंग STM32F103C8
इस ट्यूटोरियल का प्रोग्राम सरल है और इस ट्यूटोरियल के अंत में दिया गया है। हमें STM32 प्रोग्राम करने के लिए FTDI प्रोग्रामर की जरूरत नहीं है, बस अपने PC को STM32 के USB पोर्ट से कनेक्ट करें और Arduise IDE से प्रोग्रामिंग शुरू करें। USB पोर्ट के माध्यम से STM32 प्रोग्रामिंग के बारे में अधिक जानें।
जैसा कि हमने कहा कि यहाँ इस ट्यूटोरियल में हम 0 से एक संख्या में वृद्धि करने जा रहे हैं और इसे 16x2 एलसीडी पर प्रदर्शित करते हैं और जब भी एक पुश बटन दबाया जाता है तो एलईडी ऑन हो जाता है और एलसीडी डिस्प्ले 'INTERRUPT' दिखाता है।
पहले STM32 के साथ एलसीडी पिन कनेक्शन को परिभाषित करें । आप इसे अपनी आवश्यकताओं के अनुसार संशोधित कर सकते हैं।
const int rs = PB10, en = PB11, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14;
अगला, हम एलसीडी डिस्प्ले के लिए हेडर फ़ाइल शामिल करते हैं। यह लाइब्रेरी को कॉल करता है जिसमें एसटीएम 32 के साथ एलसीडी के साथ कैसे संवाद होना चाहिए, इसके लिए कोड है। यह भी सुनिश्चित करें कि फ़ंक्शन लिक्विड क्रिस्टल को उन पिन नामों के साथ कहा जाता है जिन्हें हमने अभी ऊपर परिभाषित किया है।
शामिल
वैश्विक चर का उपयोग आईएसआर और मुख्य कार्यक्रम के बीच डेटा पारित करने के लिए किया जाता है। हम सत्य या गलत को निर्दिष्ट करने के लिए परिवर्तनीय एलईडीऑन को अस्थिर और बूलियन के रूप में भी घोषित करते हैं ।
वाष्पशील बूलियन ledOn = false;
शून्य सेटअप () फ़ंक्शन के अंदर, हम एक इंट्रो संदेश प्रदर्शित करेंगे और इसे 2 सेकंड के बाद साफ करेंगे।
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); देरी (2000); lcd.clear ();
एक ही शून्य सेटअप () फ़ंक्शन में फिर से, हमें इनपुट और आउटपुट पिन निर्दिष्ट करने की आवश्यकता है। हम आउटपुट पीए 1 को एलईडी के लिए और पीए 0 को पुश बटन से इनपुट के लिए सेट करते हैं।
पिनमोड (PA1, OUTPUT) पिनमोड (PA0, INPUT)
हम एक संख्या में वृद्धि करने जा रहे हैं, इसलिए मान शून्य के साथ एक चर घोषित करें।
int i = 0;
अब कोड का महत्वपूर्ण हिस्सा संलग्नक () फ़ंक्शन है, यह शून्य सेटअप के अंदर भी शामिल है ()
संलग्न करें (digitalPinToInterrupt (PA0), बटन दबाया, बदलें)
हमने बाहरी अवरोधन के लिए पिन PA0 निर्दिष्ट किया है, और बटन दबाया गया फ़ंक्शन वह फ़ंक्शन है जिसे PA0 पिन में CHANGE (LOW to HIGH या उच्च से LOW) कहा जाता है। आप आवश्यकता के अनुसार किसी अन्य फ़ंक्शन नाम, पिन और मोड का भी उपयोग कर सकते हैं।
शून्य (लूप) के अंदर हम शून्य से संख्या (i) बढ़ाते हैं और संख्या को एलसीडी (16x2) में प्रिंट करते हैं।
lcd.clear (); lcd.print ("NUMBER:"); lcd.print (i); ++ मैं; देरी (1000);
सबसे महत्वपूर्ण हिस्सा उस नाम के अनुसार एक बाधा हैंडलर फ़ंक्शन का निर्माण कर रहा है जो हमने संलग्नक () फ़ंक्शन में उपयोग किया था । हमने बटन का उपयोग किया है इसलिए यहाँ हमने एक फ़ंक्शन बनाया है बटन दबाया ()
शून्य बटन दबाया () { अगर (एलईडी) { एलईडी / झूठी; digitalWrite (PA1, LOW); } और { ledOn = true; digitalWrite (PA1, HIGH); lcd.setCursor (0,1); lcd.print ("Interrupt"); } }
इस बटन का कार्य करना () ISR:
के मान के अनुसार ledOn चर, एलईडी चालू और बंद कर देता है।
बटन स्टेट |
एलईडी (मान) |
एलईडी (लाल) |
एलसीडी (16x2) |
पता चला |
असत्य |
बंद |
- |
दब गया |
सच |
पर |
'' INTERRUPT '' |
यदि ledOn मूल्य है झूठी तो एलईडी अवशेष बंद कर दिया है और यदि ledOn तो एलईडी मूल्य यह सच है और चालू हो जाता है उस पर एलसीडी डिस्प्ले शो 'इंटरप्ट'।
नोट: कभी-कभी स्विच डेब्यू प्रभाव हो सकता है और पुशबटन को दबाए जाने पर यह कई ट्रिगर को गिन सकता है, यह इसलिए है क्योंकि पुश बटन को स्विच करने के यांत्रिक कारण के कारण वोल्टेज में कई स्पाइक्स होते हैं। आरसी फिल्टर लगाकर इसे कम किया जा सकता है।
STM32F103C8 में इंटरप्ट का पूरा काम नीचे दिए गए वीडियो में दिखाया गया है ।