नए साल और क्रिसमस की छुट्टियां नाक पर हैं, और बहुत से चिंतित हैं कि दोस्तों और रिश्तेदारों को क्या पेश करना है।
दरअसल, मैं इसी मुद्दे को लेकर चिंतित था। और इस तरह का एक विचार मेरे पास आया - एक संगीत पोस्टकार्ड बनाने के लिए। बेशक, यह विचार नया नहीं है - हमारे चीनी भाई उन्हें बड़ी मात्रा में और कम कीमत पर बनाते हैं। लेकिन मैं चीनियों के साथ प्रतिस्पर्धा करने वाला नहीं था, मैं सिर्फ अपना कुछ करना चाहता था। और, यह मुझे लगता है, एक अच्छा परिणाम प्राप्त होता है:
टी
शुरू करने के लिए, मैंने निम्नलिखित आवश्यकताओं को तैयार किया:
जब खुला, कार्ड को एक सर्कल में एक राग खेलना चाहिए।
एक माधुर्य के रूप में, मैंने शेकड्रीक, या बेल्स के कैरोल को चुना।
यह वांछनीय है कि राग पॉलीफोनिक हो।
यह योजना यथासंभव सरल होनी चाहिए, इसमें न्यूनतम विवरण, दोहराने में आसान, सस्ती लागत शामिल है। और सबसे महत्वपूर्ण बात - एक पोस्टकार्ड में फिट।
के विश्लेषण
एक लंबे समय के लिए मैं माइक्रोकंट्रोलर करने जा रहा था, और प्रयोगों के लिए मैंने सबसे सस्ता - एटिनी 13 खरीदा, इसलिए मैंने इन माइक्रोकंट्रोलर्स के आधार पर एक सर्किट बनाने का फैसला किया।
शुरू करने के लिए, मुझे पता चला कि क्या इस एमके पर क्या कल्पना की गई थी, और यदि ऐसा है, तो इसे लागू करना संभव होगा या नहीं। ऐसा करने के लिए, मैंने
नोटों को पाया और डाउनलोड किया, और विश्लेषण के लिए आगे बढ़ा।
एमके की याद में एक राग कई मायनों में लिखा जा सकता है, मैं 2 विकल्पों के साथ आया था: 1) न्यूनतम नोट की अवधि के अनुरूप समय की प्रत्येक लंबाई के लिए एक नोट संख्या के रूप में, और 2) प्रारूप अवधि में - नोट। पहला विकल्प, ज़ाहिर है, लागू करना आसान है। मुझे लगता है: एक गीत में 25 उपाय हैं, जिनमें से 16 दो बार दोहराए जाते हैं, अर्थात्। केवल 41 उपाय। न्यूनतम नोट की अवधि 1/8 है, और माप का आकार 3/4 है, इसलिए, एक माप में न्यूनतम अवधि के 6 नोट हैं, और पूरे मेलोडी में 6 (माप के अनुसार नोट) * 41 (माप) * 3 (आवाज) 738 होगा नोटों। यदि आप प्रत्येक नोट पर एक बाइट खर्च करते हैं, तो यह थोड़ा अधिक हो जाता है, क्योंकि attiny13 में फ्लैश मेमोरी की कुल 1024 बाइट्स होती हैं (और आपको प्रोग्राम को स्वयं और आवृत्ति तालिका लगाने की आवश्यकता होती है)। इसलिए, यह दूसरी विधि की कोशिश करने के लायक है। मुझे लगता है: केवल 263 नोट (रोकें सहित) पहले से ही स्वीकार्य हैं, भले ही आप अवधि के लिए एक बाइट का उपयोग करें, और नोट की ऊंचाई के लिए एक बाइट, आपको 526 बाइट्स मिलते हैं।
मैंने एसेंबलर में लिखने का फैसला किया - सबसे पहले, एमके के साथ बेहतर सौदा करने के लिए, और दूसरा - शेष 700 बाइट्स में फिट होने के लिए।
एमके स्मॉल 13 में बोर्ड पर 2 पीडब्लूएम हैं, जिसके साथ आप दो-आवाज़ की धुन बना सकते हैं। लेकिन इस राग के लिए आपको 3 आवाजों की आवश्यकता होती है, इसलिए ध्वनि उत्पन्न करने के लिए अकेले PWM का उपयोग करने से काम नहीं चलेगा। सादगी के लिए, मैंने पीडब्लूएम के उपयोग को छोड़ने का फैसला किया - कम से कम डिवाइस के पहले संस्करण में।
योजना
सबसे पहले, मैंने माधुर्य की प्रत्येक आवाज को एक अलग एमके फुट पर लाने का फैसला किया। इसलिए, प्रारंभिक योजना इस प्रकार थी:

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

एल्गोरिथ्म
एमके आउटपुट पर किसी दिए गए आवृत्ति की ध्वनि प्राप्त करने के लिए, आपको एमके आवृत्ति / प्रीसेट आवृत्ति के बराबर संख्या-गुणांक द्वारा इसकी घड़ी आवृत्ति को विभाजित करने की आवश्यकता है। चूंकि डिवीजन ऑपरेशन (और शेष मॉडुलो की गणना) AVR कमांड की सूची में नहीं हैं, हम काउंटर का उपयोग करके विभाजित करेंगे। प्रारंभ में, काउंटर को एक विभाजन गुणांक सौंपा गया है, और अगले चक्र पर इसे घटाया जाता है। 1. यदि काउंटर शून्य है, तो सिग्नल को डिवाइडर पर बदलने का समय आ गया है, और आपको एक निश्चित एमके लेग पर मूल्य बदलने की आवश्यकता है और काउंटर में मूल्य-गुणांक वापस भी लिखें।
काउंटरों-डिवाइडर को 4 टुकड़ों की आवश्यकता होती है: प्रत्येक वोट के लिए एक, और नोटों की गिनती के लिए एक और (टेम्पो का निर्धारण)।
ऑपरेशन एल्गोरिथ्म इस प्रकार है:
1) वैरिएबल को इनिशियलाइज़ करें
2) यदि नोटों का काउंटर-डिवाइडर शून्य के बराबर है, तो प्रत्येक आवाज की जांच के लिए कि क्या वर्तमान नोट खेलना समाप्त हो गया है, और यदि उसने खेलना समाप्त कर लिया है, तो मेमोरी से अगला लोड करें।
3) प्रत्येक वोट के लिए, काउंटर को 1 से घटाएं, यदि यह शून्य के बराबर है, तो विभाजन कारक को फिर से असाइन करें और आउटपुट पर मूल्य बदलें।
4) 2 से संक्रमण
इस एल्गोरिदम को काम करने के लिए, यह आवश्यक है कि प्रत्येक कार्यक्रम चक्र को समान संख्या में घड़ी चक्रों के लिए निष्पादित किया जाए। ऐसा करने के लिए, मुझे सभी शाखा शाखाओं की गणना करनी थी, और "तेज" वर्गों के लिए एक एनओपी या एक खाली लूप जोड़ना था।
सबसे पहले, जब ध्वनि एमके के तीन आउटपुट के लिए आउटपुट थी, तो वेवफॉर्म एक मेन्डंडर के रूप में था। फिर, जब मुझे एंटीपेज़ में 2 पिनों के माध्यम से यह सब और आउटपुट मिलाना था (यानी, वास्तव में, एक पिन के माध्यम से), तो समस्या पैदा हुई कि इन तीन आवाज़ों को कैसे मिलाया जाए। इसलिए, लहर को छोटी दालों के रूप में बनाने का फैसला किया गया था, और उन्हें एक साधारण या संक्षेप में प्रस्तुत किया गया था।
प्रोग्राम कोड
कार्यक्रम का स्रोत कोड
यहां पाया जा सकता
है।लोहा
अंतिम संस्करण को लागू करते समय, निम्न कार्य उत्पन्न हुए:
1) पोषण
2) पर-बंद
मैंने cr2016 लिथियम बैटरी के साथ समस्या 1 को हल किया, जो इस लेख के अनुसार लगभग 90 एमएएच की क्षमता होनी चाहिए। मैंने बैटरी को एक पेपर क्लिप से एक अस्थायी कम्पार्टमेंट में रखा, क्योंकि मुझे आकार और कीमत में एक स्वीकार्य औद्योगिक डिब्बे नहीं मिला। सर्किट लगभग 2 mA की खपत करता है, इसलिए ऐसी बैटरी 40 घंटे तक चलनी चाहिए, जो पर्याप्त से अधिक हो।
पहले मैंने एक ही क्लिप का उपयोग करके समस्या 2 को हल करने के बारे में सोचा, लेकिन फिर मैंने इस विचार को एक रीड स्विच और एक चुंबक के पक्ष में छोड़ दिया। वीडियो में ऑपरेशन का सिद्धांत दिखाई दे रहा है।
प्रविष्टि
मैंने इसे AVR स्टूडियो 4 में संकलित और फ्लैश किया, जब इसे फ़्यूज़ में फ्लैश किया, तो मैंने केवल घड़ी की आवृत्ति को 4.8 मेगाहर्ट्ज में बदल दिया और मास्टर ऑसिलेटर की 8 आवृत्तियों द्वारा विभाजन को बंद कर दिया।
बजट
माइक्रोकंट्रोलर - 8 UAH
पीजोइलेक्ट्रिक तत्व - 2 UAH
बैटरी - 4 UAH
रीड स्विच - 2 UAH
कार्यक्रम विकास, डिबगिंग - 6 घंटे
विकास, सर्किट का परीक्षण - 3 घंटे
एक पोस्टकार्ड बनाना (यदि कोई etched कार्ड है) - 1 घंटा
फ़ोटो

पहला प्रोटोटाइप

दूसरा प्रोटोटाइप

बैटरी माउंट

तैयार डिवाइस - भागों के किनारे से देखें

तैयार डिवाइस - बैक व्यू

पहला एपिसोड
पुनश्च
सभी को नया साल मुबारक हो और मेरी क्रिसमस!