- एंबेडेड इलेक्ट्रॉनिक्स में टाइमर क्या है?
- Arduino टाइमर रजिस्टर
- Arduino टाइमर रुकावट
- अवयव आवश्यक
- सर्किट आरेख
- प्रोग्रामिंग Arduino UNO टाइमर
आर्टुडू डेवलपमेंट प्लेटफ़ॉर्म को मूल रूप से 2005 में कला डिजाइन परियोजनाओं के लिए उपयोग में आसान प्रोग्राम डिवाइस के रूप में विकसित किया गया था। इसका इरादा गैर-इंजीनियरों को बुनियादी इलेक्ट्रॉनिक्स और माइक्रोकंट्रोलर के साथ बिना प्रोग्रामिंग ज्ञान के काम करने में मदद करना था। लेकिन फिर, प्रकृति का उपयोग करने में आसान होने के कारण इसे जल्द ही दुनिया भर के इलेक्ट्रॉनिक्स शुरुआती और शौकीनों द्वारा अनुकूलित किया गया था और आज भी इसे प्रोटोटाइप विकास और पीओसी विकास के लिए पसंद किया जाता है।
हालांकि, Arduino के साथ शुरू करना ठीक है, धीरे-धीरे AVR, ARM, PIC, STM आदि जैसे कोर माइक्रोकंट्रोलर में स्थानांतरित करना और अपने मूल अनुप्रयोगों का उपयोग करके इसे प्रोग्राम करना महत्वपूर्ण है। ऐसा इसलिए है क्योंकि Arduino प्रोग्रामिंग भाषा को समझना बहुत आसान है क्योंकि अधिकांश काम प्री-बिल्ट फ़ंक्शंस जैसे digitalWrite (), AnalogWrite (), Delay () आदि द्वारा किए जाते हैं जबकि निम्न स्तर की मशीन भाषा उनके पीछे छिपी होती है। Arduino प्रोग्राम अन्य एंबेडेड सी कोडिंग के समान नहीं हैं जहां हम रजिस्टर बिट्स के साथ काम करते हैं और हमारे कार्यक्रम के तर्क के आधार पर उन्हें उच्च या निम्न बनाते हैं।
देरी के बिना Arduino टाइमर:
इसलिए, यह समझने के लिए कि पूर्व-निर्मित कार्यों के अंदर क्या हो रहा है, हमें इन शर्तों के पीछे खुदाई करने की आवश्यकता है। उदाहरण के लिए जब देरी () फ़ंक्शन का उपयोग किया जाता है तो यह वास्तविक और ATmega माइक्रोकंट्रोलर के काउंटर रजिस्टर बिट्स सेट करता है।
इस arduino टाइमर ट्यूटोरियल में हम इस देरी () फ़ंक्शन के उपयोग से बचने के लिए जा रहे हैं और इसके बजाय वास्तव में खुद रजिस्टरों से निपटते हैं। अच्छी बात यह है कि आप इसके लिए एक ही Arduino IDE का उपयोग कर सकते हैं। हम अपने टाइमर रजिस्टर बिट्स को सेट करेंगे और हर बार इंटरप्ट होने पर एलईडी को टॉगल करने के लिए टाइमर ओवरफ्लो इंटरप्ट का उपयोग करेंगे । टाइमर की बिट का प्रीलोडर मान भी पुशबटन का उपयोग करके समायोजित किया जा सकता है ताकि उस अवधि को नियंत्रित किया जा सके जिसमें रुकावट होती है।
एंबेडेड इलेक्ट्रॉनिक्स में टाइमर क्या है?
टाइमर एक तरह का व्यवधान है। यह एक साधारण घड़ी की तरह है जो किसी घटना के समय अंतराल को माप सकती है। हर माइक्रोकंट्रोलर में एक घड़ी (थरथरानवाला) होती है, अरडिनो में कहते हैं कि यह 16Mhz है। यह गति के लिए जिम्मेदार है। उच्चतर घड़ी की आवृत्ति उच्चतर होगी प्रसंस्करण गति। एक घड़ी काउंटर का उपयोग करता है जो घड़ी की आवृत्ति के आधार पर निश्चित गति से मायने रखता है। Arduino Uno में सिंगल काउंट बनाने में 1/16000000 सेकंड या 62nano सेकंड लगते हैं। मतलब Arduino हर 62 नैनो सेकंड के लिए एक निर्देश से दूसरे निर्देश पर जाता है।
Arduino UNO में टाइमर:
Arduino UNO में विभिन्न कार्यों के लिए उपयोग की जाने वाली तीन इमारते हैं।
समय:
यह एक 8-बिट टाइमर है और इसे देरी (), मिली () जैसे टाइमर फ़ंक्शन में उपयोग किया जाता है।
टाइमर 1:
यह 16-बिट टाइमर है और सर्वो लाइब्रेरी में उपयोग किया जाता है।
टाइमर 2:
यह एक 8-बिट टाइमर है और टोन () फ़ंक्शन में उपयोग किया जाता है।
Arduino टाइमर रजिस्टर
टाइमर के विन्यास को बदलने के लिए, टाइमर रजिस्टरों का उपयोग किया जाता है।
1. टाइमर / काउंटर कंट्रोल रजिस्टर (TCCRnA / B):
यह रजिस्टर टाइमर का मुख्य नियंत्रण बिट्स रखता है और टाइमर के प्रीस्कूलरों को नियंत्रित करने के लिए उपयोग किया जाता है। यह WGM बिट्स का उपयोग करके टाइमर के मोड को नियंत्रित करने की भी अनुमति देता है।
फ़्रेम प्रारूप:
TCCR1A | । | ६ | ५ | ४ | ३ | २ | 1 | ० |
COM1A1 | COM1A0 | COM1B1 | COM1B0 | COM1C1 | COM1C0 | WGM11 | WGM10 |
TCCR1B | । | ६ | ५ | ४ | ३ | २ | 1 | ० |
ICNC1 | ICES1 | - | WGM13 | WGM12 | CS12 | CS11 | CS10 |
प्रीस्कूलर:
TCCR1B में CS12, CS11, CS10 बिट्स प्रीस्कूलर मान सेट करते हैं। टाइमर की घड़ी की गति को सेटअप करने के लिए एक प्रीस्कूलर का उपयोग किया जाता है। Arduino Uno में 1, 8, 64, 256, 1024 के प्रीस्कूलर हैं।
CS12 | CS11 | CS10 | उपयोग |
० | ० | ० | नो क्लॉक टाइमर STOP |
० | ० | 1 | CLCK i / o / 1 कोई प्रीस्कूलिंग नहीं |
० | 1 | ० | सीएलके आई / ओ / 8 (प्रीस्कूलर से) |
० | 1 | 1 | सीएलके आई / ओ / 64 (प्रीस्कूलर से) |
1 | ० | ० | सीएलके आई / ओ / 256 (प्रीस्कूलर से) |
1 | ० | 1 | CLK i / o / 1024 (प्रीस्कूलर से) |
1 | 1 | ० | T1 पिन पर बाहरी घड़ी स्रोत। गिरते हुए किनारे पर घड़ी |
1 | 1 | 1 | T1 पिन पर बाहरी घड़ी का स्रोत। बढ़ती बढ़त पर घड़ी। |
2. टाइमर / काउंटर रजिस्टर (TCNTn)
इस रजिस्टर का उपयोग काउंटर मूल्य को नियंत्रित करने और प्रीलोडर मान सेट करने के लिए किया जाता है।
दूसरे समय में आवश्यक समय के लिए प्रीलोडर मान के लिए फॉर्मूला:
TCNTn = 65535 - (सेकंड / प्रीस्कूलर मान में 16x10 10 xTime)
2 सेकंड के समय के लिए टाइमर 1 के लिए प्रीलोडर मान की गणना करने के लिए:
TCNT1 = 65535 - (16x10 10 x2 / 1024) = 34285
Arduino टाइमर रुकावट
हमने पहले Arduino Interrupts के बारे में सीखा और देखा कि Timer interrupts एक तरह का सॉफ्टवेयर इंटरप्ट है। Arduino में विभिन्न टाइमर इंटरप्ट हैं जिन्हें नीचे समझाया गया है।टाइमर अतिप्रवाह बाधा:
जब भी टाइमर अपने अधिकतम मूल्य पर पहुंचता है उदाहरण के लिए कहते हैं (16 बिट -65535) टाइमर ओवरफ्लो इंटरप्ट होता है। इसलिए, टाइमर अवरोधक मास्क रजिस्टर TIMSKx में मौजूद TOIEx में टाइमर ओवरफ्लो इंटरप्ट बिट सक्षम होने पर ISR इंटरप्ट सर्विस रूटीन कहा जाता है।
ISR प्रारूप:
ISR (TIMERx_OVF_vect) { }
आउटपुट रजिस्टर (OCRnA / B) की तुलना करें:
यहाँ जब आउटपुट की तुलना मैच इंटरप्ट होती है तब इंटरप्ट सर्विस ISR (TIMERx_COMPy_vect) कहलाती है और TFRx रजिस्टर में OCFxy फ्लैग बिट भी सेट किया जाएगा। यह ISR TIMSKx रजिस्टर में मौजूद OCIExy में सक्षम बिट सेट करके सक्षम किया गया है। जहां TIMSKx टाइमर इंटरप्ट मास्क रजिस्टर है।
टाइमर इनपुट कैप्चर:
इसके बाद जब टाइमर इनपुट कैप्चर इंटरप्ट होता है तो इंटरप्ट सर्विस ISR (TIMERx_CAPT_vect) कहलाती है और इसके अलावा ICFx फ्लैग बिट TIFRx (टाइमर इंटरप्ट फ्लैग रजिस्टर) में सेट हो जाएगा। यह ISR TIMSKx रजिस्टर में मौजूद ICIEx में सक्षम बिट सेट करके सक्षम किया गया है।
अवयव आवश्यक
- Arduino UNO
- पुश बटन (2)
- एलईडी (कोई भी रंग)
- 10k रेसिस्टर (2), 2.2k (1)
- 16x2 एलसीडी डिस्प्ले
सर्किट आरेख
Arduino UNO और 16x2 LCD डिस्प्ले के बीच सर्किट कनेक्शन:
16x2 एलसीडी |
Arduino UNO |
वीएसएस |
GND |
VDD |
+ 5 वी |
वि ० |
एलसीडी के कंट्रास्ट कंट्रोल के लिए पोटेंशियोमीटर सेंटर पिन |
रुपये |
। |
आरडब्ल्यू |
GND |
इ |
९ |
डी 4 |
१० |
D5 |
1 1 |
डी 6 |
१२ |
डी 7 |
१३ |
ए |
+ 5 वी |
क |
GND |
10K के पुल डाउन रेसिस्टर्स वाले दो पुश बटन Arduino पिन 2 & 4 के साथ जुड़े हुए हैं और एक LED 2.2K प्रतिरोधक के माध्यम से Arduino के पिन 7 से जुड़ा है।
सेटअप नीचे छवि की तरह दिखेगा।
प्रोग्रामिंग Arduino UNO टाइमर
इस ट्यूटोरियल में हम का उपयोग करेगा टाइमर अतिप्रवाह बीच में हैं और इसका उपयोग preloader मूल्य (TCNT1) pushbuttons का उपयोग कर का समायोजन करके निश्चित अवधि के लिए एलईडी चालू और बंद पलक। Arduino टाइमर के लिए पूरा कोड अंत में दिया गया है। यहां हम कोड लाइन को लाइन द्वारा समझा रहे हैं:
चूंकि प्रोजेक्ट में 16x2 एलसीडी का उपयोग प्रीलोडर मूल्य को प्रदर्शित करने के लिए किया जाता है, इसलिए लिक्विड क्रिस्टल लाइब्रेरी का उपयोग किया जाता है।
#शामिल
एलईडी एनोड पिन जो कि Arduino pin 7 से जुड़ा है, को ledPin के रूप में परिभाषित किया गया है ।
# डेफिन ledPin 7
अगले लिक्विड क्रिस्टल क्लास तक पहुँचने के लिए वस्तु को एलसीडी पिन (आरएस, ई, डी 4, डी 5, डी 6, डी 7) के साथ घोषित किया गया है जो कि अरुडिनो यूएनओ से जुड़े हैं।
लिक्विड क्रिस्टल (8,9,10,11,12,13);
फिर 4 सेकंड के लिए प्रीलोडर मान 3035 सेट करें। प्रीलोडर मान की गणना करने के लिए ऊपर दिए गए सूत्र की जाँच करें।
फ्लोट मूल्य = 3035;
शून्य सेटअप () में अगला , पहले 16x2 मोड में एलसीडी सेट करें और कुछ सेकंड के लिए एक स्वागत योग्य संदेश प्रदर्शित करें।
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("ARDUINO TIMERS"); देरी (2000); lcd.clear ();
अगला LED पिन को OUTPUT पिन के रूप में सेट करें और पुश बटन INPUT पिन के रूप में सेट हैं
पिनमोड (ledPin, OUTPUT); पिनमोड (2, INPUT); पिनमोड (4, INPUT);
अगला सभी व्यवधानों को अक्षम करें:
noInterrupts ();
अगला टाइमर 1 आरम्भिक है।
TCCR1A = 0; TCCR1B = 0;
प्रीलोडर टाइमर मान सेट है (शुरुआत में 3035 के रूप में)।
TCNT1 = मान;
तब पूर्व स्केलर मान 1024 TCCR1B रजिस्टर में सेट किया गया है।
TCCR1B - = (1 << CS10) - (1 << CS12);
टाइमर इंटरप्ट मास्क मास्क में टाइमर ओवरफ्लो रुकावट को सक्षम किया जाता है ताकि ISR का उपयोग किया जा सके।
TIMSK1 - = (1 << TOIE1);
अंत में सभी व्यवधान सक्षम हैं।
व्यवधान ();
अब टाइमर ओवरफ्लो इंटरप्ट के लिए ISR लिखें जो डिजिटल ऑनराइट का उपयोग करके LED ON और OFF को चालू करने के लिए जिम्मेदार है । जब भी टाइमर ओवरफ्लो बाधित होता है तो स्थिति बदल जाती है।
ISR (TIMER1_OVF_vect) { TCNT1 = मान; digitalWrite (ledPin, digitalRead (ledPin) ^ 1); }
में शून्य पाश () preloader का मूल्य वृद्धि या पुश बटन इनपुट और भी मूल्य 16x2 एलसीडी पर प्रदर्शित होता है का उपयोग करके कम कर रहा है।
if (digitalRead (2) == High) { मान = मान + 10; // Incement प्रीलोड मान } अगर (digitalRead (4) == High) { value = value-10; // घटाव प्रीलोड वैल्यू } lcd.setCursor (0,0); lcd.print (मान); }
तो यह है कि Arduino प्रोग्राम में देरी का उत्पादन करने के लिए टाइमर का उपयोग कैसे किया जा सकता है। नीचे दिए गए वीडियो की जांच करें जहां हमने पुश बटन का उपयोग करके प्रीलोडर मान को बढ़ाने और कम करने में देरी में परिवर्तन का प्रदर्शन किया है।