विषयसूची:

भाग 3: GPIO: ARM असेंबली: लाइन फॉलोअर: TI-RSLK: 6 चरण
भाग 3: GPIO: ARM असेंबली: लाइन फॉलोअर: TI-RSLK: 6 चरण

वीडियो: भाग 3: GPIO: ARM असेंबली: लाइन फॉलोअर: TI-RSLK: 6 चरण

वीडियो: भाग 3: GPIO: ARM असेंबली: लाइन फॉलोअर: TI-RSLK: 6 चरण
वीडियो: Part 10 ARM Assembly MSP432 TI RSLK Lab 6 GPIO Using Pololu QTR 8RC Reflectance Sensor Array 2024, नवंबर
Anonim
Image
Image
हार्डवेयर
हार्डवेयर

नमस्ते। यह अगली किस्त है जहां हम एआरएम असेंबली (उच्च-स्तरीय भाषा के बजाय) का उपयोग करना जारी रखते हैं। इस इंस्ट्रक्शनल की प्रेरणा टेक्सास इंस्ट्रूमेंट्स रोबोटिक्स सिस्टम लर्निंग किट या TI-RSLK की लैब 6 है।

हम किट से माइक्रोकंट्रोलर का उपयोग करेंगे, MSP432 लॉन्चपैड डेवलपमेंट बोर्ड, लेकिन शायद आपको इस निर्देश से निकालने के लिए कुछ उपयोगी मिलेगा, भले ही आप लॉन्चपैड का उपयोग नहीं कर रहे हों, या टी.आई. पाठ्यक्रम।

हमने एआरएम असेंबली, विकास पर्यावरण, और एक परियोजना कैसे बनाना है, एक निर्देशयोग्य परिचय के साथ शुरू किया।

एआरएम असेंबली पर अगले इंस्ट्रक्शनल ने इनपुट / आउटपुट (GPIO) के साथ इंटरैक्ट करने का तरीका पेश किया।

फिर हमने अपने ज्ञान का विस्तार किया, और एलईडी और स्विच को नियंत्रित करने वाले कार्यों की शुरुआत की।

अब इस निर्देश के साथ, हम कुछ और मज़ेदार, अधिक उपयोगी करने के लिए जो हमने सीखा है उसका उपयोग कर सकते हैं: एक पंक्ति का पता लगाएं।

यह बाद में हमारी मदद कर सकता है जब हम एक लाइन-फॉलोअर रोबोट का निर्माण करते हैं।

पाठ्यक्रम में, अधिकांश प्रोग्रामिंग सी या सी ++ में की जाती है, लेकिन इससे पहले कि हम उच्च-स्तरीय भाषाओं और पुस्तकालयों के आधार पर शुरू करें, असेंबली से परिचित होना सहायक होता है।

चरण 1: हार्डवेयर

हार्डवेयर
हार्डवेयर
हार्डवेयर
हार्डवेयर
हार्डवेयर
हार्डवेयर

मैं हार्डवेयर को विस्तार से नहीं दोहराना चाहता, क्योंकि पहले से ही स्रोत हैं, लेकिन जहां आवश्यक होगा हम स्पष्टीकरण जोड़ देंगे।

इस निर्देश के लिए, हम पोलोलू से परावर्तन सेंसर ऐरे का उपयोग करेंगे, क्योंकि यह TI-RSLK (रोबोट किट) के हिस्से के रूप में आता है। यह पाठ्यक्रम में और पाठ्यक्रम के लैब 6 में उपयोग किया जाने वाला एक है।

यदि आपके पास वह नहीं है, तो आप किसी भी IR डिटेक्टर (या उनमें से श्रृंखला) का उपयोग कर सकते हैं जो उपस्थिति और अनुपस्थिति के लिए एक डिजिटल सिग्नल, उच्च या निम्न आउटपुट करता है।

ऐरे सेंसर सबसे अच्छा है क्योंकि यह यह पता लगाने में मदद कर सकता है कि हम लाइन के केंद्र में सही हैं या एक तरफ। साथ ही, जैसा कि हम बाद में देखेंगे, यह रेखा के संबंध में रोबोट के कोण का पता लगाने में हमारी मदद कर सकता है।

परावर्तन सरणी में डिटेक्टर एक दूसरे के बहुत करीब होते हैं। इसका मतलब है कि हमें लाइन की मोटाई के आधार पर कई डिटेक्शन सिग्नल मिलने चाहिए।

यदि ऐसा है, तो यदि रोबोट लाइन के साथ सीधे इनलाइन नहीं है, तो उसे एक आउटपुट वापस करना चाहिए कि लाइन जितनी होनी चाहिए उससे अधिक चौड़ी है (क्योंकि हम एक कोण पर हैं)।

उपरोक्त की बेहतर व्याख्या के लिए, लैब 6 दस्तावेज़ पर एक नज़र डालें।

सेंसर को MSP432 लॉन्चपैड डेवलपमेंट बोर्ड से जोड़ने/वायरिंग करने में मदद के लिए, यहां कुछ उपयोगी निर्देश दिए गए हैं।

मैंने इस चरण में वही (समान?) पीडीएफ निर्देश भी जोड़े हैं।

यदि आप पोलोलू दस्तावेज़ों को ध्यान से पढ़ते हैं, तो वे "3.3V बाईपास" का कारण बताते हैं, कि यदि आप 5V के बजाय 3.3V का उपयोग कर रहे हैं, तो आप जम्पर करना चाहेंगे।

चूंकि हम अभी तक रोबोट का निर्माण नहीं कर रहे हैं, लेकिन इसके बजाय हम केवल एआरएम असेंबली के बारे में सीख रहे हैं और यह भी कि रोबोट के टुकड़ों (सबसिस्टम) के साथ कैसे बातचीत करें, हमें पत्र के लिए उपरोक्त निर्देशों का पालन करने की आवश्यकता नहीं है।

अभी के लिए, लाइन सेंसर ऐरे को जोड़ने से निम्नलिखित में उबाल आता है/घटता है:

  • MSP432 बोर्ड से 3.3V और GND को सेंसर एरे से कनेक्ट करें।
  • MSP432 से लाइन सेंसर एरे पर LED इनेबल पिन से एक पोर्ट पिन (मैं P5.3 का सुझाव देता हूं) कनेक्ट करें। सेंसर पर वह पिन 3.3V और GND के बीच है।
  • एक ही पोर्ट के सभी आठ पिन/बिट्स को कनेक्ट करें (मैं P7.0 से P7.7 का सुझाव देता हूं) "1" से "8" लेबल वाले सेंसर ऐरे के आठ पिनों से। ये वे रेखाएँ हैं जो उनकी समझ के आधार पर उच्च या निम्न होंगी।

जैसा कि आप इस चरण की छवियों में देख सकते हैं, और वीडियो में, मैंने सेंसर को रोबोट चेसिस से नहीं जोड़ा, क्योंकि मैं प्रोग्रामिंग, डिबगिंग, परीक्षण, सीखने में आसानी चाहता था।

तो सब कुछ जुड़ा हुआ है, हम सॉफ्टवेयर में आने के लिए तैयार हैं।

चरण 2: निम्नलिखित पंक्ति

लाइन फॉलोइंग
लाइन फॉलोइंग
लाइन फॉलोइंग
लाइन फॉलोइंग

परावर्तन सरणी सेंसर बहुत निफ्टी है क्योंकि यह कम से कम दो तरीकों से मदद कर सकता है।

  • निर्धारित करें कि रोबोट लाइन पर केंद्रित है या एक तरफ बह रहा है।
  • रोबोट लाइन की दिशा में संरेखित है, या यह एक कोण पर है।

सरणी के प्रत्येक डिटेक्टर अनिवार्य रूप से एक बिट जानकारी प्रदान करते हैं, या तो उच्च या निम्न।

विचार उन सभी बिट्स को एक ही संख्या या एकल बिट-पैटर्न में संयोजित करना है, और निर्णय लेने के लिए उस पैटर्न का उपयोग करना है (सही ढंग से स्थानांतरित करने के लिए)।

चरण 3: इससे पहले कि हम वास्तव में आरंभ कर सकें…।

.. हमें एआरएम असेंबली प्रोग्रामिंग के बारे में कुछ नया सीखने की जरूरत है। और मेरा मतलब सिर्फ एक और निर्देश नहीं है। वे नाबालिग होते हैं।

अब तक हमने अपने प्रोग्राम में "स्टैक" का उपयोग नहीं किया है।

हमने विभिन्न सबरूटीन्स में विश्व स्तर पर अधिकांश कोर सीपीयू रजिस्टरों का उपयोग करने पर भरोसा किया है।

एक काम जो हमने किया वह एक फ़ंक्शन के लिए LR (लिंक रजिस्टर) पते को सहेजना और पुनर्स्थापित करना था - वह जिसे कई अन्य फ़ंक्शन कहा जाता था। (मैं यहां "फ़ंक्शन" और "सबरूटीन" का परस्पर उपयोग करता हूं)।

हम जो कर रहे हैं वह अच्छा नहीं है। क्या होगा यदि हम अन्य कार्यों को घोंसला बनाना चाहते हैं? क्या होगा यदि हमारे पास घोंसले के एक से अधिक स्तर हैं?

पिछले उदाहरणों में, हमने LR या वापसी पते के लिए भंडारण के रूप में रजिस्टर R6 का उपयोग करना चुना। लेकिन अगर हम आगे/गहरी नेस्टिंग करना चाहते हैं, तो हम R6 के मान को बदलना जारी नहीं रख सकते। हमें एक और रजिस्टर चुनना होगा। और दुसरी। और फिर यह ट्रैक करना बोझिल हो जाता है कि कौन सा कोर सीपीयू रजिस्टर किस एलआर को किस फंक्शन में रिस्टोर करता है।

तो अब हम "स्टैक" पर एक नज़र डालते हैं।

चरण 4: ढेर

स्टैक की व्याख्या करने वाली कुछ पठन सामग्री यहां दी गई है।

मैं कुछ विचारों का बड़ा समर्थक हूं:

  • केवल उतनी ही थ्योरी जितनी आवश्यक हो, जल्दी से प्रैक्टिकल के लिए जाओ
  • आवश्यकतानुसार सीखें, वास्तव में कुछ करने पर ध्यान केंद्रित करें न कि केवल उद्देश्यहीन अभ्यास या उदाहरण।

बहुत सारे एआरएम और एमएसपी 432 दस्तावेज ऑनलाइन हैं जो ढेर के बारे में बात करते हैं, इसलिए वह सब दोबारा नहीं जा रहा है। मैं यहां स्टैक के उपयोग को न्यूनतम रखने जा रहा हूं - रिटर्न एड्रेस (लिंक रजिस्टर) को सहेजना।

अनिवार्य रूप से, हमें केवल निर्देशों की आवश्यकता है:

पुश {पंजीकरण सूची}

पीओपी {रजिस्टर सूची}

या, हमारे मामले में, विशेष रूप से:

पुश {एलआर}

पीओपी {एलआर}

तो, एक असेंबली फ़ंक्शन/सबरूटीन ऐसा दिखाई देगा:

funcलेबल:.asmfunc

PUSH{LR};यह संभवत: प्रवेश के पहले निर्देशों में से एक होना चाहिए।; यहां और कोड करें..; ब्ला ब्ला ब्ला…; ठीक है, हमने फ़ंक्शन के साथ काम किया है, कॉलिंग फ़ंक्शन पीओपी {एलआर} पर वापस लौटने के लिए तैयार है; यह सही वापसी पता वापस कॉल करने के लिए पुनर्स्थापित करता है; समारोह। बीएक्स एलआर; वापसी.endasmfunc

वीडियो कई नेस्टेड फ़ंक्शंस के लाइव उदाहरण के माध्यम से जाता है।

चरण 5: सॉफ्टवेयर

"MSP432_Chapter…" लेबल वाली संलग्न फ़ाइल में MSP432 के पोर्ट के बारे में बहुत अच्छी जानकारी है और उस दस्तावेज़ से हमें निम्नलिखित पोर्ट, रजिस्टर, पते आदि मिलते हैं। हालाँकि, यह थोड़ा दिनांकित है। हालाँकि, मुझे पोर्ट 5 और ऊपर के लिए सूचीबद्ध विस्तृत पते दिखाई नहीं दिए। (केवल "वैकल्पिक कार्य")। लेकिन यह अभी भी उपयोगी है।

हम दो पोर्ट का उपयोग करने जा रहे हैं। P5, P7, P1 और P2।

P5.3 (एक सिंगल बिट) आउटपुट सेंसर पर IR LED-सक्षम को नियंत्रित करने के लिए होगा। हम P5.3 का उपयोग कर रहे हैं क्योंकि यह उसी हेडर पर एक एक्सपोज़्ड पिन है जो अन्य MSP432 कनेक्शन सेंसर एरे में जा रहा है।

P7.0 से P7.7 तक आठ इनपुट होंगे जो सेंसर से डेटा एकत्र करते हैं; यह "क्या देखता है"।

P1.0 एकल लाल एलईडी है और हम इसका उपयोग हमें डेटा के कुछ संकेत देने के लिए कर सकते हैं।

पी२.०, पी२.१, पी२.२ आरजीबी एलईडी है और हम इसका उपयोग भी कर सकते हैं, इसकी विभिन्न रंग संभावनाओं के साथ, हमें सेंसर डेटा का संकेत देने के लिए।

यदि आप इस सब से संबंधित पिछले अनुदेशों को पढ़ चुके हैं, तो आप पहले से ही जानते हैं कि प्रोग्राम को कैसे सेट किया जाए।

बंदरगाहों और बिट्स इत्यादि के लिए बस घोषणा अनुभाग रखें।

आपके पास एक "मुख्य" अनुभाग होगा।

एक लूप होना चाहिए, जहां हम लगातार P7 से डेटा पढ़ते हैं, उस डेटा का निर्णय लेते हैं, और उसके अनुसार दो एलईडी को लाइट करते हैं।

यहाँ फिर से पोर्ट रजिस्टर पते हैं:

  • GPIO P1: 0x4000 4C00 + 0 (सम पते)
  • GPIO P2: 0x4000 4C00 + 1 (विषम पते)
  • GPIO P3: 0x4000 4C00 + 20 (सम पते)
  • GPIO P4: 0x4000 4C00 + 21 (विषम पते)
  • GPIO P5: 0x4000 4C00 + 40 (सम पते)
  • GPIO P6: 0x4000 4C00 + 41 (विषम पते)
  • GPIO P7: 0x4000 4C00 + 60 (सम पते)
  • GPIO P8: 0x4000 4C00 + 61 (विषम पते)
  • GPIO P9: 0x4000 4C00 + 80 (सम पते)
  • GPIO P10: 0x4000 4C00 + 81 (विषम पते)

बोल्ड में जो हम इस इंस्ट्रक्शनल के लिए उपयोग करेंगे।

आईआर डिटेक्टरों को पढ़ने के लिए कार्यक्रम कदम

सी में प्रोग्राम लिखने के लिए निम्नलिखित छद्म कोड है, लेकिन यह अभी भी उपयोगी है, और हम प्रोग्राम के असेंबली संस्करण में इसका बहुत बारीकी से पालन करेंगे।

main प्रोग्राम 0) इनिशियलाइज़ // पोर्ट्स जबकि (1) {१) P5.3 हाई सेट करें (IR LED चालू करें) २) P7.0 को एक आउटपुट बनाएं, और इसे हाई सेट करें (कैपेसिटर को चार्ज करना) ३) १० प्रतीक्षा करें, क्लॉक_Delay1us (10); 4) P7.0 को एक इनपुट बनाएं 5) इस लूप को 10, 000 बार चलाएं a) P7.0 पढ़ें (P7.0 पर वोल्टेज को बाइनरी में कनवर्ट करता है) b) आउटपुट बाइनरी से P1.0 (आपको वास्तविक समय में बाइनरी देखने की अनुमति देता है)) ६) P5.3 कम सेट करें (IR LED बंद करें, बिजली की बचत करें) ७) १० ms प्रतीक्षा करें, घड़ी_Delay1ms(१०); } // दोहराना (वापस जबकि ())

चरण 6: आइए कोड में सुधार करें

पोलोलू आईआर एलईडी सरणी का उद्देश्य या उपयोग एक रेखा का पता लगाना है, और यह जानना है कि क्या रोबोट (भविष्य) सीधे लाइन पर केंद्रित है, या एक तरफ बंद है। इसके अलावा, चूंकि लाइन की एक निश्चित मोटाई होती है, यदि सेंसर सरणी सीधे लाइन के लंबवत है, तो सेंसर की संख्या में बाकी की तुलना में एक अलग रीडिंग होगी, जबकि यदि IR LED सरणी किसी कोण पर (लंबवत नहीं) है, तो N+1 या N+2 IR LED/डिटेक्टर जोड़े को अब एक अलग रीडिंग देनी चाहिए।

इस प्रकार, कितने सेंसर लाइन की उपस्थिति को इंगित करते हैं, इस पर निर्भर करते हुए, हमें पता होना चाहिए कि क्या हम केंद्रित हैं, और यदि हम कोण हैं या नहीं।

इस अंतिम प्रयोग के लिए, आइए देखें कि क्या हम लाल एलईडी और आरजीबी एलईडी प्राप्त कर सकते हैं ताकि हमें इस बारे में अधिक जानकारी मिल सके कि सेंसर सरणी हमें क्या बता रही है।

वीडियो सभी विवरणों में जाता है। अंतिम कोड भी संलग्न है।

यह GPIO से संबंधित ARM असेंबली की श्रृंखला को पूरा करता है। हम बाद में और अधिक एआरएम असेंबली के साथ लौटने की उम्मीद करते हैं।

धन्यवाद।

सिफारिश की: