विषयसूची:

AVR असेंबलर ट्यूटोरियल 6: 3 चरण
AVR असेंबलर ट्यूटोरियल 6: 3 चरण

वीडियो: AVR असेंबलर ट्यूटोरियल 6: 3 चरण

वीडियो: AVR असेंबलर ट्यूटोरियल 6: 3 चरण
वीडियो: AVR Ассемблер. Урок 11. LCD. AVR Assembler. Lesson 11. LCD. 2024, जुलाई
Anonim
एवीआर असेंबलर ट्यूटोरियल 6
एवीआर असेंबलर ट्यूटोरियल 6

ट्यूटोरियल 6 में आपका स्वागत है!

आज का ट्यूटोरियल छोटा होगा जहां हम एक atmega328p और दूसरे को जोड़ने वाले दो पोर्ट का उपयोग करके डेटा को संचार करने के लिए एक सरल विधि विकसित करेंगे। फिर हम ट्यूटोरियल 4 से पासा रोलर और ट्यूटोरियल 5 से रजिस्टर एनालाइज़र लेंगे, उन्हें एक साथ जोड़ेंगे, और रोलर से एनालाइज़र तक पासा रोल के परिणाम को संप्रेषित करने के लिए हमारी पद्धति का उपयोग करेंगे। फिर हम ट्यूटोरियल 5 में विश्लेषक के लिए बनाए गए एलईडी का उपयोग करके बाइनरी में रोल का प्रिंट आउट लेंगे। एक बार हमारे पास यह काम करने के बाद हम अगले ट्यूटोरियल में अपनी समग्र परियोजना के अगले टुकड़े का निर्माण करने में सक्षम होंगे।

इस ट्यूटोरियल में आपको आवश्यकता होगी:

  1. आपका प्रोटोटाइप बोर्ड
  2. ट्यूटोरियल 4. से आपका पासा रोलर
  3. ट्यूटोरियल 5. से आपका रजिस्टर विश्लेषक
  4. दो कनेक्टिंग तार
  5. संपूर्ण डेटा शीट की एक प्रति (2014 संशोधन):

    www.atmel.com/images/Atmel-8271-8-bit-AVR-M…

  6. निर्देश सेट मैनुअल (2014 संशोधन) की एक प्रति:

    www.atmel.com/images/atmel-0856-avr-instruc…

यहाँ मेरे AVR असेंबलर ट्यूटोरियल के संपूर्ण संग्रह का लिंक दिया गया है:

चरण 1: हम एक दूसरे से बात करने के लिए दो माइक्रोकंट्रोलर कैसे प्राप्त कर सकते हैं?

हम एक दूसरे से बात करने के लिए दो माइक्रोकंट्रोलर कैसे प्राप्त कर सकते हैं?
हम एक दूसरे से बात करने के लिए दो माइक्रोकंट्रोलर कैसे प्राप्त कर सकते हैं?

चूंकि हम अपनी परियोजना का विस्तार करना शुरू कर रहे हैं ताकि हमारा एकल अंत उत्पाद छोटे भागों के संग्रह से बना हो, इसलिए हमें एक Atmega328P की तुलना में अधिक पिन की आवश्यकता होगी। इसलिए हम समग्र परियोजना के प्रत्येक भाग को एक अलग माइक्रोकंट्रोलर पर करने जा रहे हैं और फिर उनके बीच डेटा साझा करेंगे। तो जिस समस्या को हमें हल करने की आवश्यकता है वह यह है कि हम नियंत्रकों के लिए एक दूसरे से बात करने और उनके बीच डेटा स्थानांतरित करने के लिए एक सरल विधि के साथ कैसे आ सकते हैं? खैर, इन नियंत्रकों के बारे में एक बात यह है कि वे प्रति सेकंड 16 मिलियन निर्देश निष्पादित करते हैं। यह बहुत सटीक समय है और इसलिए हम इस समय का उपयोग डेटा स्थानांतरित करने के लिए कर सकते हैं। यदि हम डेटा बनाने के लिए मिलीसेकंड देरी का उपयोग करते हैं तो हमें वास्तव में इतना सटीक होने की ज़रूरत नहीं है क्योंकि सीपीयू एक मिलीसेकंड में 16,000 निर्देश निष्पादित कर रहा है। दूसरे शब्दों में, एक मिलीसेकंड सीपीयू के लिए एक अनंत काल है। तो चलिए इसे पासा रोल के साथ आजमाते हैं। मैं पासा रोलर चिप से विश्लेषक चिप तक पासा रोल के परिणाम को प्रेषित करना चाहता हूं। मान लीजिए कि आप सड़क के उस पार खड़े थे और मैं आपको एक जोड़ी पासे के रोल के परिणाम का संकेत देना चाहता था। एक काम मैं कर सकता था, अगर हम दोनों के पास घड़ी होती, तो क्या मैं एक टॉर्च चालू कर सकता था, फिर जब आप मेरा डेटा प्राप्त करने के लिए तैयार होते हैं तो आप अपनी टॉर्च चालू करते हैं और हम दोनों अपनी घड़ियाँ शुरू करते हैं। फिर मैं अपनी फ्लैशलाइट को पासा रोल के रूप में मिलीसेकंड की सटीक संख्या के लिए चालू रखता हूं और फिर इसे बंद कर देता हूं। इसलिए अगर मैं एक १२ रोल करता हूं तो मैं १२ मिलीसेकंड के लिए अपनी रोशनी रखता हूं। अब उपरोक्त के साथ समस्या यह है कि, आपके और मेरे लिए, ऐसा कोई तरीका नहीं है जिससे हम ५ मिलीसेकंड और १२ के बीच अंतर करने के लिए चीजों को सटीक रूप से समय दे सकें। मिलीसेकंड। लेकिन इसके बारे में क्या: मान लीजिए कि हमने फैसला किया है कि मैं पासे पर प्रत्येक संख्या के लिए एक वर्ष के लिए अपना प्रकाश चालू रखूंगा? फिर अगर मैं १२ का रोल करता हूं तो मैं १२ साल तक आप पर रोशनी डालता रहूंगा और मुझे लगता है कि आप इस बात से सहमत होंगे कि इस बात की कोई संभावना नहीं है कि आप सही संख्या का पता लगाने में गलती करेंगे? आप ब्रेक ले सकते हैं और बेसबॉल खेल सकते हैं, आप 6 महीने के लिए वेगास में क्रेप्स खेलने भी जा सकते हैं, जब तक कि वर्ष के दौरान किसी बिंदु पर सड़क पर नज़र डालने के लिए यह देखने के लिए कि क्या प्रकाश आप पर था, एक गिनती याद नहीं होगी। ठीक यही हम माइक्रोकंट्रोलर्स के लिए कर रहे हैं! सीपीयू के लिए एक मिलीसेकंड एक साल के बराबर होता है। तो अगर मैं 12 मिलीसेकंड के लिए सिग्नल चालू करता हूं तो लगभग कोई मौका नहीं है कि अन्य माइक्रोकंट्रोलर इसे 10 या 11 के लिए भ्रमित कर देगा, इससे कोई फर्क नहीं पड़ता कि इस बीच क्या बाधा आती है और क्या नहीं होता है। माइक्रोकंट्रोलर्स के लिए, एक मिलीसेकंड एक अनंत काल है। तो यहाँ हम क्या करेंगे। पहले हम अपने संचार पोर्ट होने के लिए नियंत्रक पर दो पोर्ट चुनेंगे। मैं डेटा प्राप्त करने के लिए PD6 का उपयोग करूंगा (यदि हम चाहें तो इसे Rx कह सकते हैं) और मैं डेटा संचारित करने के लिए PD7 चुनूंगा (यदि हम चाहें तो इसे Tx कह सकते हैं)। विश्लेषक चिप समय-समय पर अपने आरएक्स पिन की जांच करेगा और यदि यह एक संकेत देखता है तो यह "संचार सबरूटीन" पर गिर जाएगा और फिर पासा रोलर को एक वापसी संकेत प्रेषित करेगा कि यह प्राप्त करने के लिए तैयार है। वे दोनों समय शुरू करेंगे और पासा रोलर एक मिलीसेकंड प्रति संख्या के लिए पासा पर एक संकेत (यानी 5V) प्रसारित करेगा। इसलिए यदि रोल दोहरे छक्कों या 12 का था, तो पासा रोलर 12 मिलीसेकंड के लिए इसे PD7 से 5V पर सेट करेगा और फिर इसे वापस 0V पर सेट करेगा। विश्लेषक अपने PD6 पिन को हर मिलीसेकंड में जांचता है, हर बार गिनती करता है, और जब यह 0V पर वापस जाता है तो यह परिणामी संख्या को विश्लेषक डिस्प्ले में आउटपुट करता है, एलईडी पर बाइनरी में बारह दिखाता है। तो यही योजना है। देखते हैं कि क्या हम इसे लागू कर पाते हैं।

चरण 2: संचार सबरूटीन्स

पहली चीज जो हमें करने की ज़रूरत है वह है दो नियंत्रकों को जोड़ना। तो एक पर PD6 से एक तार लें और इसे दूसरे पर PD7 से कनेक्ट करें, और इसके विपरीत। फिर दोनों पर PD7 को OUTPUT और दोनों पर PD6 को INPUT पर सेट करके इनिशियलाइज़ करें। अंत में उन सभी को 0V पर सेट करें। विशेष रूप से, प्रत्येक माइक्रोकंट्रोलर पर कोड के इनिट, या रीसेट अनुभाग में निम्नलिखित जोड़ें:

एसबीआई डीडीआरडी, 7; PD7 आउटपुट पर सेट है

सीबीआई पोर्टडी, 7; PD7 शुरू में 0V cbi DDRD, 6; PD6 इनपुट cbi PortD, 6 पर सेट है; PD6 शुरू में 0V clr कुल; प्रारंभ में पासा पर कुल 0

अब डाइस-रोलर चिप पर संचार सबरूटीन सेट करते हैं। पहले "कुल" नामक शीर्ष पर एक नया चर परिभाषित करें जो पासा की जोड़ी पर लुढ़का हुआ कुल संख्या संग्रहीत करेगा और इसे शून्य पर प्रारंभ करेगा।

फिर विश्लेषक के साथ संवाद करने के लिए एक सबरूटीन लिखें:

संवाद:

सीबीआई पोर्टडी, 7 एसबीआई पोर्टडी, 7; तैयार सिग्नल प्रतीक्षा भेजें: एसबीआई पिनडी, 6; पिनडी पढ़ें और छोड़ें यदि 0V rjmp प्रतीक्षा विलंब 8; सिंक्रनाइज़ करने में देरी (इसे प्रयोगात्मक रूप से पाया गया) भेजें: कुल देरी 2 दिसंबर; प्रत्येक डाई काउंट के लिए विलंब cpi कुल, 0; 0 यहाँ का अर्थ है "कुल" संख्या विलंब भेजा गया है breq PC+2 rjmp cbi PortD, 7 भेजें; PD7 से 0V क्लियर कुल; पासा को कुल 0 रेट पर रीसेट करें

विश्लेषक में हम मुख्य रूटीन से संचार सबरूटीन में एक rcall जोड़ते हैं:

सीएलआर विश्लेषक; नए नंबर की तैयारी करें

एसबीआई पिनडी, 6; 5V सिग्नल rcall संचार के लिए PD6 की जाँच करें; अगर 5V मूव एनालाइजर को संप्रेषित करने के लिए जाता है, तो कुल; विश्लेषक के लिए आउटपुट rcall विश्लेषक प्रदर्शित करता है

और फिर संचार सबरूटीन को इस प्रकार लिखें:

संवाद:

कुल कुल; कुल को 0 विलंब 10 पर रीसेट करें; बाउंस से छुटकारा पाने में देरी एसबीआई पोर्टडी, 7; तैयार प्राप्त सिग्नल के लिए PB7 से 5V सेट करें: देरी 2; कुल मिलाकर अगले नंबर की प्रतीक्षा करें; वेतन वृद्धि कुल एसबीआई पिनडी, 6; यदि PD6 0V पर वापस जाता है तो हम rjmp प्राप्त कर चुके हैं; अन्यथा अधिक डेटा के लिए लूप बैक अप cbi PortD, 7; PD7 रीसेट करें जब ret

तुम वहाँ जाओ! अब प्रत्येक माइक्रोकंट्रोलर को पासा रोल के परिणाम को संप्रेषित करने के लिए स्थापित किया गया है और फिर इसे विश्लेषक पर प्रदर्शित किया गया है।

हम बाद में संचार करने का एक और अधिक कुशल तरीका लागू करेंगे जब हमें केवल एक पासा रोल के बजाय नियंत्रकों के बीच एक रजिस्टर की सामग्री को स्थानांतरित करने की आवश्यकता होगी। उस स्थिति में, हम अभी भी उन्हें जोड़ने वाले केवल दो तारों का उपयोग करेंगे लेकिन हम "ट्रांसमिशन शुरू करें" के अर्थ के लिए 1, 1 का उपयोग करेंगे; 0, 1 का अर्थ "1" है; 1, 0 का अर्थ "0" है; और अंत में 0, 0 का अर्थ "अंत संचरण" है।

अभ्यास 1: देखें कि क्या आप बेहतर विधि को लागू कर सकते हैं और इसका उपयोग पासा रोल को 8-बिट बाइनरी नंबर के रूप में स्थानांतरित करने के लिए कर सकते हैं।

मैं एक वीडियो संलग्न करूंगा जो मेरा संचालन में दिखाता है।

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

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

मैंने आपके संदर्भ के लिए पूरा कोड संलग्न किया है। यह उतना साफ-सुथरा नहीं है जितना मैं चाहूंगा, लेकिन जैसे ही हम इसे भविष्य के ट्यूटोरियल में विस्तारित करेंगे, मैं इसे साफ कर दूंगा।

अब से मैं कोड वाली फाइलों को केवल यहां टाइप करने के बजाय संलग्न करूंगा। हम केवल उन अनुभागों को टाइप करेंगे जिन पर चर्चा करने में हमारी रुचि है।

यह एक छोटा ट्यूटोरियल था जहां हम अपने विश्लेषक माइक्रोकंट्रोलर को यह बताने की एक सरल विधि के साथ आए थे कि हमारे पासा-रोलर माइक्रोकंट्रोलर से हमारे पासा रोल का परिणाम केवल दो बंदरगाहों का उपयोग करते समय क्या होता है।

अभ्यास 2: यह दिखाने के लिए तैयार सिग्नल का उपयोग करने के बजाय कि पासा रोलर संचारित करने के लिए तैयार है और दूसरा जब विश्लेषक प्राप्त करने के लिए तैयार है, "पिन चेंज इंटरप्ट" नामक "बाहरी इंटरप्ट" का उपयोग करें। atmega328p पर पिन का उपयोग इस तरह से किया जा सकता है, यही कारण है कि उनके पास पिनआउट आरेख में उनके बगल में PCINT0 के माध्यम से PCINT23 है। आप इसे एक इंटरप्ट के रूप में उसी तरह लागू कर सकते हैं जैसे हमने टाइमर ओवरफ्लो इंटरप्ट के साथ किया था। इस मामले में इंटरप्ट "हैंडलर" सबरूटीन होगा जो पासा रोलर के साथ संचार करता है। इस तरह आपको मुख्य से संचार सबरूटीन को वास्तव में कॉल करने की आवश्यकता नहीं है: यह किसी भी समय वहां जाएगा जब उस पिन पर राज्य के परिवर्तन से कोई बाधा आ रही है।

व्यायाम 3: एक माइक्रोकंट्रोलर के बीच डेटा को दूसरे के संग्रह में संचार और स्थानांतरित करने का एक बेहतर तरीका माइक्रोकंट्रोलर पर ही 2-वायर सीरियल इंटरफ़ेस का उपयोग करना है। डेटाशीट की धारा 22 को पढ़ने का प्रयास करें और देखें कि क्या आप इसे लागू करने का तरीका समझ सकते हैं।

जब हम और नियंत्रक जोड़ते हैं तो हम भविष्य में इन अधिक परिष्कृत तकनीकों का उपयोग करेंगे।

तथ्य यह है कि हमने अपने विश्लेषक के साथ कुल पासा रोल लिया और फिर एल ई डी का उपयोग करके इसे बाइनरी में प्रिंट किया, यह महत्वपूर्ण नहीं है। तथ्य यह है कि अब हमारे विश्लेषक "जानते हैं" कि पासा रोल क्या है और उसी के अनुसार इसका उपयोग कर सकता है।

अगले ट्यूटोरियल में हम अपने "विश्लेषक" के उद्देश्य को बदल देंगे, कुछ और सर्किट तत्वों को पेश करेंगे, और अधिक दिलचस्प तरीके से पासा रोल का उपयोग करेंगे।

अगली बार तक…

सिफारिश की: