विषयसूची:

ATtiny2313 के साथ स्विच पढ़ना: 9 कदम
ATtiny2313 के साथ स्विच पढ़ना: 9 कदम

वीडियो: ATtiny2313 के साथ स्विच पढ़ना: 9 कदम

वीडियो: ATtiny2313 के साथ स्विच पढ़ना: 9 कदम
वीडियो: Atmel AVR AtTiny13 - Kurze Einführung zu den Chips und den Möglichkeiten 2024, जुलाई
Anonim
ATtiny2313. के साथ स्विच पढ़ना
ATtiny2313. के साथ स्विच पढ़ना

ATtiny2313 और इसी तरह के AVR उपकरणों से आउटपुट के साथ काम करने वाले कई इंस्ट्रक्शंस हैं। उदाहरण के लिए, https://www.instructables.com/id/Ghetto-Programming%3a-Getting-started-with-AVR-micro/, https://www.instructables.com/id/Drive-a-Stepper- मोटर-साथ-ए-एवीआर-माइक्रोप्रोसेसर/. द रियल इलियट के नवीनतम एक पर काम करना, जिसमें दिखाया गया था कि स्टेपर मोटर्स को कैसे नियंत्रित किया जाता है, मैंने पाया कि एक ही प्रोग्राम में कोड के वैकल्पिक वर्गों को चलाने में सक्षम होना वास्तव में मददगार होगा, इसलिए मुझे ATtiny2313 प्रत्येक को फिर से शुरू करने की आवश्यकता नहीं थी। समय मैं एक मामूली कोड भिन्नता का प्रयास करना चाहता था (जैसे आधा कदम या स्टेपर को रिवर्स में चलाना)। हालांकि वैकल्पिक विविधताओं के चयन की अनुमति देने के लिए स्विच/केस स्टेटमेंट का उपयोग करके कोड लिखना आसान है, मामले को चुनने के किसी तरीके की आवश्यकता है। इसका मतलब है कि मामले को नियंत्रित करने के लिए किसी प्रकार के इनपुट डिवाइस को पढ़ना होगा। सौभाग्य से, ATtiny2313 में बहुत सारे I/O पिन हैं और स्विच से इनपुट पढ़ने के लिए अच्छी तरह से डिज़ाइन किया गया है। यह निर्देश दिखाएगा कि कैसे इनपुट को पढ़ना है और अपने राज्य के आधार पर निर्णय लेना है। चूँकि वह अकेले ही एक बहुत ही उबाऊ शिक्षाप्रद बना देगा, मैं एक छोटे स्पीकर को बीपर के रूप में चलाने के लिए ATtiny2313 के टाइमर / काउंटर क्षमता का उपयोग करने का एक सरल तरीका समझाता हूँ। सरल डिबगिंग तकनीकों पर एक छोटा विषयांतर भी होगा।

चरण 1: इनपुट डिवाइस

इनपुट डिवाइस
इनपुट डिवाइस
इनपुट डिवाइस
इनपुट डिवाइस

यह इंस्ट्रक्शनल द रियल इलियट के उत्कृष्ट कार्य पर आधारित है और उनके द्वारा वर्णित ATtiny2313 यहूदी बस्ती विकास प्रणाली का उपयोग करता है। Atmel से ATtiny2313 डेटा शीट सभी कार्यों के लिए अंतिम संदर्भ है, लेकिन इसे पढ़ना आसान नहीं है। https://www.atmel.com/dyn/products/datasheets.asp?family_id=607 (लिंक में सभी AVR डेटा शीट हैं, 2313 का पता लगाएं।) यह आंकड़ा इनपुट स्विच का एक सरल सेट दिखाता है। यह केवल चार ऑन/ऑफ स्विच का पैकेज है; सिंगल पोल, सिंगल थ्रो स्विच (SPST) के रूप में भी जाना जाता है। आमतौर पर, प्रत्येक स्विच का एक कनेक्शन, या पोल, जमीन से बंधा होता है, जबकि दूसरा कनेक्शन एक करंट लिमिटिंग रेसिस्टर (10K या तो) के माध्यम से ऊंचा खींचा जाता है। एक माइक्रोकंट्रोलर इनपुट रेसिस्टर के साथ पोल से जुड़ा होता है। यदि स्विच खुला है, तो माइक्रोकंट्रोलर इनपुट को HI के रूप में पढ़ेगा। यदि स्विच बंद है, तो माइक्रोकंट्रोलर इनपुट LO को पढ़ेगा। विवरण के लिए योजनाबद्ध देखें। ATtiny2313 इनपुट के रूप में कॉन्फ़िगर किए जाने पर I/O पिन पर प्रोग्राम करने योग्य पुल-अप प्रतिरोधक प्रदान करके चीजों को सरल बनाता है। इसका मतलब यह है कि स्विच में केवल एक पोल जमीन से बंधा हो सकता है (LO) और दूसरा पोल एक प्रोसेसर इनपुट से जुड़ा हो सकता है। पहला उदाहरण केवल दो स्विच दिखाता है। स्विच को निम्न कोड के साथ पढ़ा और कॉन्फ़िगर किया गया है। स्विच को इनपुट के रूप में कॉन्फ़िगर करें: (कोई कोड आवश्यक नहीं है; यह डिफ़ॉल्ट है।) पुल-अप प्रतिरोधों को चालू करें: PORTB = _BV(PB0) | _BV(PB1);इनपुट पढ़ें: but1 = ~PINB & 0x03; सही मूल्य प्राप्त करने के लिए उलटा और मास्किंग के उपयोग पर ध्यान दें।

चरण 2: सिग्नल के लिए ब्लिंकनलाइट्स

हम इन दो स्विचों का उपयोग एक एलईडी को प्रोग्राम करने योग्य संख्या में बार-बार ब्लिंक करने के लिए करेंगे। हम जिन एल ई डी का उपयोग करेंगे वे ब्लिंकनलाइट होंगे जिन्हें रियल इलियट ने प्रसिद्ध किया था। स्विच 1 और 2 को दो बाइनरी अंकों के रूप में माना जाएगा, इसलिए संयोजन 0, 1, 2, और 3 संख्याओं का प्रतिनिधित्व कर सकता है। हमारा प्रोग्राम दो स्विच को पढ़ेगा और एलईडी को उचित संख्या में ब्लिंक करेगा, लेकिन केवल तभी जब स्विच सेटिंग्स बदल गई हैं। स्विच 500 मिलीसेकंड (अनुकूलित नहीं) के लिए डिबेंड किए जाते हैं। बहस एल्गोरिथ्म बहुत सरल है। स्विच पढ़े जाते हैं और रीडिंग नोट की जाती है। यदि यह पुराने से अलग हैलेकिन मूल्य (अंतिम सहेजा गया मान), तो प्रोग्राम 500 मिलीसेकंड के लिए विलंबित हो जाता है और स्विच फिर से पढ़े जाते हैं। यदि मान पहले पढ़े गए मान के समान है, तो पुराने का मान अपडेट किया जाएगा और एलईडी दो स्विच के बाइनरी मान द्वारा निहित समय की संख्या को झपकाएगा। मान के व्युत्क्रम पर ध्यान दें क्योंकि "चालू" स्विच LO पढ़ता है। आगे के बदलावों के लिए स्विच को लगातार स्कैन किया जाएगा। ब्लिंकलाइट्स के बारे में अधिक जानने के लिए कृपया रियल इलियट द्वारा पहले के इंस्ट्रक्शंस देखें। डिबाउंसिंग स्विच के बारे में अधिक जानने के लिए इस https://www.ganssle.com/debouncing.pdf पर एक नजर डालें। इस उदाहरण के लिए यहां ATtiny2313 कोड है। संचालन में, यह प्रोग्राम PB4 (भौतिक पिन 8) पर एलईडी को दो बार झपकाएगा यह दिखाने के लिए कि यह आरंभिक है। यह तब स्विच एक और दो को पढ़ेगा, और जब भी वे बदले जाते हैं तो स्विच सेटिंग के आधार पर एक से तीन बार झपकाएगा। जब स्विच नहीं बदल रहे हैं, तो एलईडी धीरे-धीरे झपकेगी। इस कोड को चलाने के लिए, एक नई निर्देशिका बनाएं (यदि आप चाहें तो इसे "बेसिक" कहें) और निम्न सी कोड फ़ाइल डाउनलोड करें और उसमें मेकफ़ाइल करें। Makefile1.txt का नाम बदलकर सिर्फ Makefile कर दें। WinAVR का उपयोग करके, प्रोग्राम को संकलित करें और इसे अपने ATtiny2313 में लोड करें।

चरण 3: डिबगिंग पर एक मामूली विषयांतर।

यदि आप मेरी तरह हैं (और दुनिया के हर दूसरे प्रोग्रामर) तो आपने शायद ऐसे समय का अनुभव किया है जब आपने "त्रुटि-मुक्त" कोड को ध्यान से टाइप किया है और संकलित किया है, वह वह नहीं करता है जो आप उससे करने की उम्मीद करते हैं। शायद यह बस कुछ नहीं करता है! तो समस्या क्या है? आप कैसे पता लगाने जा रहे हैं? सौभाग्य से, चीजों को काम पर लाने के कई तरीके हैं। (डिबगिंग के विषय के उत्कृष्ट उपचार के लिए इस पुस्तक को प्राप्त करें। https://www.debuggingrules.com/) मैं माइक्रोकंट्रोलर अनुप्रयोगों को डीबग करने के विषय से संबंधित कुछ सरल सुझाव देना चाहता हूं। पहला कदम आगे बढ़ाना है आप क्या जानते हैं। यदि आपको एक बार काम करने के लिए ब्लिंकलाइट मिल गई है, तो इसका फिर से उपयोग करके देखें कि आप अपने कार्यक्रम में कहां हैं। मुझे कार्यक्रम की शुरुआत का संकेत देने के लिए दो बार एलईडी ब्लिंक करना पसंद है। आप अपने प्रोग्राम की शुरुआत में ऐसा करने के लिए कोड डाल सकते हैं। एक बार जब आप जान जाते हैं कि आपके हार्डवेयर में कुछ भी गलत नहीं है, तो ब्लिंक करने के लिए एक फ़ंक्शन बनाएं। यहाँ वह फ़ंक्शन है जिसका मैं उपयोग करता हूँ।/*------------------------------------------ -----------------------------** blinkEm - PD4 का उपयोग करके LED को ब्लिंक करने के लिए फ़ंक्शन ** PD4 को आउटपुट के रूप में कॉन्फ़िगर किया जाना चाहिए। **------------------------------------------------ ----------------------*/शून्य पलकें(uint8_t गिनती){ जबकि (गिनती> 0){ PORTD = _BV(PD4); _delay_ms (1000); PORTD = ~_BV (PD4); _delay_ms (1000); गिनती--; }}अब इस फ़ंक्शन का उपयोग आपके कोड में विभिन्न बिंदुओं पर एक संकेत के रूप में करना संभव है कि कोड ने अब तक निष्पादित किया है। यह जानने का मतलब है कि कोड चल रहा है, इसका मतलब है कि आप प्रत्येक अनुभाग की सावधानीपूर्वक जांच कर सकते हैं, लेकिन त्रुटियों का पता लगाने के लिए आपने जो अपेक्षा की थी, वह नहीं किया। एक समय में एक चीज़ को बदलना डिबगिंग के लिए भी एक महत्वपूर्ण तकनीक है (उपरोक्त संदर्भ में वर्णित)। यह क्लासिक विधि "फूट डालो और जीतो" के साथ काम करती है: कार्यक्षमता को बढ़ाने के लिए बेबी स्टेप्स लेना। यह एक धीमे दृष्टिकोण की तरह लग सकता है, लेकिन यह लगभग उतना धीमा नहीं है जितना कि गैर-कार्यशील कोड के एक बड़े हिस्से को एक साथ डीबग करने का प्रयास करना।

चरण 4: अधिक डिबगिंग

कई बार ऐसा होता है कि जब हम कोड के किसी भाग की जांच करना चाहते हैं, तो उसमें अधिकांश पंक्तियों को छोड़ कर, फिर उन्हें एक-एक करके सक्षम करते हैं क्योंकि हम प्रत्येक कार्य को सत्यापित करते हैं। आमतौर पर, हम इसे "टिप्पणी करके" उन पंक्तियों के द्वारा करते हैं जिन्हें हम छोड़ना चाहते हैं। इस तकनीक का एक विस्तार कोड के एक ब्लॉक को काटना और चिपकाना है, मूल पर टिप्पणी करना (ताकि हम इसे खो न दें), और कॉपी को हैक कर लें। C के पास पंक्तियों पर टिप्पणी करने के चार आसान तरीके हैं। एक पंक्ति के सामने "//" रखने से उस पंक्ति पर टिप्पणी हो जाती है। "/*" और "*/" में एक या अधिक पंक्तियों को संलग्न करने से एक संपूर्ण खंड पर टिप्पणी हो जाएगी। इस पद्धति के प्रभावी ढंग से काम करने के लिए, कोड ब्लॉक (अंतिम एक के अलावा) में कोई अन्य "*/" नहीं होना चाहिए। तो एक प्रभावी अनुशासन कोड के ब्लॉक के भीतर टिप्पणियों के लिए // का उपयोग करना है, और टिप्पणी ब्लॉक के लिए /* */ निर्माण आरक्षित करना है और कोड के अनुभागों पर टिप्पणी करना है। टिप्पणी करने के लिए ब्लॉक की शुरुआत में "#if 0" रखना और "#endif" के साथ अनुभाग को समाप्त करना। एक ब्लॉक की शुरुआत में "#ifdef (पहचानकर्ता)" और अंत में "#endif" का उपयोग करके अधिक चयनात्मक नियंत्रण संभव है। यदि आप ब्लॉक को संकलित करना चाहते हैं, तो प्रोग्राम में पहले "#define (पहचानकर्ता)" का उपयोग करें। ध्यान दें कि उद्धरण चिह्न केवल जोर देने के लिए हैं और इन्हें शामिल नहीं किया जाना है। इन तकनीकों के संयोजन से आपके ATtiny2313 कार्यक्रमों को डीबग करने के लिए एक उपयोगी दृष्टिकोण प्रदान करना चाहिए। जैसे ही हम इस निर्देश के माध्यम से आगे बढ़ते हैं, आपको ये उपकरण उपयोगी लग सकते हैं।

चरण 5: बीप्स के लिए टाइमर/काउंटर 0 का उपयोग करना

बीप्स के लिए टाइमर/काउंटर 0 का उपयोग करना
बीप्स के लिए टाइमर/काउंटर 0 का उपयोग करना

ATtiny2313 में दो शक्तिशाली टाइमर/काउंटर संसाधन हैं: एक 8-बिट और एक 16-बिट। इन्हें आवृत्ति जनरेटर, चर पल्स चौड़ाई मॉडुलन नियंत्रक, और आउटपुट तुलना रजिस्टरों के रूप में कॉन्फ़िगर किया जा सकता है। इनकी पूर्ण कार्यक्षमता का वर्णन डेटा शीट के 49 पृष्ठों में किया गया है। हालांकि, हम एक साधारण मामले का उपयोग करेंगे। केवल टाइमर/काउंटर 0 (8-बिट वाला) का उपयोग किया जाएगा और इसका उपयोग केवल आवृत्ति जनरेटर के रूप में किया जाएगा। एक बीप उत्पन्न करने के लिए आवृत्ति को एक छोटे स्पीकर पर भेजा जाएगा। टाइमर/काउंटर 0 पूरी तरह से ATtiny2313 डेटा शीट के पेज 66 से 83 में वर्णित है। इस सामग्री को बारीकी से पढ़ने से व्यक्ति को समय/काउंटर 0 की पूरी समझ मिल जाएगी। खुशी की बात है कि एक काफी सरल मोड, क्लियर टाइमर ऑन कम्पेयर (सीटीसी), वह सब कुछ है जो हमें इच्छित बीप टोन उत्पन्न करने के लिए आवश्यक है।

हम जिस मोड का उपयोग करेंगे, उसके लिए टाइमर/काउंटर का संचालन सीधा है। जब एक घड़ी संकेत चुना जाता है, तो काउंटर शून्य से शुरू होता है और प्रत्येक घड़ी की पल्स को बढ़ाता है। जब काउंटर वैल्यू आउटपुट तुलना रजिस्टर (टॉप) में मान तक पहुंच जाती है, तो काउंटर शून्य पर रीसेट हो जाता है और गिनती फिर से शुरू होती है। टाइमर/काउंटर से जुड़े आउटपुट बिट को स्क्वायर वेव आउटपुट बनाने के लिए टॉगल किया जाता है। यह बीप ध्वनि करने के लिए सीधे एक ऑडियो ट्रांसड्यूसर चलाता है। एक छोटा टीडीके ऑडियो ट्रांसड्यूसर बीप उत्पन्न करता है। एक उपयुक्त इकाई Digikey 445-2530-ND, TDK SD1209T3-A1 है (मैंने इसका शुरुआती संस्करण इस्तेमाल किया)। यह एक 3 वोल्ट संस्करण है; 5 वोल्ट संस्करण भी मेरी अपेक्षा के अनुरूप काम करेगा। मैं इसे सीधे Attiny2313 के आउटपुट पोर्ट से चलाता हूं और ऐसा लगता है कि यह ठीक काम करता है। स्पार्कफुन में एक समान डिवाइस है।

चरण 6: टाइमर/काउंटर कॉन्फ़िगर करना 0

CTC मोड का उपयोग पिन 2, पोर्ट B (भौतिक पिन 14) पर आउटपुट OC0A को चालू करने के लिए किया जा सकता है। इस पिन पर आउटपुट सक्षम करने के लिए, डीडीआरबी को उचित रूप से सेट किया जाना चाहिए। इसके लिए सी कोड ब्लिंकलाइट के लिए आउटपुट सेट करने जैसा है। डीडीआरबी = _बीवी (पीबी 2); // पोर्ट बी 2 एक आउटपुट है। अगला कदम एक घड़ी संकेत की आपूर्ति करना है और एक आवृत्ति के रूप में एक तरंग का उत्पादन करने के लिए आउटपुट तुलना रजिस्टर को लोड करना है। परिणामी आवृत्ति का समीकरण डेटा शीट (पृष्ठ 72) में दिया गया है। समीकरण में शर्तों का वर्णन नीचे किया जाएगा। यहाँ समीकरण है: fOC0A = fclk_I/O/2*N*(1+OCR0A)जहां fOC0A:= आउटपुट आवृत्ति fclk_I/O:= घड़ी स्रोत आवृत्ति N:= घड़ी प्रीस्केल फैक्टर OCR0A:= आउटपुट में मान टाइमर के लिए रजिस्टर की तुलना करें/ काउंटर 0A.घड़ी स्रोत आवृत्ति, fclk_I/Oयह सिस्टम घड़ी की आवृत्ति है। डिफ़ॉल्ट मान 1MHz है। TCCR0B के बिट्स CS00, CS01 और CS02 इस चयन को नियंत्रित करते हैं। चूंकि ये बिट भी N के मान का चयन करते हैं, इसका वर्णन आगे किया गया है। Prescaler Value, NN सिस्टम क्लॉक को विभाजित करने, या प्रीस्केल करने के लिए उपयोग किया जाने वाला मान है। TCCR0B के बिट्स CS00, CS01 और CS02 इस चयन को नियंत्रित करते हैं। ATtiny2313 डेटा शीट के पृष्ठ 81 पर तालिका 41 संयोजनों का वर्णन करती है। चूंकि 1kHz के पास एक आवृत्ति वांछित है, TCCR0B के बिट्स CS00 और CS01 सेट किए जाएंगे। ध्यान दें कि सभी तीन बिट्स को 0 पर सेट करना, इस प्रकार कोई घड़ी स्रोत नहीं चुनना, आउटपुट को प्रभावी ढंग से रोकता है। यह वह तरीका है जिसका उपयोग बीप को शुरू और बंद करने के लिए किया जाएगा। शीर्ष मान, OCR0Aयह मान काउंटर के लिए शीर्ष मान है जो टाइमर/काउंटर 0A के लिए आउटपुट तुलना रजिस्टर में लोड किया गया है। जब यह मान पहुंच जाता है, तो काउंटर को शून्य पर रीसेट कर दिया जाएगा और टॉप तक पहुंचने और चक्र दोहराने तक गिनती फिर से शुरू हो जाएगी। टॉप को आसानी से संशोधित किया जाता है, इसलिए बीपर की आवृत्ति को बदलना आसान होता है। चूंकि 1kHz के पास एक आवृत्ति वांछित है, TOP को 7 पर सेट किया गया है (ध्यान दें कि प्रीस्केलर को 8 पर सेट किया जा सकता है, और TOP को 63 पर सेट किया जा सकता है। समान परिणाम - आपकी पसंद।) आउटपुट फ़्रीक्वेंसी, fOC0AU आउटपुट फ़्रीक्वेंसी परिणामों की गणना करने के लिए समीकरण का उपयोग करना में: fOC0A = 1, 000, 000/2 * 64 * (1+7) fOC0A = 977Hz काफी करीब! आउटपुट तुलना रजिस्टर और टाइमर काउंटर कंट्रोल रजिस्टर 0B लोड करने के लिए कोड यहां दिया गया है। इनका उपयोग कैसे किया जाता है, यह समझने के लिए कृपया वास्तविक प्रोग्राम कोड देखें। ओसीआर0ए = 7; // समय मूल्य TCCR0B = _BV (CS01) | _बीवी (सीएस00); // आंतरिक घड़ी और प्रीस्केल = 8 TCCR0B = 0 का चयन करें; // कोई घड़ी स्रोत टोन बंद नहीं करता है समय / काउंटर मोड सेट करना अंतिम विवरण के रूप में, हम टाइमर / काउंटर मोड को निर्दिष्ट करेंगे जो हम टाइमर / काउंटर कंट्रोल रजिस्टर 0 ए में उपयुक्त बिट्स सेट करके चाहते हैं। डेटा शीट के पृष्ठ 79 तालिका 40 में वर्णित अनुसार बिट WGM01 को सेट करके सीटीसी मोड का चयन किया जाता है। चूंकि हम चाहते हैं कि आउटपुट प्रत्येक चक्र को चालू करे, इसलिए बिट COM0A0 को भी सेट करने की आवश्यकता है जैसा कि पृष्ठ 77 पर तालिका 34 में वर्णित है। यहां कोड है: TCCR0A = _BV(COM0A0) | _बीवी (डब्ल्यूजीएम01); // सीटीसी टॉगल मोड

चरण 7: चार स्विच का उपयोग करना

जैसा कि हम बीपर को लागू करते हैं, आइए चार स्विच को संभालने के लिए अपने हार्डवेयर और सॉफ्टवेयर का विस्तार करें। चूंकि टाइमर काउंटर 0ए का आउटपुट पोर्ट बी, पिन 2 पर है, इसलिए हम पोर्ट बी में क्रमिक रूप से अधिक स्विच नहीं लगा सकते हैं। पोर्ट डी का उपयोग करने के लिए एक आसान समाधान होगा, लेकिन आइए उस पोर्ट को अन्य कार्यों के लिए उपलब्ध रखें (शायद स्टेपर मोटर)। तो चलिए अतिरिक्त स्विच को PB3 और PB4 से जोड़ते हैं। स्विच को पढ़ना ज्यादातर अपरिवर्तित रहता है। मास्क का मान 0x1B (00011011 बाइनरी) में बदलकर 5, 6 और 7 के साथ बिट 2 को मास्क कर दिया जाता है। 4-बिट बाइनरी नंबर बनाने के लिए एक और ट्रिक का उपयोग किया जाता है। बिट्स 3 और 4 को एक बिट में शिफ्ट करें और उन्हें बिट्स 0 और 1 के साथ 4 बिट बाइनरी नंबर में मिलाएं। बिट्स को स्थानांतरित करने और संयोजन करने के लिए यह मानक सी सिंटैक्स है, लेकिन नौसिखियों को अच्छी तरह से ज्ञात नहीं हो सकता है। but1a = (लेकिन1 और 0x03) | ((लेकिन1 और 0x18) >> 1); // but1 में स्विच रीडिंग हैऑपरेशन में, प्रोग्राम दो बार ब्लिंक करेगा और इनिशियलाइज़ेशन को सिग्नल करने के लिए दो बार बीप करेगा। जब भी स्विच बदले जाते हैं, तो वे जिस नंबर का प्रतिनिधित्व करते हैं, वह बीप हो जाएगा। जब स्विच नहीं बदल रहे हैं, एलईडी झपकाएगा। इस कोड को चलाने के लिए, एक नई निर्देशिका बनाएं (यदि आप चाहें तो इसे बीप कहते हैं) और निम्न सी कोड फ़ाइल डाउनलोड करें और उसमें मेकफ़ाइल करें। Makefile2.txt का नाम बदलकर सिर्फ Makefile कर दें। WinAVR का उपयोग करके, प्रोग्राम को संकलित करें और इसे अपने Attiny2313 में लोड करें।

चरण 8: स्विच/केस निर्माण का उपयोग करना

अंतिम चरण "सिर्फ सॉफ्टवेयर" है: जैसा कि वादा किया गया था, हम स्विच/केस निर्माण को लागू करेंगे। हालांकि यह उदाहरण केवल दो वैकल्पिक कार्रवाइयां दिखाता है, यह बहुत स्पष्ट होना चाहिए कि कई वैकल्पिक कोड अनुभागों में से एक का चयन करने के लिए इस निर्माण का उपयोग कैसे करें। संचालन में, यह प्रोग्राम स्विच की निगरानी करता है और यदि कोई परिवर्तन होता है, तो यह विषम होने पर उपयुक्त संख्या को बीप करेगा; संख्या सम होने पर यह झपकेगी। यह तब तक कुछ नहीं करता जब तक कोई स्विच नहीं बदलता।

इस कोड को चलाने के लिए, एक नई निर्देशिका बनाएं (इसे कॉल करें यदि आप चाहें तो स्विच करें) और निम्न सी कोड फ़ाइल डाउनलोड करें और उसमें मेकफ़ाइल करें। Makefile3.txt का नाम बदलकर सिर्फ Makefile कर दें। WinAVR का उपयोग करके, प्रोग्राम को संकलित करें और इसे अपने Attiny2313 में लोड करें।

चरण 9: निष्कर्ष

निष्कर्ष
निष्कर्ष

तो यह बात है! अब आप जानते हैं कि स्विच को पढ़कर और स्विच सेटिंग के आधार पर एक क्रिया का चयन करके अपने प्रोग्राम के निष्पादन को नियंत्रित करने के लिए स्विच का उपयोग कैसे करें। आप बीप टोन बनाना भी जानते हैं और कुछ डिबग रणनीति भी सीख चुके हैं।

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

सिफारिश की: