विषयसूची:

ATtiny84/85 SPI इंटरफ़ेस पिन पुन: उपयोग: 6 चरण
ATtiny84/85 SPI इंटरफ़ेस पिन पुन: उपयोग: 6 चरण

वीडियो: ATtiny84/85 SPI इंटरफ़ेस पिन पुन: उपयोग: 6 चरण

वीडियो: ATtiny84/85 SPI इंटरफ़ेस पिन पुन: उपयोग: 6 चरण
वीडियो: How to use the Pin Change Interrupt on ATtiny85 2024, जुलाई
Anonim
ATtiny84/85 SPI इंटरफ़ेस पिन पुन: उपयोग
ATtiny84/85 SPI इंटरफ़ेस पिन पुन: उपयोग

यह निर्देशयोग्य "ATtiny84/85 इन-सर्किट डिबगिंग विद सीरियल आउटपुट" का अनुसरण है और एप्लिकेशन प्रोग्राम द्वारा प्रोग्रामिंग डाउनलोड पिन के पुन: उपयोग के मुद्दे को संबोधित करने के लिए उस हार्डवेयर और सॉफ़्टवेयर कॉन्फ़िगरेशन का विस्तार करता है। कुल मिलाकर, इसके और भाग 1 के निर्देशयोग्य के बीच, निम्नलिखित विषयों पर चर्चा / प्रदर्शन किया जाता है:

विषय ATtiny84 ATtiny85
SoftwareSerial वर्ग का उपयोग करके सीरियल संचार एक्स एक्स
एप्लिकेशन और डाउनलोड के बीच डिवाइस पिन साझा करना एक्स एक्स
पिन चेंज इंटरप्ट एक्स
बाहरी रुकावट एक्स
POWER_DOWN मोड में सोएं; रुकावट पर जागो एक्स
SoftwareSerial से संबंधित "गुणा परिभाषित" इंटरप्ट वेक्टर लिंक त्रुटि के लिए कार्य-आसपास एक्स
इन-सर्किट संशोधित, डाउनलोड, डिबग, … ATtiny उपकरणों के लिए विकास चक्र एक्स एक्स

SPI प्रोग्रामिंग इंटरफ़ेस को समर्पित किसी एक पिन में हार्डवेयर I/O घटक जोड़ना कभी-कभी ठीक होता है, कभी-कभी नहीं। उदाहरण के लिए, MISO में LED जोड़ने से डाउनलोड के दौरान LED टिमटिमाती है और फिर यह एप्लिकेशन के लिए उपलब्ध हो जाती है। हालाँकि, MISO में एक पीजो बजर जोड़ने से एक भयानक कर्कश ध्वनि होगी जिसके बाद डाउनलोड विफल हो जाएगा।

यह निर्देशयोग्य बताता है कि डाउनलोड के दौरान उनकी सुरक्षा करके SPI इंटरफ़ेस MISO, MOSI और SCK सिग्नल को सौंपे गए पिन के उपयोग को "पुनर्प्राप्त" करने के लिए 4x2: 1 मल्टीप्लेक्सर का उपयोग कैसे करें। रीसेट पिन के पुन: उपयोग के लिए फ़्यूज़ परिवर्तन की आवश्यकता होती है और यह इस दृष्टिकोण द्वारा कवर नहीं किया जाता है। डाउनलोड जारी है या नहीं, इस पर निर्भर करते हुए एप्लिकेशन और प्रोग्रामिंग इनपुट के बीच स्विच करने के लिए मल्टीप्लेक्सर का उपयोग करके पिन का दोहरा असाइनमेंट पूरा किया जाता है। कोड और स्कीमैटिक्स ATtiny84 और ATtiny85 दोनों के लिए शामिल हैं। ATiny84 कॉन्फ़िगरेशन को पहले संबोधित किया गया है क्योंकि इसमें दो I/O पोर्ट हैं और कुछ अतिरिक्त समस्याओं/समाधानों को चित्रित करने के लिए इसका उपयोग किया जा सकता है। Little84 चर्चा के बाद, ATtiny85 के लिए समान परिदृश्यों पर चर्चा की जाती है।

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

छवि
छवि

अधिकांश आवश्यक हार्डवेयर को भाग 1 के निर्देशयोग्य में सूचीबद्ध किया गया था, इसलिए केवल नया हार्डवेयर नीचे सूचीबद्ध है।

नाम संभावित स्रोत कैसे इस्तेमाल किया
4x2:1 बहुसंकेतक मूसर चार 2-इनपुट; 1-आउटपुट स्विच शामिल हैं जो कि तंत्र हैं जिसके द्वारा SPI इंटरफ़ेस सिग्नल और एप्लिकेशन I/O साझा किए जाते हैं।
एसपीएसटी स्विच कोई भी स्विच प्रकार (क्षणिक या लैच्ड) काम करेगा। स्विच का उपयोग एप्लिकेशन इनपुट के लिए पिन शेयरिंग को दर्शाने के लिए किया जाता है।
10K रोकनेवाला फ्लोटिंग इनपुट से बचने के लिए SPST स्विच के लिए पुल-डाउन रेसिस्टर
छवि
छवि
छवि
छवि

मल्टीप्लेक्सर पिन डाउनलोड के उपयोग को एप्लिकेशन उपयोग से अलग करने की कुंजी है। 4x2: 1 मल्टीप्लेक्सर की समग्र कार्यक्षमता 2 नियंत्रण संकेतों और 4 समान रूप से कार्य करने वाले स्विच से युक्त काफी सीधी-आगे है। प्रत्येक बहुसंकेतक पिन के व्यवहार पर नीचे चर्चा की गई है:

पिन नाम समारोह
15 जी जैसा कि सत्य तालिका में दर्शाया गया है, मल्टीप्लेक्सर केवल तभी कार्य करता है जब G सक्षम पिन कम हो। चूंकि हम कभी भी मल्टीप्लेक्सर को पूरी तरह से अक्षम नहीं करना चाहते हैं, इसलिए पिन 15 को सीधे जमीन से जोड़ा जाएगा।
2-4; 5-7; 9-11;12-14 ए (इनपुट), बी (इनपुट), वाई (आउटपुट) चार 2-इनपुट हैं; क्रम A (इनपुट), B (इनपुट), Y (आउटपुट) जैसे क्रम में क्रमांकित 3 पिनों के प्रत्येक समूह के साथ 1-आउटपुट स्विच। स्विच 1 के लिए; पिन 2 = 1 ए; पिन 3 = 1 बी; पिन 4 = 1 वाई।
1 चुनते हैं जब चयन कम होता है, स्विच इनपुट ए संबंधित स्विच आउटपुट पिन से जुड़ा होता है, वाई। जब चयन अधिक होता है, तो स्विच इनपुट बी आउटपुट से जुड़ा होता है। स्विच को सिलेक्ट सिग्नल द्वारा एक साथ नियंत्रित किया जाता है और समान रूप से कार्य करता है।
8 जीएनडी मल्टीप्लेक्सर आईसी ग्राउंड
16 वीसीसी मल्टीप्लेक्सर आईसी पावर

चरण 2: परीक्षण मामलों का अवलोकन

छवि
छवि
छवि
छवि

पिन के पुन: उपयोग के लिए दो परिदृश्य इस पर आधारित हैं कि पिन एक एप्लिकेशन इनपुट है या आउटपुट। किसी भी इनपुट को संभालने की प्रक्रिया हमेशा समान होती है; हार्डवेयर घटक की परवाह किए बिना एप्लिकेशन आउटपुट की प्रक्रिया भी समान है। फिर भी, यदि विशिष्ट उदाहरण दिए गए हैं, तो स्पष्टीकरण आसान है, और उम्मीद से अधिक स्पष्ट है। दो मामलों के लिए न्यूनतम लेआउट ऊपर दिखाए गए हैं। विस्तृत सेटअप के लिए बाद में कनेक्शन एक गिलहरी के घोंसले का एक सा बन जाता है, इसलिए इन क्लीनर आरेखों को वापस संदर्भित करना उपयोगी हो सकता है।

मल्टीप्लेक्स सिलेक्ट सिग्नल के लिए RESET सही विकल्प है क्योंकि यह डाउनलोड के दौरान कम होता है लेकिन डाउनलोड पूरा होने पर वापस हाई हो जाता है। ध्यान दें कि किसी भी मल्टीप्लेक्सर स्विच का उपयोग किसी भी मामले के लिए किया जा सकता है क्योंकि सभी स्विच समान रूप से व्यवहार करते हैं। साथ ही, इनमें से कोई भी उदाहरण "यथार्थवादी" नहीं है; इसके बजाय उन्हें अलगाव तकनीकों को चित्रित करने के सबसे सरल तरीके के रूप में चुना गया था

  1. आउटपुट केस: ATtiny84 पिन 4 (SCK) से एलईडी आउटपुट को मल्टीप्लेक्सर स्विच 2. का उपयोग करके अलग किया जाता है

    • मल्टीप्लेक्सर पिन 2A को जमीन से कनेक्ट करें
    • मल्टीप्लेक्सर पिन 2B को ATtiny85 पिन से कनेक्ट करें 4
    • आउटपुट 2Y को LED एनोड से कनेक्ट करें

      • अपेक्षित परिणाम:

        • 2A, ग्राउंड से कनेक्ट होने के बाद से डाउनलोड के दौरान LED बंद है
        • एलईडी 2B के माध्यम से डाउनलोड करने के बाद एप्लिकेशन आउटपुट पिन 4 से जुड़ी और ब्लिंक करना शुरू कर देती है
  2. इनपुट केस: SPST स्विच इनपुट को ATtiny84 पिन 6 (MOSI) में मल्टीप्लेक्सर स्विच 3 का उपयोग करके अलग किया जाता है

    • AVR प्रोग्रामर हेडर से MOSI लीड वायर को 3A. पर ले जाया जाता है
    • स्विच इनपुट 3B SPST आउटपुट से जुड़ा है
    • आउटपुट 3Y ATtiny84 पिन 6. से जुड़ा है

      • 3A, MOSI, डाउनलोड के दौरान पिन 6 से जुड़ा है
      • 3B, SPST आउटपुट, डाउनलोड के बाद पिन 6 से जुड़ा है

केस 1 सफल होता है यदि प्रोग्राम डाउनलोड के दौरान एलईडी झिलमिलाहट नहीं करता है और फिर प्रोग्राम नियंत्रण के तहत अपेक्षित डाउनलोड के बाद हर दो सेकंड में ब्लिंक करता है। अलगाव के बिना एलईडी डाउनलोड के दौरान झिलमिलाहट करेगा क्योंकि यह सीधे एससीके सिग्नल से जुड़ा है, जो राज्य को घड़ी डेटा प्राप्त/ट्रांसमिट में बदलता है।

केस 2 सफल होता है यदि डाउनलोड के दौरान ATtiny84 पर MOSI सिग्नल अग्रेषित किया जाता है, अर्थात डाउनलोड विफल नहीं होता है, और LED डाउनलोड के बाद SPST स्विच को चालू/बंद करने पर प्रतिक्रिया करता है। केस 2 एक असंभावित डाउनलोड विफलता को रोकता है। अलगाव के बिना, SPST स्विच विफल हो जाएगा यदि 1) एक लैच्ड स्विच का उपयोग किया जाता है और 2) डाउनलोड के दौरान स्विच को चालू स्थिति में छोड़ दिया जाता है। जब मल्टीप्लेक्सर द्वारा अलग किया जाता है, तो स्विच किसी भी परिस्थिति में डाउनलोड विफलता का कारण नहीं बन सकता है। थोड़ा खिंचाव लेकिन हम बूढ़े लोगों के लिए सुकून देने वाला।

मल्टीप्लेक्सर का उपयोग करने का एक परिणाम यह है कि हार्डवेयर घटक को अब सीधे माइक्रोकंट्रोलर I/O पिन से नहीं जोड़ा जा सकता है। यह कुछ हद तक असुविधाजनक है, लेकिन अन्य एप्लिकेशन हार्डवेयर के साथ परीक्षण के दौरान घटक को ब्रेडबोर्ड पर रहने की अनुमति देता है, और परीक्षण पूरा होने पर वापस अपने सही स्थान पर ले जाया जा सकता है।

चरण 3: ATtiny84 केस 1 - एप्लिकेशन आउटपुट को अलग करें

छवि
छवि

यह चरण एप्लिकेशन आउटपुट पिन को डाउनलोड सिग्नल के साथ साझा करने के लिए सेटअप का वर्णन करता है। इस्तेमाल किया गया उदाहरण पिन 4 (एससीके) से जुड़ी एलईडी है। उदाहरण के रूप में मौजूदा एलईडी का उपयोग करना मल्टीप्लेक्सर को भाग 1 हार्डवेयर और सॉफ्टवेयर वातावरण में जोड़ने पर जोर देता है।

  • हार्डवेयर

    • मल्टीप्लेक्सर को ऊपर दिए गए फ़्रीज़िंग आरेख में दिखाए गए सापेक्ष स्थान में ब्रेडबोर्ड में जोड़ें। केस 2 में आवश्यक एसपीएसटी स्विच के लिए जगह की अनुमति देने के लिए मल्टीप्लेक्सर को केंद्र की ओर रखा गया है।
    • ATtiny84 पिन 11 से मल्टीप्लेक्सर पिन 1 में लीड वायर (पीला सुझाएं) जोड़कर मल्टीप्लेक्सर को RESET सिग्नल बढ़ाएं।
    • शेष हार्डवेयर सेटअप चरण 2 में दिया गया है

      • मल्टीप्लेक्सर पिन 2A को सीधे जमीन से कनेक्ट करें
      • पिन 2B को ATtiny84 पिन 4. से कनेक्ट करें
      • आउटपुट 2Y को LED एनोड से कनेक्ट करें

        • अपेक्षित परिणाम:

          • डाउनलोड के दौरान 2Y जमीन से जुड़ा होता है (2A) इसलिए एलईडी बंद रहती है
          • डाउनलोड करने के बाद 2Y ATtiny84 पिन 4 से जुड़ा है - एप्लिकेशन एलईडी नियंत्रण
  • सॉफ्टवेयर

    • भाग 1 कोड का पुन: उपयोग किया जाता है; यहाँ डुप्लिकेट के बजाय भाग 1 के निर्देशयोग्य से उपलब्ध है
    • Arduino IDE में भाग 1 प्रोग्राम को लोड और संकलित करें
    • छोटे एवीआर प्रोग्रामर को पीसी यूएसबी पोर्ट में प्लग इन करें
    • Adafruit USB से सीरियल केबल को दूसरे USB पोर्ट में प्लग करें

      • एक COM पोर्ट बनाया जाता है और स्वचालित रूप से IDE पोर्ट सूची में उपलब्ध कराया जाता है
      • COM विंडो लॉन्च करें
    • संकलित कोड को ATtiny84. पर डाउनलोड करें

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

छवि
छवि

चरण 4: ATtiny84 केस 2 - एप्लिकेशन इनपुट को अलग करें

छवि
छवि

यह चरण पिछले आउटपुट आइसोलेशन केस के लिए सेटअप पर बनाता है। हार्डवेयर परिवर्तनों में मल्टीप्लेक्सर के माध्यम से ATtiny84 पिन 6 (MOSI) में SPST स्विच संलग्न करना शामिल है। तो हार्डवेयर परिवर्तन न्यूनतम हैं लेकिन एसपीएसटी स्विच को पिन चेंज इंटरप्ट का उपयोग करके एलईडी को नियंत्रित करने की अनुमति देने के लिए कई सॉफ़्टवेयर परिवर्तन हैं। अद्यतन कोड इस खंड के निचले भाग में शामिल है। कोड को Arduino IDE में कॉपी किया जाना चाहिए; इसे Multiplexer_Input नाम से सेव करने का सुझाव दें। (मैं इस खंड की लंबाई के लिए क्षमा चाहता हूं, लेकिन यह शिक्षाप्रद उद्देश्य का दिल है और लगता है कि यह कृत्रिम विराम डालने के बजाय एक मोनोलिथ के रूप में बेहतर पढ़ता है।)

अद्यतन स्थान प्रयोजन
"हैक किया गया" SoftwareSerial वर्ग शामिल करें अनुभाग शामिल करें एलईडी को अब एसपीएसटी स्विच द्वारा पिन चेंज इंटरप्ट के माध्यम से नियंत्रित किया जाता है। SoftwareSerial वर्ग को संशोधित किया जाना चाहिए क्योंकि अन्यथा यह सभी पिन परिवर्तन इंटरप्ट वैक्टर आवंटित करता है। यह SPST स्विच को असाइन किए गए (पोर्ट 0) वेक्टर के लिए "एकाधिक परिभाषा" लिंक त्रुटि का कारण बनता है। हैक किए गए SoftwareSerial संस्करण को प्रोग्राम की निर्देशिका में ही रखा जाना चाहिए ताकि यह केवल इस एप्लिकेशन को प्रभावित करे।
SPST इनपुट पिन परिभाषा शामिल/परिभाषा अनुभाग डिवाइस पिन को SPST इनपुट का असाइनमेंट। पिन डिवाइस विशिष्ट है इसलिए इसे #ifdef ATtiny8x सेक्शन में जोड़ा जाता है।
SPST इनपुट पिन मोड सेटअप समारोह SPST पिन को INPUT के रूप में कॉन्फ़िगर किया गया है
SPST पिन इंटरप्ट कॉन्फ़िगर करें सेटअप समारोह इंटरप्ट वेक्टर को एसपीएसटी इनपुट पिन को सौंपा गया है ताकि एक स्विच स्थिति परिवर्तन में बाधा उत्पन्न हो। कॉन्फ़िगरेशन रजिस्टर और इंटरप्ट प्रकार डिवाइस विशिष्ट हैं। कोड को यथासंभव सरल बनाने के लिए, अंतरों को #if परिभाषित अनुभाग में नियंत्रित किया जाता है
सेटअप पूर्ण सीरियल संदेश सेटअप समारोह मल्टीप्लेक्सर इनपुट एप्लिकेशन को प्रतिबिंबित करने के लिए सेटअप पूर्ण सीरियल आउटपुट संदेश बदल दिया गया है
SPST स्विच ISR फ़ंक्शन जोड़ें कोड अनुभाग SPST पिन चेंज इंटरप्ट के लिए ISR जोड़ा गया है। कोड सामान्य है लेकिन उपयोग किया जाने वाला वेक्टर डिवाइस विशिष्ट है और प्रोग्राम के शीर्ष पर डिवाइस निर्भर अनुभागों में परिभाषित किया गया है। यह सत्यापित करने के लिए कि ISR सक्रिय है, LED स्थिति बदल दी गई है। हालांकि वास्तविक एप्लिकेशन में नो-नो, नई एलईडी स्थिति को दर्शाते हुए एक सीरियल आउटपुट संदेश उत्पन्न होता है।
लूप प्रोसेसिंग को संशोधित करें लूप फ़ंक्शन ISR अब LED को चालू और बंद करने को नियंत्रित करता है ताकि लूप रूटीन से कार्यक्षमता हटा दी जाए। ATtiny84 के लिए "अतिरिक्त" के रूप में स्लीप रूटीन के लिए एक कॉल जोड़ा जाता है। इस एप्लिकेशन के लिए, ATtiny85 नींद काम नहीं करती है; हो सकता है कि सॉफ़्टवेयर सीरियल क्लास के हस्तक्षेप के कारण यह सॉफ़्टवेयर सीरियल के साथ काम करता है।
नींद की दिनचर्या जोड़ें कोड अनुभाग मल्टीप्लेक्सर के उपयोग को प्रदर्शित करने के लिए नींद की कार्यक्षमता आवश्यक नहीं है। बस इसलिए जोड़ा गया क्योंकि आम तौर पर प्रोग्राम लूप के माध्यम से चलाने के बजाय इनपुट होने तक कुछ भी नहीं करने के बजाय बिजली बचाने के लिए POWER_DOWN मोड में इनपुट की प्रतीक्षा करना चाहता है।

SoftwareSerial वर्ग कोड को संशोधित करें

SoftwareSerial वर्ग को बदलने की आवश्यकता है ताकि यह सभी पिन परिवर्तन इंटरप्ट पोर्ट को हॉग न करे। SoftwareSerial वर्ग कोड पर स्थित है

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src

कोड परिवर्तन के लिए प्रारंभ स्थान खोजने के लिए SoftwareSerial.cpp में PCINT0_vect पर एक खोज करें। मौजूदा #if डिफाइन्ड (PCINT0_vect) स्टेटमेंट से ठीक पहले निम्नलिखित कोड जोड़ें।

#if परिभाषित (_AVR_ATtiny84_)

#define MYPORT PCINT1_vect #elif defined(_AVR_ATtiny85_) #define MYPORT PCINT0_vect #endif ISR(MYPORT) { SoftwareSerial::handle_interrupt (); }

अब कोड के मौजूदा ब्लॉक पर टिप्पणी करें जो नीचे बताए अनुसार पोर्ट इंटरप्ट वैक्टर आवंटित करता है (बस स्टार्ट और एंड ब्लॉक कमेंट सिंबल /* और */ जोड़ें):

/*

#if परिभाषित (PCINT0_vect) ISR (PCINT0_vect) { SoftwareSerial::handle_interrupt (); } #endif #if परिभाषित(PCINT1_vect) ISR(PCINT1_vect) {//SoftwareSerial::handle_interrupt(); ISR (PCINT1_vect, ISR_ALIASOF (PCINT0_vect)); } #endif #if परिभाषित(PCINT2_vect) ISR(PCINT2_vect, ISR_ALIASOF(PCINT0_vect)); #endif #if परिभाषित(PCINT3_vect) ISR(PCINT3_vect, ISR_ALIASOF(PCINT0_vect)); #अगर अंत */

हार्डवेयर कॉन्फ़िगर करें

SPST स्विच ATtiny84 पिन 6 (MOSI) से जुड़ा हुआ है जैसा कि चरण 2 में बताया गया है। सुविधा के लिए प्रक्रिया को यहां दोहराया गया है।

  • स्विच इनपुट 3A को छोटे AVR प्रोग्रामर हेडर MOSI लीड से कनेक्ट करें
  • आउटपुट पिन पर SPST स्विच से 3B कनेक्ट करें
  • 3Y को ATtiny84 पिन 6. से कनेक्ट करें

    • परिणाम:

      • 3A, MOSI, डाउनलोड के दौरान ATtiny84 पिन 6 के माध्यम से गेट किया जाएगा
      • 3बी, एसपीएसटी आउटपुट, डाउनलोड करने के बाद 6 पिन करने के लिए गेट किया जाएगा

प्रोग्राम चलाएं

दौड़ने से पहले SPST स्विच को ऑफ पोजीशन में रख दें। अन्यथा स्विच बंद होने पर एलईडी चालू हो जाएगी और इसके विपरीत। Arduino IDE का उपयोग करके एप्लिकेशन इनपुट प्रोग्राम को लोड करने, संकलित करने और डाउनलोड करने के लिए चरण 3 की प्रक्रिया का पालन करें। पहले की तरह, डाउनलोड के दौरान एलईडी झिलमिलाहट नहीं होनी चाहिए, इसलिए एकमात्र संकेत है कि प्रोग्राम चालू है और चल रहा है, सेटअप रूटीन के अंत में सीरियल संदेश होगा: सेटअप पूर्ण - इनपुट उदाहरण

इस बिंदु पर प्रोग्राम SPST स्विच से इनपुट की प्रतीक्षा कर रहा है। स्विच को चालू स्थिति में रखने से एलईडी चालू हो जाएगी; वापस बंद स्थिति में बदलने से एलईडी बंद हो जाती है। आउटपुट संदेश सत्यापित करते हैं कि ISR लागू किया गया था (ISR: Led High, ISR: LOW LOW)। ध्यान दें कि सीरियल संदेशों का क्रम है गो टू स्लीप पहले एक स्विच स्थिति परिवर्तन पर प्रतीक्षा कर रहा है; जब एक स्विच इनपुट प्राप्त होता है तो ISR का आह्वान किया जाता है, LED को टॉगल करता है, और परिवर्तन का दस्तावेजीकरण करता है; तब स्लीप कॉल के बाद प्रोसेसिंग पिक होती है क्योंकि इंटरप्ट प्रोसेसर को जगाता है।

छवि
छवि

इस निर्देश के लिए कार्यक्रम:

//************************************************************************

// भाग 2: एप्लिकेशन / डाउनलोड डिवाइस पिन शेयरिंग //। SPI प्रोग्रामिंग इंटरफ़ेस // को असाइन किए गए पिनों के अनुप्रयोग पुन: उपयोग का समर्थन करने के लिए भाग 1 कोड को संशोधित करता है। ATtiny85 और ATtiny84 के लिए "कॉमन" कोड //**************************************** ******************************** #include "SoftwareSerial.h" // संशोधित Arduino SoftwareSerial क्लास #include // जबकि प्रसंस्करण कोड सामान्य है, उपयोग किए गए पिन उपकरण विशिष्ट हैं #if परिभाषित (_AVR_ATtiny84_) || परिभाषित (_AVR_ATtiny84A_) #define ledPin 4 // कनेक्टेड एलईडी को चालू / बंद करने के लिए टॉगल किया गया #define rxPin 9 // सीरियल प्राप्त करने के लिए उपयोग किया जाने वाला पिन #define txPin 10 // सीरियल ट्रांसमिट के लिए उपयोग किया जाने वाला पिन # परिभाषित करें SpstPin 6 // SPST स्विच से इनपुट (MOSI) #define ISR_VECT PCINT0_vect // SPST स्विच पिन चेंज इंटरप्ट वेक्टर #elif परिभाषित (_AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // SPST स्विच से इनपुट (INT0) #define ISR_VECT INT0_vect // SPST स्विच पिन चेंज इंटरप्ट वेक्टर #else #error केवल ATiny84 और ATtiny85 इस प्रोजेक्ट द्वारा समर्थित हैं #endif // सॉफ्टवेयर सीरियल क्लास का उदाहरण बनाएं जो निर्दिष्ट करता है कि कौन सा डिवाइस // सॉफ्टवेयर प्राप्त करने और प्रसारित करने के लिए पिन का उपयोग किया जाना है mySerial (rxPin), टीएक्सपिन); //------------------------------------------------ ------------------------ // प्रसंस्करण संसाधनों को प्रारंभ करें //------------------- -------------------------------------------------- --- शून्य सेटअप () { mySerial.begin (९६००); // सीरियल प्रोसेसिंग देरी शुरू करें (2000); // स्टार्ट अप को पूरा करने के लिए सीरियल कॉम पोर्ट को समय दें। // अन्यथा, पहला आउटपुट गुम या विकृत पिनमोड (ledPin, OUTPUT); // OUTPUT पिनमोड (SpstPin, INPUT) के लिए एलईडी पिन कॉन्फ़िगर करें; // SPST स्विच पिन को इनपुट के रूप में कॉन्फ़िगर करें #if परिभाषित (_AVR_ATtiny84_) || (_AVR_ATtiny84A_) // पिन 6 (MOSI) GIMSK पर स्विच इनपुट को हैंडल करने के लिए पिन चेंज इंटरप्ट सेट करें |= (1<

चरण 5: ATtiny85 केस 1 - एप्लिकेशन आउटपुट को अलग करें

छवि
छवि

ATtiny85 के लिए एक डुप्लिकेट हार्डवेयर सेटअप बनाने के बजाय, चरण 4 से ATtiny84 के लिए तैयार कॉन्फ़िगरेशन के साथ शुरू करना और छोटे 84 चिप को छोटे 85 से बदलना शायद आसान है। सभी आवश्यक हार्डवेयर तब पहले से ही उपलब्ध हैं। यदि इस दृष्टिकोण का उपयोग कर रहे हैं, तो टिनी85 का पता लगाएं ताकि सीरियल केबल टीएक्स के साथ पिन 3 और 4 लाइन अप करें और तार प्राप्त करें। यह तब ATtiny85 के लिए अपने आवश्यक स्थानों से मेल खाने के लिए SPI इंटरफ़ेस लीड तारों को स्थानांतरित करने की बात है।

यदि खरोंच से शुरू कर रहे हैं, तो चरण 3 से सामान्य चरणों का पालन करें और ऊपर दिए गए फ्रिटिंग आरेख का पालन करें। कोड वही है जो चरण 3 में ATtiny84 के लिए उपयोग किए गए समान परिणामों के साथ अपेक्षित है - डाउनलोड के दौरान कोई झिलमिलाहट नहीं; 2 सेकंड के अंतराल पर एलईडी ब्लिंक करते समय और सीरियल आउटपुट संदेश एलईडी स्थिति का पालन करते हैं।

छवि
छवि

चरण 6: ATtiny85 केस 2 - एप्लिकेशन इनपुट को अलग करें

छवि
छवि

हार्डवेयर सेटअप के लिए, चरण 5 से कॉन्फ़िगरेशन के साथ प्रारंभ करें और ऊपर दिए गए फ्रिटिंग आरेख में बताए अनुसार SPST स्विच जोड़ें। मैंने वास्तव में छोटे 85 संस्करण के लिए एक क्षणिक स्विच का उपयोग किया है और यह सत्यापन को थोड़ा आसान बनाता है। ध्यान दें कि स्विच आउटपुट को ATtiny84 कॉन्फ़िगरेशन से 180 डिग्री घुमाया जाता है। यह परिवर्तन हुकअप तारों को रूट करना आसान बनाता है क्योंकि सभी 3 SPI सिग्नल ATtiny85 के लिए एक ही तरफ हैं।

ATtiny84 चरण 4 के लिए उसी प्रोग्राम का उपयोग करें। समान सामान्य परिणाम अपेक्षित हैं - जब SPST स्विच चालू/बंद होता है और सीरियल आउटपुट संदेश परिवर्तनों का दस्तावेजीकरण करते हैं तो LED बदल जाती है। GO TO SLEEP संदेश गायब हैं क्योंकि ATtiny85 के लिए स्लीप फंक्शनलिटी को लागू नहीं किया गया है। भले ही एक ही कार्यक्रम का उपयोग किया जाता है, इस तथ्य के कारण कार्यान्वयन में महत्वपूर्ण अंतर हैं कि ATtiny85 में केवल एक पोर्ट रजिस्टर (पोर्ट 0) है:

  1. SoftwareSerial अब सीरियल कम्युनिकेशन के लिए पोर्ट 0 पिन चेंज इंटरप्ट आवंटित करता है (याद रखें कि हम ATtiny84 के लिए पोर्ट 1 का उपयोग करने में सक्षम थे।)
  2. SPST स्विच इंटरप्ट को एक्सटर्नल इंटरप्ट 0 (INT0) के साथ लागू किया जाना चाहिए क्योंकि SoftwareSerial द्वारा एक और केवल पिन चेंज इंटरप्ट आवंटित किया जाता है। यह इस बात को स्पष्ट करता है कि पिन परिवर्तन इंटरप्ट और बाहरी इंटरप्ट तार्किक रूप से स्वतंत्र हैं और उसी पोर्ट रजिस्टर में उपयोग किए जा सकते हैं।
  3. संशोधित SoftwareSerial संस्करण का उपयोग करके कुछ भी हासिल नहीं किया गया है - केवल एक पोर्ट है और SoftwareSerial वर्ग इसे पकड़ लेगा। हालांकि, इस चरण के लक्ष्य से सीधे संबंधित नहीं होने वाले परिवर्तन से बचने के लिए संशोधित वर्ग का उपयोग अभी भी किया गया था।

सिफारिश की: