विषयसूची:

Attiny85 समवर्ती प्रोग्रामिंग या बहुरंगी आँखों वाला कद्दू: 7 कदम
Attiny85 समवर्ती प्रोग्रामिंग या बहुरंगी आँखों वाला कद्दू: 7 कदम

वीडियो: Attiny85 समवर्ती प्रोग्रामिंग या बहुरंगी आँखों वाला कद्दू: 7 कदम

वीडियो: Attiny85 समवर्ती प्रोग्रामिंग या बहुरंगी आँखों वाला कद्दू: 7 कदम
वीडियो: Lakshya 67th BPSC | Theory and MCQs | Lavkush Pandey | Unacademy BPSC 2024, दिसंबर
Anonim

लेखक द्वारा jumbleviewJumbleview.info का अनुसरण करें:

चीख
चीख
चीख
चीख
बाहरी बिजली आपूर्ति के साथ NiCd बैटरी का प्रतिस्थापन
बाहरी बिजली आपूर्ति के साथ NiCd बैटरी का प्रतिस्थापन
बाहरी बिजली आपूर्ति के साथ NiCd बैटरी का प्रतिस्थापन
बाहरी बिजली आपूर्ति के साथ NiCd बैटरी का प्रतिस्थापन
डिजिटल कैमरा हैंडल
डिजिटल कैमरा हैंडल
डिजिटल कैमरा हैंडल
डिजिटल कैमरा हैंडल

के बारे में: मैं बे एरिया (कैलिफोर्निया) कंपनियों में से एक में सॉफ्टवेयर इंजीनियर के रूप में काम करता हूं। जब भी मेरे पास समय होता है मैं माइक्रो नियंत्रकों को प्रोग्राम करना, यांत्रिक खिलौने बनाना और कुछ गृह सुधार परियोजनाएं बनाना पसंद करता हूं। जंबलव्यू के बारे में अधिक »

यह प्रोजेक्ट दिखाता है कि Attiny85 चिप के साथ दो 10 मिमी तीन-रंग के आम एनोड एलईडी (कद्दू हैलोवीन ग्लिटर की बहुरंगी आँखें) को कैसे नियंत्रित किया जाए। परियोजना का लक्ष्य पाठक को समवर्ती प्रोग्रामिंग की कला से परिचित कराना और एडम डंकल्स प्रोटोथ्रेड्स लाइब्रेरी के उपयोग में लाना है। यह प्रोजेक्ट मानता है कि पाठक एवीआर 8-बिट नियंत्रकों के बारे में जानता है, कुछ सी-प्रोग्राम लिख सकता है और एटमेल स्टूडियो के साथ कुछ अनुभव है।

प्रोजेक्ट कोड GitHub पर प्रकाशित:

आपूर्ति

प्रोग्रामिंग से पहले अभी भी सर्किट बनाने की जरूरत है। यहाँ घटक हैं:

  • Attiny85 नियंत्रक (कोई भी इलेक्ट्रॉनिक आपूर्तिकर्ता)।
  • आम एनोड के साथ दो तीन रंग 10 मिमी एलईडी। एडफ्रूट एलईडी
  • प्रतिरोध 100 ओम, 120 ओम, 150 ओम 0.125 या 0.250 वाट (कोई भी इलेक्ट्रॉनिक आपूर्तिकर्ता)।
  • AVR ISP इंटरफ़ेस के लिए सिक्स पिन हैडर। इस एडफ्रूट हेडर से बनाया जा सकता है
  • कुछ ब्रेड बोर्ड या प्रिंटेड टेम्प्लेट बोर्ड। मैंने इसका इस्तेमाल किया
  • AVR ISP MKII इंटरफ़ेस और Atmel Studio 6.1 (बाद के संस्करण को भी काम करना चाहिए)।

चरण 1: सर्किट

सर्किट
सर्किट

डिजाइन पांच चिप पिन का उपयोग करता है:

  • एनोड को नियंत्रित करने के लिए दो पिन का उपयोग किया जाता है: प्रत्येक एलईडी एनोड समर्पित पिन से जुड़ा होता है।
  • एलईडी कैथोड से जुड़े तीन पिन (प्रतिरोधों के माध्यम से) (एक ही पिन से जुड़े प्रत्येक का एक ही रंग कैथोड)

कोई पूछेगा: चिप के सभी छह इन/आउट पिन का उपयोग क्यों नहीं किया जाता है ताकि एलईडी एनोड सीधे +5 वी से जुड़े हों और प्रत्येक कैथोड का अपना समर्पित पिन होगा? इससे प्रोग्रामिंग सीधी हो जाएगी। काश, समस्या होती: पिन PB5 (RESET) एक कमजोर पिन है जो केवल ~ 2 mA करंट प्रदान करने में सक्षम है, जबकि ~ 20 mA की आवश्यकता होती है।

बेशक कोई इस कमजोर पिन के लिए ट्रांजिस्टर एम्पलीफायर का निर्माण कर सकता है, लेकिन जब भी संभव हो मैं स्वयं समस्या को हल करना पसंद करता हूं।

चरण 2: समय आरेख

समय आरेख
समय आरेख

टाइमिंग डायग्राम हमें यह समझने में मदद करता है कि हमें प्रोग्राम करने के लिए क्या चाहिए।

आरेख पर शीर्ष दो पंक्तियाँ एलईडी एनोड पर वोल्टेज परिवर्तन दिखाती हैं। एलईडी एनोड से जुड़े पिन पर वोल्टेज ~ 250 हर्ट्ज आवृत्ति के साथ दोलन करता है। लेफ्ट एलईडी के लिए यह वोल्टेज ऑसिलेशन राइट एलईडी के ऑसिलेशन के विपरीत है। जब एनोड पर वोल्टेज अधिक होता है तो संगत एलईडी चमकीली हो सकती है। जब यह कम होता है तो संगत एलईडी डार्क होती है। इसका मतलब है कि प्रत्येक एलईडी 2 मिलीसेकंड अंतराल के दौरान उज्ज्वल हो सकती है और अन्य 2 मिलीसेकंड के दौरान अंधेरा हो सकती है। चूंकि मानव आंख में कुछ जड़ता है, 250 हर्ट्ज ब्लिंकिंग पर्यवेक्षक द्वारा ध्यान देने योग्य नहीं है। आरेख पर नीचे की तीन पंक्तियां एल ई डी कैथोड से जुड़े पिनों पर वोल्टेज में परिवर्तन दिखाती हैं। आइए पहले आरेख स्तंभ को देखें। यह उस स्थिति को दिखाता है जब बाईं एलईडी लाल रंग में होती है और दाहिनी एलईडी हरे रंग में होती है। यहां लाल कैथोड कम रहता है जबकि बायां एनोड ऊंचा होता है, हरा कैथोड कम रहता है जबकि दायां एनोड ऊंचा होता है, और नीला कैथोड हर समय कम रहता है। आरेख के अन्य कॉलम विभिन्न रंगों के लिए कैथोड और एनोड वोल्टेज के संयोजन को दर्शाते हैं।

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

चरण 3: प्रोग्रामिंग। मैक्रोज़ और परिभाषाएँ

प्रोग्रामिंग। मैक्रोज़ और परिभाषाएँ
प्रोग्रामिंग। मैक्रोज़ और परिभाषाएँ

प्रोग्रामिंग चरणों में उदाहरण थोड़ा सरलीकृत संस्करण का प्रतिनिधित्व करते हैं। कार्यक्रम को छोटा कर दिया गया है, और कुछ प्रतीकात्मक परिभाषाओं को स्पष्ट स्थिरांक से बदल दिया गया है।

आइए शुरू से शुरू करते हैं। कार्यक्रम में एटमेल स्टूडियो के साथ आने वाली फाइलें और साथ ही प्रोटोथ्रेड लाइब्रेरी हेडर शामिल हैं। इसके बाद पिन स्तरों में हेरफेर करने के लिए दो मैक्रोज़ हैं और कुछ परिभाषाएँ पिन सिग्नल को तार्किक नाम देने के लिए हैं। अब तक कुछ खास नहीं।

चरण 4: प्रोग्रामिंग। मुख्य घेरा

प्रोग्रामिंग। मुख्य घेरा
प्रोग्रामिंग। मुख्य घेरा

फिर आइए अंत में देखें कि मुख्य प्रक्रिया में क्या शामिल है।

कुछ आरंभीकरण करने के बाद मुख्य कार्य हमेशा के लिए लूप में रहता है। उस लूप में यह अगले चरण बनाता है:

  • बाईं एलईडी के लिए प्रोटोथ्रेड रूटीन को आमंत्रित करता है। यह कुछ पिन वोल्टेज बदलता है।
  • दो मिलीसेकंड की देरी करें। पिन वोल्टेज में कोई बदलाव नहीं होता है।
  • सही एलईडी के लिए प्रोटोथ्रेड को आमंत्रित करता है। यह कुछ पिन वोल्टेज बदलता है।
  • 2 एमएस देरी करें। पिन वोल्टेज में कोई बदलाव नहीं होता है।

चरण 5: प्रोग्रामिंग। सहायक कार्य

प्रोग्रामिंग। सहायक कार्य
प्रोग्रामिंग। सहायक कार्य

इससे पहले कि हम प्रोटोथ्रेड्स पर चर्चा करना शुरू करें, हमें कुछ सहायक कार्यों को देखने की जरूरत है। पहले विशेष रंग सेट करने के लिए कार्य हैं। वे सीधे हैं। समर्थित रंगों की संख्या (सात) और एलईडी डार्क (NoColor) सेट करने के लिए एक और फ़ंक्शन जैसे कई फ़ंक्शन हैं।

और एक और फ़ंक्शन है जिसे सीधे प्रोटोथ्रेड रूटीन द्वारा लागू किया जाएगा। इसका नाम DoAndCountdown() है।

तकनीकी रूप से ऐसे फ़ंक्शन का उपयोग अनिवार्य नहीं है लेकिन मुझे यह सुविधाजनक लगा। इसके तीन तर्क हैं:

  • एलईडी रंग (जैसे RedColor या GreenColor या आदि) सेट करने के लिए सूचक
  • रिवर्स काउंटर का प्रारंभिक मूल्य: विशेष प्रोटोथ्रेड चरण में इस फ़ंक्शन को कितनी बार लागू किया जाना चाहिए।
  • काउंटर को उल्टा करने के लिए सूचक। यह माना जाता है कि जब रंग में परिवर्तन होता है तो रिवर्स काउंटर 0 होता है, इसलिए पहले पुनरावृत्ति कोड उस काउंटर को प्रारंभिक मान प्रदान करेगा। प्रत्येक पुनरावृत्ति काउंटर के बाद घटाया जाता है।

फंक्शन DoAndCountdown() रिवर्स काउंटर का मान लौटाता है।

चरण 6: प्रोग्रामिंग। प्रोटोथ्रेड रूटीन

प्रोग्रामिंग। प्रोटोथ्रेड रूटीन
प्रोग्रामिंग। प्रोटोथ्रेड रूटीन

और यहाँ फ्रेमवर्क कोर है: प्रोटोथ्रेड रूटीन। सादगी के लिए उदाहरण केवल तीन चरणों तक सीमित है: रंग बदलने के लिए RED, GREEN और BLUE।

फ़ंक्शन को दो तर्कों के साथ बुलाया जाता है:

  • प्रोटोथ्रेड संरचना के लिए सूचक। मुख्य लूप शुरू होने से पहले उस संरचना को मुख्य द्वारा प्रारंभ किया गया था।
  • काउंटर को उल्टा करने के लिए सूचक। मुख्य लूप शुरू होने से पहले इसे मुख्य द्वारा 0 पर सेट किया गया था।

बाएं एलईडी को सक्रिय बनाने के लिए फ़ंक्शन सेट वोल्टेज और फिर प्रोटोथ्रेड सेगमेंट शुरू करता है। यह खंड मैक्रोज़ PT_BEGIN और PT_END के बीच है। अंदर कुछ कोड हैं जो हमारे मामले में केवल मैक्रोज़ PT_WAIT_UNTIL दोहराते हैं। यह मैक्रो अगला प्रदर्शन करता है:

  • समारोह DoAndCountdown का आह्वान। यह विशेष रंग उत्सर्जित करने के लिए एलईडी कैथोड पर वोल्टेज सेट करता है।
  • 0 की तुलना में परिणाम लौटाया गया। यदि स्थिति 'गलत' है, तो प्रोटोथ्रेड फ़ंक्शन तुरंत वापस आ जाता है और मुख्य लूप पर नियंत्रण प्राप्त करता है।
  • जब अगली बार प्रोटोथ्रेड का आह्वान किया जाता है तो यह फिर से PT_BEGIN से पहले कोड निष्पादित करता है, फिर सीधे PT_WAIT_UNTIL मैक्रोज़ के अंदर कूद जाता है जिससे यह पिछली बार लौटा था।
  • DoAndCountdown का परिणाम 0 होने तक इस तरह की कार्रवाइयां दोहराई जाती हैं। उस स्थिति में कोई वापसी नहीं होती है, प्रोग्राम प्रोटोथ्रेड में रहता है और कोड की अगली पंक्ति को निष्पादित करता है। हमारे मामले में यह अगला PT_WAIT_UNTIL है लेकिन आम तौर पर यह लगभग कोई भी सी कोड हो सकता है।
  • दूसरे PT_WAIT_UNTIL रिवर्स काउंटर के प्रारंभिक निष्पादन में 0 है, इसलिए प्रक्रिया DoAndCountdown() इसे प्रारंभिक मान पर सेट करती है। दूसरा मैक्रोज़ फिर से 250 बार निष्पादित किया जाएगा जब तक कि रिवर्स काउंटर 0 तक नहीं पहुंच जाता।
  • जैसे ही नियंत्रण PT_END मैक्रोज़ तक पहुँचता है, संरचना pt की स्थिति रीसेट हो जाती है। जब अगली बार प्रोटोथ्रेड फ़ंक्शन का आह्वान किया जाता है तो प्रोटोथ्रेड सेगमेंट PT_BEGIN के ठीक बाद कोड की एक्ज़ीक्यूट लाइन शुरू करता है।

सही एलईडी के लिए समान प्रोटोथ्रेड रूटीन है। हमारे उदाहरण में यह सिर्फ रंगों के अलग-अलग क्रम को लागू करता है, लेकिन अगर हम इसे पूरी तरह से अलग तरीके से कर सकते हैं: बाएं और दाएं एलईडी रूटीन के बीच कोई तंग युग्मन नहीं है।

चरण 7: आंतरिक

आंतरिक
आंतरिक

पूरा प्रोग्राम कोड की 200 लाइनों से कम है (टिप्पणियों और खाली लाइनों के साथ) और 20% से कम Attiny85 कोड मेमोरी लेता है। यदि आवश्यक हो तो यहां कई और प्रोटोथ्रेड रूटीन का उपयोग करना संभव है और उन्हें और अधिक जटिल तर्क सौंपना संभव है।

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

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

आप शायद जानना चाहते हैं कि प्रोटोथ्रेड वास्तव में कैसे काम करता है? जादू कहाँ छिपा है? प्रोटोथ्रेड विशेष सी भाषा सुविधा पर भरोसा करते हैं: तथ्य यह है कि सी स्विच केस स्टेटमेंट को अगर या किसी अन्य ब्लॉक (जैसे जबकि या के लिए) में एम्बेड किया जा सकता है। विवरण आपको एडम डंकल्स साइट https://dunkels.com/adam/pt/expansion.html पर मिल सकता है

इस परियोजना के इलेक्ट्रॉनिक्स इंटर्नल बहुत सरल हैं। ऊपर दिया गया फोटो आपको कुछ सुराग देता है। मुझे यकीन है कि आप बेहतर कर सकते हैं।

सिफारिश की: