विषयसूची:
- चरण 1: डिजिटल सीक्वेंसर का उपयोगकर्ता संचालन
- चरण 2: तकनीकी विवरण
- चरण 3: तकनीकी विवरण
- चरण 4: 7-खंड क्लॉक डिवाइडर
- चरण 5: बीट्स प्रति मिनट क्लॉक डिवाइडर
- चरण 6: पिच क्लॉक डिवाइडर
- चरण 7: प्ले / पॉज़ / स्टेट मशीन का चयन करें
- चरण 8: प्ले / पॉज़ / स्टेट मशीन चुनें
- चरण 9: आउटपुट एफएसएम
- चरण 10: आउटपुट एफएसएम
- चरण 11: नोट असाइन करें
- चरण 12: आउटपुट चयन
- चरण 13: स्क्वायर वेव Gen
- चरण 14: 7-खंड प्रदर्शन
- चरण 15: अंतिम चयन
- चरण 16: बाहरी उपकरण: DAC
- चरण 17: बाहरी उपकरण: स्पीकर
- चरण 18: वीडियो डेमो
- चरण 19: वीएचडीएल कोड
वीडियो: 4 स्टेप डिजिटल सीक्वेंसर: 19 स्टेप्स (चित्रों के साथ)
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:23
सीपीई 133, कैल पॉली सैन लुइस ओबिस्पो
परियोजना निर्माता: जैसन जॉनसन और ब्योर्न नेल्सन
आज के संगीत उद्योग में, सबसे अधिक उपयोग किए जाने वाले "उपकरण" में से एक डिजिटल सिंथेसाइज़र है। संगीत की हर शैली, हिप-हॉप से लेकर पॉप और यहां तक कि देश तक, स्टूडियो में एक डिजिटल सिंथेसाइज़र का उपयोग करता है ताकि वे अपने संगीत को जीवंत करने के लिए आवश्यक बीट्स और ध्वनियाँ बना सकें। इस ट्यूटोरियल में, हम बेसिस 3 एफपीजीए बोर्ड के साथ एक बहुत ही सरल सिंथेसाइज़र बनाएंगे।
सिंथेसाइज़र चार चयनित क्वार्टर नोट्स को लगातार बीट्स प्रति मिनट पर चलाने में सक्षम होगा। उपयोगकर्ता प्रत्येक तिमाही नोट को संगीतमय पिच पर असाइन करने के लिए स्विच का उपयोग करेंगे। इस परियोजना के लिए हम बोर्ड से आउटपुट लेने और इसे एनालॉग सिग्नल में बदलने के लिए 4-बिट डिजिटल से एनालॉग कनवर्टर (डीएसी) का उपयोग कर रहे हैं। DAC से आउटपुट तब एक मानक कंप्यूटर स्पीकर को फीड किया जाएगा, जिससे हमारा संगीत तैयार होगा। सोलह असतत पिच संभव हैं। हम अपने सिंथेसाइज़र को 12 नोटों के एकल सप्तक तक सीमित रखेंगे, जो मध्य C (261.6 Hz) और B4 (493.9 Hz) के बीच आते हैं। उपयोगकर्ता के पास एक ही समय में कई नोट्स असाइन करने का विकल्प भी होगा, साथ ही साथ कोई भी पिच स्विच ऊपर की ओर शिफ्ट नहीं होने पर असाइन को हिट करके आराम असाइन करने का विकल्प होगा। जैसा कि प्रत्येक नोट का चयन किया जाता है और खेला जा रहा है, अक्षर नोट को 7-सेगमेंट डिस्प्ले पर दिखाया जाता है। हम बोर्ड पर तीन बटनों का भी उपयोग करेंगे, एक संगीत बजाने और रोकने के लिए, एक सिंथेसाइज़र को रीसेट करने और इसे "चयन" मोड में डालने के लिए, और तीसरा चयन मोड में प्रत्येक नोट को एक पिच असाइन करने के लिए।
एक बार जब उपयोगकर्ता अपनी पसंद के नोट्स से संतुष्ट हो जाता है, और प्ले बटन दबाने के बाद, सिंथेसाइज़र प्रत्येक नोट को क्रमिक रूप से तब तक बजाएगा जब तक कि उपयोगकर्ता या तो पॉज़ नहीं दबाता या चयन नहीं करता।
यहाँ आवश्यक उपकरणों की एक सूची है:
- विवाडो (या कोई वीएचडीएल कार्य स्थान)
- बेसिस 3 या समान FPGA बोर्ड
- डिजिटल से एनालॉग कनवर्टर (न्यूनतम 4-बिट्स)
- हेडफोन जैक के साथ स्पीकर
- वायर लीड
चरण 1: डिजिटल सीक्वेंसर का उपयोगकर्ता संचालन
डिजिटल सीक्वेंसर को संचालित करने के लिए निम्नलिखित चरण हैं। डिजिटल सीक्वेंसर 12 अलग-अलग पिचों (सी, डीबी, डी, ईबी, ई, एफ, जीबी, जी, एबी, ए, बीबी, बी) के प्लेबैक का समर्थन करता है, जो 261.6 हर्ट्ज से 493.9 हर्ट्ज तक है।
1. बोर्ड को चयन मोड में डालने के लिए बायां बटन दबाएं। जब इस मोड में, सबसे बाईं ओर के 4 स्विच (13 से 16 के स्विच) का उपयोग एक अलग पिच मान को संग्रहीत करने के लिए किया जाएगा।
2. चयन करने के लिए, बाएं स्विच में से एक को चालू करें, और फिर वांछित पिच चुनने के लिए दाएं 4 स्विच (स्विच 1 से 4) का उपयोग करें। दाएँ स्विच के विशिष्ट संयोजन से जुड़ी पिच को सात खंडों के डिस्प्ले पर दिखाया जाएगा, और जब भी दाएँ स्विच को नए संयोजन में स्थानांतरित किया जाता है, तो डिस्प्ले नई संबद्ध पिच पर अपडेट हो जाएगा। बाएँ स्विच में से किसी एक को पिच असाइन न करके, या नोट में डिस्प्ले पर 0 के रूप में दर्शाई गई पिच असाइन करके एक रेस्ट असाइन किया जा सकता है। एक बार वांछित पिच मिल जाने के बाद और डिस्प्ले पर दिखाई देने के बाद, उस विशिष्ट पिच को नोट को असाइन करने के लिए नीचे असाइन करें बटन दबाएं।
3. शेष तीन नोटों के लिए चरण 2 को दोहराएं, प्रत्येक शेष बाएं स्विच को अलग-अलग फ़्लिप करके, दाएं स्विच के साथ संबंधित पिच का चयन करके, और नोट को पिच असाइन करने के लिए नीचे का बटन दबाएं। एक ही समय में एक से अधिक बाएं स्विच को ऊपर की ओर स्थानांतरित करके एकाधिक नोटों को एक ही पिच असाइन किया जा सकता है।
4. अब जब सभी नोट पिचों को सौंपा गया है, तो डिजिटल सीक्वेंसर खेलने के लिए तैयार है। स्पीकर पर नोट्स चलाने के लिए, संगीत बजाना शुरू करने के लिए बस सही प्ले/पॉज़ बटन दबाएं। प्लेबैक अनुक्रम का क्रम बाएं से दाएं, बाएं स्विच से जुड़े पिचों को प्रतिबिंबित करता है। नोट 1, 2, 3, 4, 1, 2… के क्रम में, प्रति मिनट बीट्स की एक निर्धारित संख्या में बजाए जाएंगे। डिस्प्ले उस नोट को दिखाएगा जो वर्तमान में बज रहा है क्योंकि स्पीकर संगीत बजाते हैं। संगीत प्लेबैक को रोकने के लिए, बस दायां बटन दबाएं, और फिर संगीत बजना बंद हो जाएगा और प्रदर्शन पर एक विराम चिह्न दिखाया जाएगा। दायाँ बटन फिर से दबाने पर प्लेबैक फिर से शुरू हो जाएगा।
चरण 2: तकनीकी विवरण
हमारा सिंथेसाइज़र कई अलग-अलग डिजिटल घटकों का उपयोग करता है। शामिल हैं परिमित राज्य मशीनें, रजिस्टर, मल्टीप्लेक्सर्स, क्लॉक डिवाइडर और बहुत कुछ। अपना सिंथेसाइज़र बनाने के लिए, हमने 10 अद्वितीय मॉड्यूलर फ़ाइलों का उपयोग किया। प्रत्येक मॉड्यूल को एक घटक बनाने के बजाय, हमने मॉड्यूलर फाइलों को फ़ंक्शन द्वारा तोड़ दिया। परिणामस्वरूप, अधिकांश मॉड्यूल एक से अधिक घटक हैं। ध्यान दें कि ऊपर दी गई छवि हमारे शीर्ष डिज़ाइन में एक साथ बंधे हुए प्रत्येक ब्लॉक को दिखाती है।
हम इनपुट और आउटपुट का वर्णन करके, इसके घटकों को तोड़कर, और समग्र डिजाइन में इसके उद्देश्य की व्याख्या करके प्रत्येक मॉड्यूल पर चर्चा करेंगे। निर्देश के निचले भाग में एक ज़िप फ़ाइल शामिल है, जिसमें प्रोजेक्ट में उपयोग की जाने वाली प्रत्येक VHDL कोड फ़ाइल होती है।
इनपुट
- Clk (देशी घड़ी संकेत)
- पीपी (प्ले / पॉज़)
- सेल (सिलेक्शन मोड में सिंथेसाइज़र लगाएं)
- असाइन करें (एक पिच के लिए एक चरण असाइन करें)
- चरण (स्थितीय नोट्स)
- फ़्रीक (वांछित पिच बनाने वाले स्विच)
आउटपुट
- एनोड (7-खंड एनोड)
- कैथोड (7-खंड कैथोड)
- डीएसी (डीएसी चलाने वाले 4-बिट्स)
चरण 3: तकनीकी विवरण
चरण 4: 7-खंड क्लॉक डिवाइडर
हमारा सिंथेसाइज़र तीन क्लॉक डिवाइडर का उपयोग करता है, सभी उत्पादन संकेत जो हमारी परियोजना में एक अलग उद्देश्य की पूर्ति करते हैं। एक घड़ी विभक्त एक देशी घड़ी संकेत लेता है और एक परिवर्तित संकेत उत्पन्न करता है जिसकी आवृत्ति मूल घड़ी संकेत से कम होती है। बेसिस 3 की मूल घड़ी 100 मेगाहर्ट्ज है। यह वह आवृत्ति है जिसका उपयोग हमारे घड़ी के डिवाइडर करते हैं। यदि आप भिन्न देशी घड़ी आवृत्ति के साथ भिन्न FPGA बोर्ड का उपयोग कर रहे हैं, तो आपको कोड बदलना पड़ सकता है।
7-सेगमेंट क्लॉक डिवाइडर एक संकेत उत्पन्न करता है जो seg_display फ़ाइल को चलाता है। जब हम इसके अनुभाग में पहुंचेंगे तो हम बताएंगे कि यह फ़ाइल कैसे अधिक विस्तार से काम करती है। अनिवार्य रूप से, यह घड़ी विभक्त 240 हर्ट्ज सिग्नल उत्पन्न करता है जिसका उपयोग डिस्प्ले पर एनोड और कैथोड के बीच स्विच करने के लिए किया जाएगा। सिग्नल 240 हर्ट्ज है क्योंकि जिस आवृत्ति पर मानव आंख प्रकाश की अनुपस्थिति को नहीं पहचान सकती है वह 60 हर्ट्ज है। हम दो अंकों का उपयोग कर रहे हैं, इसलिए इस आवृत्ति को दोगुना करने पर, प्रत्येक अंक 60 हर्ट्ज पर दोलन करेगा। फिर हम इसे 240 हर्ट्ज प्राप्त करने के लिए दोगुना करते हैं क्योंकि सिस्टम केवल तभी बदल रहा है जब सिग्नल उच्च हो जाता है, न कि जब यह कम हो जाता है।
इसे प्राप्त करने के लिए, डिवाइडर देशी 100 मेगाहर्ट्ज सिग्नल लेता है और हर बढ़ते किनारे पर गिना जाता है। जब काउंटर 416667 पर पहुंच जाता है, तो आउटपुट निम्न से उच्च या इसके विपरीत जाएगा।
इनपुट
Clk (देशी घड़ी संकेत)
आउटपुट
Clk_7seg (seg_display के लिए)
अवयव
- डी रजिस्टर
- मक्स
- पलटनेवाला
- एडर
चरण 5: बीट्स प्रति मिनट क्लॉक डिवाइडर
बीपीएम क्लॉक डिवाइडर इसी तरह से काम करता है। यह डिवाइडर क्लॉक फ्रीक्वेंसी पैदा करता है जो प्ले स्टेट में टोन आउटपुट करते समय चार चरणों के बीच स्विचिंग को चलाता है। हमने 100 बीपीएम पर नोटों के बीच स्विच करने का फैसला किया। 100 बीपीएम पर, प्रत्येक नोट एक सेकंड के 3/5 के लिए खेला जाएगा। परिणामी संकेत में 1.67 हर्ट्ज की आवृत्ति होगी।
इस आवृत्ति का संकेत उत्पन्न करने के लिए, हमने फिर से एक गिनती प्रणाली का उपयोग किया, लेकिन इस बार गिनती 60 मिलियन थी। हर बार जब काउंटर 60 मिलियन हिट करता, तो आउटपुट सिग्नल उच्च या निम्न टॉगल करता।
इनपुट
Clk (देशी घड़ी आवृत्ति)
आउटपुट
Clk_BPM (output_FSM के लिए)
अवयव
- डी रजिस्टर
- मक्स
- पलटनेवाला
- एडर
चरण 6: पिच क्लॉक डिवाइडर
पिच क्लॉक डिवाइडर हमारे क्लॉक डिवाइडर में सबसे बड़ा है। यह डिवाइडर हमारे सिंथेसाइज़र द्वारा चलाए जा सकने वाले १२ अलग-अलग नोटों के अनुरूप १२ अलग-अलग संकेतों को आउटपुट करता है। संगीत सिद्धांत के बुनियादी ज्ञान का उपयोग करते हुए, हमने यह निष्कर्ष निकाला कि एक बिट या बस उस दर पर दोलन कर सकती है जो संगीत नोट्स की आवृत्ति से मेल खाती है। हमारे द्वारा उपयोग की जाने वाली आवृत्तियों को देखने के लिए, यहां देखें। हमने पिचों के चौथे सप्तक का इस्तेमाल किया।
यहां भी यही मतगणना प्रणाली अपनाई जाती है। हमारे द्वारा गिने जाने वाले विशिष्ट मानों के लिए, Clk_div_pitches लेबल वाली फ़ाइल देखें।
इनपुट
Clk (देशी घड़ी आवृत्ति)
आउटपुट
सी, डीबी, डी, ईबी, ई, एफ, जीबी, जी, एबी, ए, बीबी, बी (आउटपुट_सेलेक्ट करने के लिए)
अवयव
- डी रजिस्टर
- मक्स
- पलटनेवाला
- एडर
चरण 7: प्ले / पॉज़ / स्टेट मशीन का चयन करें
हमारी परियोजना में दो परिमित राज्य मशीनें (FSM) हैं। FSM एक लॉजिक डिवाइस है जो कि सीमित मात्रा में राज्यों में से केवल एक ही राज्य में मौजूद हो सकता है। FSM का उपयोग करके, एक डिजिटल सर्किट इनपुट के संयोजन के आधार पर एक नए राज्य में जा सकता है। इनपुट लॉजिक का उपयोग करते हुए, घड़ी के बढ़ते हुए किनारे पर FSM की स्थिति बदल जाएगी। सर्किट में राज्य और इनपुट से, आप आउटपुट लॉजिक बना सकते हैं जो आउटपुट देता है जो केवल तभी मौजूद होता है जब एफएसएम एक निश्चित स्थिति में हो।
पीपीएस स्टेट मशीन हमारे सर्किट में पहली एफएसएम है। इस FSM में तीन राज्य हैं; प्ले, पॉज और सिलेक्शन मोड। विभिन्न राज्यों में जाने के लिए, हमने पीपी और चयन बटन का उपयोग किया। राज्यों के बीच संक्रमण कैसे होता है, यह देखने के लिए ऊपर दिए गए राज्य आरेख को देखें। हमने इस FSM ट्रांज़िशन को देशी १०० मेगाहर्ट्ज घड़ी के बढ़ते किनारे पर बनाया है, ताकि बहुत कम समय के लिए भी, एक बटन दबाने पर मशीन के लिए संक्रमण न करना असंभव हो जाए। वर्तमान स्थिति (P_state) इस मॉड्यूल से एकमात्र आउटपुट है।
इनपुट
- Clk (देशी घड़ी आवृत्ति)
- सेल (बाएं बटन)
- पीपी (दायां बटन)
आउटपुट
P_state (वर्तमान स्थिति, output_FSM, note_assign, seg_dsiplay, final_select)
अवयव
- मक्स
- डी रजिस्टर
चरण 8: प्ले / पॉज़ / स्टेट मशीन चुनें
चरण 9: आउटपुट एफएसएम
यह पिछले खंड में संदर्भित दूसरा FSM है। यह FSM दूसरे की तुलना में एक अलग कार्य करता है, लेकिन इसका आधार अनिवार्य रूप से एक ही है।
आउटपुट FSM केवल तभी संचालित होता है जब पहले FSM से वर्तमान स्थिति "01" (प्ले स्टेट) हो। अनिवार्य रूप से, यह मॉड्यूल के लिए सक्षम है। यदि राज्य "01" है, तो FSM BPM क्लॉक सिग्नल के बढ़ते किनारे पर राज्यों के बीच स्विच करने जा रहा है। हम ऐसा इसलिए करते हैं क्योंकि output_FSM नियंत्रित कर रहा है कि चयनित पिच के लिए कौन सा बाइनरी नंबर output_select और seg_display मॉड्यूल को भेजा जाता है। FSM में नोट असाइन मॉड्यूल से आने वाला 16-बिट इनपुट है, जिसे आगे कवर किया जाएगा। output_FSM के लिए "00" स्थिति में, मॉड्यूल असाइन किए गए पहले नोट के लिए "xxxx" आउटपुट करेगा। फिर "01" में, यह दूसरे नोट के लिए "yyyy" आउटपुट करेगा और इसी तरह प्रत्येक नोट के लिए पहले नोट पर वापस जाने से पहले आउटपुट करेगा। ऊपर राज्य आरेख देखें।
यह FSM पहले से अलग है क्योंकि राज्यों के बीच स्विचिंग को नियंत्रित करने के लिए कोई इनपुट लॉजिक नहीं है। इसके बजाय, FSM केवल तभी संचालित होने वाला है जब पहले FSM से राज्य "01" है, और फिर यह FSM केवल क्लॉक सिग्नल के बढ़ते किनारे पर राज्यों के बीच संक्रमण करेगा। एक और अंतर यह है कि इस मॉड्यूल में आउटपुट लॉजिक है, जिसका अर्थ है कि यह वर्तमान स्थिति को आउटपुट नहीं करता है, यह उस स्थिति में पिच के लिए बाइनरी नंबर को आउटपुट करता है।
इनपुट
- Clk_BPM (क्लॉक डिवाइडर से BPM क्लॉक सिग्नल)
- FSM1_state (PPS FSM से PS)
- पिच_इन (नोट_असाइन से पिचें)
आउटपुट
पिच_आउट (एक समय में एक पिच, output_select और seg_display के लिए)
अवयव
- मक्स
- डी रजिस्टर
चरण 10: आउटपुट एफएसएम
चरण 11: नोट असाइन करें
नोट असाइन मॉड्यूल वास्तव में स्थितीय नोट, या चरण के लिए एक पिच असाइन करने के लिए ज़िम्मेदार है। यह मॉड्यूल वास्तव में काफी सरल है। यह पहले जांचता है कि क्या सर्किट "चयन" स्थिति में है और यदि एक चरण स्विच (दूर बाएं) अधिक है। यदि यह सत्य है और असाइनमेंट बटन दबाया जाता है, तो मॉड्यूल का आउटपुट फ़्रीक्वेंसी स्विच (दूर दाएं) द्वारा दर्शाए गए बाइनरी नंबर के बराबर होगा।
मूल रूप से, हमने एक मॉड्यूल बनाने का प्रयास किया था जो वास्तव में आउटपुट में पिच घड़ी संकेतों में से एक को बचाएगा, लेकिन हमने इनपुट घड़ी संकेतों का पालन करने के लिए आउटपुट बदलने के साथ समस्याओं का अनुभव किया। यह एकमात्र मॉड्यूल है जिसे अंतिम डिजाइन में एक से अधिक बार उपयोग किया जाता है। प्रत्येक चरण में इसके साथ एक नोट_असाइन मॉड्यूल जुड़ा होता है, और उसके कारण, मॉड्यूल के प्रत्येक उदाहरण को स्टेप बस का एक बिट मिलता है।
इनपुट
- P_state (पीपीएस एफएसएम से वर्तमान स्थिति)
- सेल (बाएं बटन)
- स्विच (एक कदम स्विच)
- फ़्रीक (पिच के लिए सबसे दाएँ स्विच)
- असाइन करें (नीचे बटन, एक नोट असाइन करता है)
आउटपुट
पिच (बाइनरी संख्या, output_FSM के लिए)
अवयव
- मक्स
- डी पंजीकरण
चरण 12: आउटपुट चयन
आउटपुट चयन एक पिच के लिए बाइनरी नंबर लेने और उसे संबंधित क्लॉक सिग्नल से जोड़ने के लिए जिम्मेदार है। इसके आकार के बावजूद, यह अपेक्षाकृत सरल मॉड्यूल भी है। Output_select अनिवार्य रूप से एक बाइनरी डिकोडर है, जो एक पिच के लिए बाइनरी नंबर को एक विशिष्ट क्लॉक सिग्नल में डिकोड करता है। दरअसल, नोट_असाइन मॉड्यूल की तुलना में आउटपुट को क्लॉक फ़्रीक्वेंसी पर असाइन करना यहाँ बेहतर काम करता है, क्योंकि यह सब मॉड्यूल MUX को करना था जो बाइनरी नंबर के साथ क्लॉक सिग्नल था जो कंट्रोल इनपुट का प्रतिनिधित्व करता था।
हम अजीब रूटिंग के लिए क्षमा चाहते हैं, विवाडो ने clk_div_pitches फ़ाइल के लिए वर्णानुक्रम में पिच संकेतों को व्यवस्थित किया, लेकिन इस फ़ाइल के लिए इसने उन्हें बाइनरी नंबर पर चढ़कर व्यवस्थित किया, जिससे पिच एक अलग क्रम में हो। यह भी ध्यान दें कि यदि output_FSM से बाइनरी नंबर "0000" या "1100" से अधिक कुछ भी था, तो MUX ने एक फ्लैट '0' सिग्नल के माध्यम से भेजा।
इनपुट
- पिच (आउटपुट_एफएसएम से);
- सी, डीबी, डी, ईबी, ई, एफ, जीबी, जी, एबी, ए, बीबी, बी (पिच घड़ी संकेत)
उत्पादन
स्वर (एक एकल बिट जो चयनित घड़ी संकेत से वर्ग_वेव से मेल खाता है)
अवयव
मक्स
चरण 13: स्क्वायर वेव Gen
मॉड्यूल स्क्वायर_वेव स्क्वायर वेव के लिए जनरेटर है जिसे बोर्ड से डीएसी में आउटपुट किया जाता है। पिछली फ़ाइल से टोन सिग्नल का उपयोग करते हुए, यह स्क्वायर_वेव टोन के बढ़ते किनारे पर "0000" और "1111" के बीच 4 बिट संख्या को उलट देता है। टोन एक विशिष्ट पिच आवृत्ति है, इसलिए जब output_FSM दूसरे राज्य में संक्रमण करता है तो वर्ग_वेव एक अलग आवृत्ति के साथ एक तरंग उत्पन्न करता है। इस मॉड्यूल से 4-बिट आउटपुट fin_sel मॉड्यूल में जाता है, जहां तर्क यह निर्धारित करता है कि क्या यह बस PPS FSM से राज्य के आधार पर आउटपुट होगी।
इस स्क्वायर वेव जनरेटर का एक विकल्प साइन वेव पैदा कर रहा है। हालांकि यह सबसे बेहतर अंतिम स्वर उत्पन्न करेगा, इसे लागू करना काफी कठिन है, इसलिए हमने केवल एक वर्ग तरंग उत्पन्न करने का विकल्प चुना।
इनपुट
टोन (आउटपुट_सेलेक्ट से दोलन बिट)
आउटपुट
DAC_input (4-बिट बस को दोलन करना जो स्वर की समान आवृत्ति पर बदलता है)
अवयव
- पलटनेवाला
- डी रजिस्टर
चरण 14: 7-खंड प्रदर्शन
seg_display मॉड्यूल हमारे बेसिस बोर्ड पर 7-सेगमेंट डिस्प्ले को नियंत्रित करता है। मॉड्यूल के भीतर, दो प्रक्रियाएं होती हैं। पहली प्रक्रिया फ़्रीक को "चयन" स्थिति में या "प्ले" मोड में होने पर पिच को डिकोड करती है। "रोकें" मोड में, विराम चिह्न दिखाने के लिए मॉड्यूल डीकोड करता है। वीएचडीएल कोड को देखते हुए, आप देख सकते हैं कि बाइनरी डिकोडर वास्तव में इनपुट को दो अलग-अलग संकेतों, कैथोड 1 और कैथोड 2 में डिकोड करता है। कैथोड 1 प्रदर्शित होने वाली पिच के अनुरूप अक्षर का प्रतिनिधित्व करता है, और कैथोड 2 फ्लैट प्रतीक (बी) का प्रतिनिधित्व करता है यदि कोई है। इसका कारण seg_display मॉड्यूल द्वारा की गई दूसरी प्रक्रिया से संबंधित है।
एक बेसिस3 बोर्ड पर, खंड प्रदर्शन में सामान्य कैथोड होते हैं। जबकि एनोड नियंत्रित करते हैं कि कौन सा अंक चालू है, कैथोड नियंत्रित करते हैं कि कौन से खंड चालू हैं। चूंकि डिस्प्ले में सामान्य कैथोड होते हैं, इसका मतलब है कि आप एक समय में केवल एक सेगमेंट का एक सेट प्रदर्शित कर सकते हैं। यह इस परियोजना के लिए एक समस्या है क्योंकि हम पहले अंक पर एक अक्षर प्रदर्शित करना चाहते हैं और यदि आवश्यक हो तो फ्लैट प्रतीक एक ही समय में प्रदर्शित करना चाहते हैं। अब 7seg क्लॉक सिग्नल याद है? इस समस्या को हल करने के लिए, हम 7seg क्लॉक सिग्नल पर एनोड और कैथोड को आगे और पीछे बदलते हैं। क्योंकि क्लॉक सिग्नल 240 हर्ट्ज़ है और हम दो अंकों का उपयोग कर रहे हैं, प्रत्येक अंक 60 हर्ट्ज़ पर दोलन करेगा। मानवीय दृष्टि से, ऐसा लगेगा कि अंक बिल्कुल भी दोलन नहीं कर रहे हैं।
यह भी ध्यान दें कि बेसिस3 बोर्ड डिस्प्ले नकारात्मक तर्क का उपयोग करता है। इसका मतलब है कि अगर एनोड या कैथोड को '0' पर सेट किया जाता है, तो वह अंक या खंड चालू होगा, और इसके विपरीत।
इनपुट
- पिच (नोट के लिए बाइनरी नंबर, प्ले स्टेट में प्रयुक्त)
- फ़्रीक (फ़्रीक्वेंसी स्विच, चयन की स्थिति में उपयोग किया जाता है)
- P_state (पीपीएस एफएसएम से वर्तमान स्थिति)
- Clk_240Hz (Clk_div_7seg से घड़ी का संकेत, डबल 120 क्योंकि हम केवल बढ़ते किनारे का उपयोग कर रहे हैं)
आउटपुट
- कैथोड (बस जो डिस्प्ले पर सेगमेंट को नियंत्रित करती है, अंतिम आउटपुट)
- एनोड (बस जो डिस्प्ले पर अंकों को नियंत्रित करती है, अंतिम आउटपुट)
अवयव
- कुंडी
- मक्स
- डी रजिस्टर
चरण 15: अंतिम चयन
अंतिम चयन इस परियोजना में प्रयुक्त अंतिम मॉड्यूल है। एक और सरल मॉड्यूल, यह मॉड्यूल अंतिम आउटपुट को नियंत्रित करता है जो डीएसी में जाएगा। जब "चयन" या "रोकें" स्थिति में, मॉड्यूल एक स्थिर "0000" आउटपुट करने जा रहा है ताकि स्पीकर से कोई संगीत नहीं चलाया जाएगा। "प्ले" स्थिति में, मॉड्यूल स्क्वायर_वेव द्वारा निर्धारित 4-बिट्स को ऑसिलेटिंग आउटपुट करेगा।
इनपुट
- P_state (पीपीएस एफएसएम से वर्तमान स्थिति)
- DAC_input (वर्ग_वेव से दोलन करने वाला 4-बिट)
आउटपुट
डीएसी (प्ले स्टेट, फाइनल आउटपुट में DAC_input के बराबर)
अवयव
मक्स
चरण 16: बाहरी उपकरण: DAC
एक डिजिटल से एनालॉग कनवर्टर (DAC) एक असतत सिग्नल लेता है और इसे एक निरंतर सिग्नल में परिवर्तित करता है। हमारे डीएसी में चार बिट्स हैं और इसे एक समिंग एम्पलीफायर से बनाया गया है। आपूर्ति और फीडबैक लूप में प्रतिरोधों के अनुपात का उपयोग करके, हम एक ऐसी प्रणाली बनाने में सक्षम थे जो प्रत्येक शाखा के "सारांश" द्वारा 16 विभिन्न स्तरों पर आउटपुट करता है। बिट0, शीर्ष शाखा, कम से कम वजन वहन करती है और उस शाखा के उच्च प्रतिरोध के कारण उच्च होने पर सबसे छोटी क्षमता का योगदान करती है। जैसे-जैसे आप शाखाओं से नीचे जाते हैं वजन बढ़ता है। यदि आप बिट इनपुट का उपयोग करके बाइनरी अप और फिर बैक डाउन में गिनते हैं, तो आउटपुट वोल्टेज एक स्टेप वाइज साइन वेव की तरह दिखेगा। 4-बिट सिग्नल को स्थानांतरित करने के लिए डीएसी को इनपुट बोर्ड पर पीएमओडी में से एक से जुड़ा था।
DAC को मूल रूप से एक इलेक्ट्रिकल इंजीनियरिंग वर्ग के लिए असेंबल किया गया था और इसे हमारे द्वारा डिज़ाइन और सोल्डर किया गया था, किसी स्टोर से नहीं खरीदा गया था। ऊपर मुद्रित सर्किट बोर्ड बनाने के लिए डिज़ाइन फ़ाइल की एक छवि है।
चरण 17: बाहरी उपकरण: स्पीकर
इस प्रोजेक्ट के लिए, आप स्पीकर की एक बहुत अच्छी जोड़ी नहीं खरीदना चाहेंगे। जैसा कि आप बता सकते हैं, ध्वनि बहुत बुनियादी है। हमने जाकर बेस्ट बाय से कंप्यूटर स्पीकर का $8 सेट खरीदा। हेडफोन जैक के साथ कुछ भी ठीक काम करता है। मोनोटोन भी ठीक काम करता है। आप हेडफ़ोन का उपयोग भी कर सकते हैं, लेकिन आप उन्हें उड़ा सकते हैं!
डीएसी के आउटपुट को स्पीकर से जोड़ने के लिए, हमने जम्पर केबल का इस्तेमाल किया और फिर आउटपुट केबल को हेडफोन जैक की नोक पर और केबल को ग्राउंड से बेस तक रखा। हमने केबलों को पकड़ने के लिए बिजली के टेप का उपयोग करने की कोशिश की, लेकिन इससे बहुत व्यवधान हुआ। टेप की एक अलग शैली की कोशिश करने से यह समस्या हल हो सकती है।
हमारे वक्ताओं के लिए, हमने उन्हें उच्चतम सेटिंग में बदल दिया और एक शालीनता से जोर से शोर किया।
और यह FPGA बोर्ड से डिजिटल सीक्वेंसर बनाने का अंतिम चरण है! हमारे सभी वीएचडीएल कोड को डाउनलोड करने के लिए अगले दो अनुभागों में जाएं और सीक्वेंसर को काम करते हुए देखें।
चरण 18: वीडियो डेमो
यह वीडियो काम कर रहे प्रोजेक्ट के अंतिम संस्करण को दिखाता है, जिसमें 4 अलग-अलग पिचों पर स्विच असाइन करने की प्रक्रिया और संबंधित नोट्स बजाने वाले स्पीकर शामिल हैं।
चरण 19: वीएचडीएल कोड
सीक्वेंसर के निर्माण के दौरान उपयोग की जाने वाली बाधा और सिम फाइलों सहित पूरे प्रोजेक्ट के लिए कोड यहां दिया गया है। ध्यान दें कि अप्रयुक्त डिज़ाइन फ़ाइलें आर्किटेक्चर में ऐसा कहती हैं।
सिफारिश की:
Arduino मिडी रिदम सेक्शन सीक्वेंसर: 8 स्टेप्स (चित्रों के साथ)
Arduino MIDI रिदम सेक्शन सीक्वेंसर: एक अच्छी सॉफ्टवेयर ड्रम मशीन होना आज आसान और सस्ता है लेकिन माउस का उपयोग करना मेरे लिए मजेदार है। यही कारण है कि मुझे एहसास हुआ कि शुरू में एक शुद्ध 64 कदम हार्डवेयर मिडी ड्रम सीक्वेंसर के रूप में क्या इरादा था जो 12 अलग-अलग ड्रम तत्वों को ट्रिगर करने में सक्षम था
सिंपल सीक्वेंसर: 16 स्टेप्स (चित्रों के साथ)
सिंपल सीक्वेंसर: अच्छा संगीत बनाने की कुंजी में से एक है नासमझ दोहराव। यही वह है जो साधारण सीक्वेंसर महान है। यह आठ नोटों के क्रम में बार-बार वही काम करता है। आप नोट की आवृत्ति, नोट की अवधि और
अटारी पंक कंसोल विद ए बेबी 8 स्टेप सीक्वेंसर: 7 स्टेप्स (चित्रों के साथ)
बेबी 8 स्टेप सीक्वेंसर के साथ अटारी पंक कंसोल: यह इंटरमीडिएट बिल्ड ऑल-इन-वन अटारी पंक कंसोल और बेबी 8 स्टेप सीक्वेंसर है जिसे आप बैंटम टूल्स डेस्कटॉप पीसीबी मिलिंग मशीन पर मिल सकते हैं। यह दो सर्किट बोर्डों से बना है: एक यूजर इंटरफेस (यूआई) बोर्ड है और दूसरा एक यूटिलिटी बो
सिक्लोप ३डी स्कैनर माई वे स्टेप बाय स्टेप: १६ स्टेप्स (चित्रों के साथ)
सिक्लोप ३डी स्कैनर माई वे स्टेप बाय स्टेप: हाय सब, मैं प्रसिद्ध सिक्लोप ३डी स्कैनर का एहसास करने जा रहा हूं। मूल परियोजना पर अच्छी तरह से समझाया गया सभी चरण मौजूद नहीं हैं। मैंने प्रक्रिया को सरल बनाने के लिए कुछ सुधार किए हैं, पहले मैं आधार को प्रिंट करता हूं, और पीसीबी को स्थिर करता हूं, लेकिन आगे बढ़ता हूं
DIY Arduino रोबोटिक आर्म, स्टेप बाय स्टेप: 9 स्टेप
DIY Arduino रोबोटिक आर्म, स्टेप बाय स्टेप: ये ट्यूटोरियल आपको सिखाता है कि आप अपने आप से एक रोबोट आर्म कैसे बना सकते हैं