विषयसूची:

ब्लिंकिंग, सिंगिंग, मारियोमैन: 5 स्टेप्स
ब्लिंकिंग, सिंगिंग, मारियोमैन: 5 स्टेप्स

वीडियो: ब्लिंकिंग, सिंगिंग, मारियोमैन: 5 स्टेप्स

वीडियो: ब्लिंकिंग, सिंगिंग, मारियोमैन: 5 स्टेप्स
वीडियो: Khaie Episode 07 - [Eng Sub] - Digitally Presented by Sparx Smartphones - 24th January 2024 2024, नवंबर
Anonim
निमिष, गायन, मारियोमैन
निमिष, गायन, मारियोमैन

सुपर मारियो ब्रदर्स थीम गीत बजाने वाला एक ब्लिंकिंग मारियोमैन बनाने के लिए एक attiny13a, दो एलईडी और एक ग्रीटिंग कार्ड स्पीकर का उपयोग करें। यह किसी के लिए भी एक आसान कम लागत वाला प्रोजेक्ट हो सकता है जो AVR प्रोग्रामिंग में सेंध लगाने का एक मजेदार तरीका ढूंढ रहा है! गाने के नोट्स AVR माइक्रोकंट्रोलर के सिंगल पिन पर आउटपुट स्क्वायर वेव द्वारा उत्पन्न होते हैं। प्रत्येक नोट पर वैकल्पिक रूप से लगे एलईडी एक ही चिप के 2 पिन से जुड़े होते हैं।

चरण 1: सामग्री और निर्माण

सामग्री और निर्माण
सामग्री और निर्माण

1 attiny13a

www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dलागत: $1.40

  • 2 एल ई डी - कोई भी एल ई डी करेगा
  • 1 लिथियम सिक्का सेल बैटरी

www.sparkfun.com/commerce/product_info.php?products_id=338लागत: $2.00

1 सिक्का सेल धारक

www.sparkfun.com/commerce/product_info.php?products_id=8822लागत: $1.25

संगीतमय ग्रीटिंग कार्ड से १ छोटा वक्ता

सामग्री की कुल लागत ~ $5दो एल ई डी सीधे दो पिनों से जुड़े थे जिनमें से प्रत्येक attiny13A था। प्रत्येक एलईडी के लिए दो पिन का उपयोग किया जाता है, दूसरा पिन ग्राउंड कनेक्शन के रूप में उपयोग करने के लिए कम सेट किया जाता है। एवीआर पर आई/ओ पिन की वर्तमान सीमा एल ई डी को बहुत अधिक खींचने से रोकेगी, इसलिए कनेक्ट करने के लिए एक प्रतिरोधी आवश्यक नहीं है श्रंखला। उपयोग किया जाने वाला स्पीकर संगीत ग्रीटिंग कार्ड में पाया जाने वाला एक विशिष्ट है, कोई भी छोटा स्पीकर करेगा, यह देखते हुए कि यह एक चौकोर तरंग टोन आउटपुट कर रहा है, स्पीकर या ध्वनि की गुणवत्ता के बारे में चिंता करना बहुत महत्वपूर्ण नहीं है।

चरण 2: AVR को LED और स्पीकर से मिलाना

AVR को LED और स्पीकर से मिलाना
AVR को LED और स्पीकर से मिलाना
AVR को LED और स्पीकर से मिलाना
AVR को LED और स्पीकर से मिलाना

एल ई डी के लिए हथियारों की तरह पहुंचने के लिए प्रत्येक तरफ एवीआर पर एक पिन झुका हुआ है। एवीआर को इस तरह से ओरिएंट करना स्पीकर (दूसरी छवि) से कनेक्ट करना आसान बनाता है क्योंकि कनेक्शन दो निचले पिन पर होते हैं। सौंदर्यशास्त्र के लिए आप चिप के सामने वाले हिस्से को बाहर करना चाहते हैं, इसलिए सुनिश्चित करें कि स्पीकर उसी तरह का सामना कर रहा है जब यह संलग्न है।

चरण 3: Attiny13a प्रोग्रामिंग

Attiny13a प्रोग्रामिंग
Attiny13a प्रोग्रामिंग

AVRs प्रोग्रामिंग के लिए बहुत सारे अलग-अलग विकल्प हैं। इस परियोजना के लिए USBtiny का उपयोग किया गया था जो कि लेडीडा की साइट से एक किट के रूप में उपलब्ध हैhttps://www.ladyada.net/make/usbtinyisp/index.htmlएवीआर को प्रोग्रामर से जोड़ने के लिए आप कर सकते हैं या तो फीमेल सॉकेट में तार लगाएं और उन्हें ब्रेडबोर्ड में प्लग करें या इससे बेहतर है कि प्लग को कनेक्ट करने के लिए 3x2 पुरुष हेडर के साथ इस तरह का एक सस्ता AVR प्रोग्रामिंग एडेप्टर प्राप्त करें।.

चरण 4: मारियोमैन के लिए फर्मवेयर बनाना

मारियोमैन के लिए फर्मवेयर बनाना
मारियोमैन के लिए फर्मवेयर बनाना

Attiny13A में 1K प्रोग्राम करने योग्य फ्लैश और 64bytes SRAM है। संलग्न टार फ़ाइल में स्रोत फ़ाइल के साथ-साथ डाउनलोड के लिए संकलित फर्मवेयर है। संगीत उत्पन्न करने के लिए c कोड में तीन सरणियों का उपयोग किया गया था

  • freq - प्रत्येक नोट की आवृत्ति
  • लंबाई - प्रत्येक नोट की लंबाई
  • देरी - प्रत्येक नोट के बीच रुकें

फ़्रीक्वेंसी एरे में वास्तविक फ़्रीक्वेंसी नहीं होती है, बल्कि PB0 पिन से स्क्वायर वेव जेनरेट करने के लिए TTCROB रजिस्टर में डालने का मान होता है। स्क्वायर वेव जनरेशन के लिए गणना और पिन कॉन्फ़िगरेशन का संक्षिप्त सारांश यहां दिया गया है:

  • Attiny13A में एक आंतरिक थरथरानवाला है जो 9.6MHz पर सेट है
  • आईओ के लिए आंतरिक घड़ी 8 या 1.2 मेगाहर्ट्ज द्वारा विभाजित ऑसीलेटर है
  • 8 के प्रीस्केल के साथ प्रत्येक घड़ी चक्र को गिनने के लिए 8 बिट रजिस्टर में एक आंतरिक टाइमर स्थापित किया गया है।
  • इसका परिणाम 1 / (1.2MHz/8) =.006667ms. के बराबर एक टिक होता है
  • attiny13A को टाइमर के साथ 8bit TCCR0B रजिस्टर में जो है उसकी तुलना करने के लिए कॉन्फ़िगर किया गया है और जब वे मेल खाते हैं तो एक पिन टॉगल करें।
  • उदाहरण के लिए, 524Hz (मध्य C के ऊपर एक सप्तक) पर एक वर्ग तरंग उत्पन्न करने के लिए जिसकी अवधि 1.908ms है।

1.908ms = 286 क्लॉक टिक (1.908/.0067) t/2 पर पिन को टॉगल करने के लिए 286 को 2 से विभाजित करें (286/2 = 143) इस नोट को बनाने के लिए TTCR0B रजिस्टर में 143 डालें। यह सभी कोड है जो आवश्यक है टाइमर सेट करने के लिए, एक वर्ग तरंग की तुलना और आउटपुट करें:

TCCR0A |= (1<<WGM01); // सीटीसी मोड के लिए टाइमर 1 को कॉन्फ़िगर करें TCCR0A | = (1<<COM0A0); // तुलना मैच पर OC0A टॉगल करें TCCR0B |= (1<<CS01); // clk/8 प्रीस्केल TTCR0B = १४३; // 524Hz पर एक वर्ग तरंग उत्पन्न करेंटोन और उनके बीच के ठहराव को विलंबित करने के लिए एक साधारण विलंब फ़ंक्शन का उपयोग किया गया था

शून्य नींद (इंट एमएस) {इंट सीएनटी; के लिए (सीएनटी = 0; सीएनटी <(एमएस); सीएनटी ++) {int i = 150; जबकि (i--) { _asm ("एनओपी"); } }}यह 150 से नीचे गिना जाता है जहां प्रत्येक एनओपी चक्र लगभग.006667ms है। आखिरी चीज जो कोड करता है वह सरणी के माध्यम से लूप है, संगीत उत्पन्न करता है और दो एल ई डी ब्लिंक करता है। यह निम्नलिखित कोड के साथ निरंतर लूप में किया जाता है

const uint8_t freq PROGMEM = {… data};const uint8_t लंबाई PROGMEM = {… data};const uint8_t देरी PROGMEM = {… डेटा};…जबकि (1) { के लिए (cnt=0; cnt< १५६; cnt++) {OCR0A=pgm_read_byte(&freq[cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); नींद (pgm_read_byte (और लंबाई [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // स्टॉप टाइमर TCCR0B = 0; नींद (pgm_read_word(&delay[cnt])); // प्रारंभ टाइमर TCCR0B |= (1<<CS01); // clk/8 प्रीस्केल }}आवृत्तियों/लंबाई/विलंब सरणी में 156 तत्व हैं, यह लूप उन्हें पार करता है। पिन PB3 और PB4 प्रत्येक को टॉगल किया जाता है, इसलिए वे प्रत्येक नोट के साथ वैकल्पिक होंगे। पहली नींद उस नोट की लंबाई है जिसे हम OCR0A रजिस्टर को उचित मान पर सेट करने के बाद खेलते हैं। दूसरी नींद हमारे द्वारा चलाए जाने वाले नोटों के बीच का विराम है। ऊपर दिए गए कोड में आपने दो कार्यों pgm_read_byte() और pgm_read_word() के साथ-साथ कीवर्ड PROGMEM को नोटिस किया होगा। एटिनी की तरह एक एम्बेडेड चिप के साथ SRAM की मात्रा बहुत सीमित है, इस मामले में केवल 64bytes। सभी फ़्रीक्वेंसी/देरी/लंबाई डेटा के लिए हम जिन सरणियों का उपयोग कर रहे हैं, वे 64bytes से बहुत बड़ी हैं और इसलिए उन्हें मेमोरी में लोड नहीं किया जा सकता है। विशेष PROGMEM avr-gcc निर्देश का उपयोग करके इन बड़े डेटा सरणियों को मेमोरी में लोड होने से रोका जाता है, इसके बजाय उन्हें फ्लैश से पढ़ा जाता है।

चरण 5: मारिओमन को ढीला छोड़ना

उपरोक्त वीडियो मारियोमन को कार्रवाई में दिखाता है। औसत बिजली की खपत लगभग 25mA है, इसलिए वह लिथियम सिक्का सेल को निकालने से पहले लगभग 10 घंटे तक झपकी ले सकता है और शोर कर सकता है। उसे चालू और बंद करने का एकमात्र तरीका सिक्का सेल बैटरी को निकालना है, सामग्री में सूचीबद्ध मजबूत है इसके लिए अच्छी तरह से अनुकूल है। एक स्विच जोड़ा जा सकता है लेकिन इसे सरल रखने के लिए कुछ कहा जाना है।

सिफारिश की: