विज्ञापन

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

यह पिछले ट्यूटोरियल से कठिनाई में एक महत्वपूर्ण छलांग है, और मैं दृढ़ता से सुझाव देता हूं कि आपके पास ए पिछली सामग्री पर बहुत अच्छी समझ (इस लेख के अंत में लिंक), साथ ही साथ समझ बाइनरी की मूल बातें बाइनरी क्या है? [प्रौद्योगिकी समझाया]यह देखते हुए कि बाइनरी कंप्यूटर के अस्तित्व के लिए पूरी तरह से मौलिक है, यह अजीब लगता है कि हमने पहले कभी भी इस विषय से निपटा नहीं है - इसलिए आज मैंने सोचा कि मैं बाइनरी का संक्षिप्त विवरण देता हूं ... अधिक पढ़ें जो मैंने पिछली बार लिखा था।

एक पाली रजिस्टर क्या है?

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

instagram viewer

यदि यह आपको समझने में मदद करता है, तो आप डिजिटल आउटपुट के 'सरणी' के रूप में शिफ्ट रजिस्टर के बारे में सोच सकते हैं, लेकिन हम सामान्य डिजिटलराइट कमांड को छोड़ सकते हैं और उन्हें चालू करने के लिए बिट्स की एक श्रृंखला भेज सकते हैं बंद।

यह कैसे काम करता है?

हम जिस शिफ्ट रजिस्टर का उपयोग कर रहे हैं - 74HC595N को Oomlout स्टार्टर किट में शामिल किया गया है - उसे केवल 3 नियंत्रण पिन की आवश्यकता है। पहला एक घड़ी है - आपको इस बारे में बहुत अधिक चिंता नहीं है क्योंकि अरुडिनो धारावाहिक पुस्तकालयों पर नियंत्रण है यह - लेकिन एक घड़ी मूल रूप से विद्युत पल्स पर सिर्फ एक चालू / बंद है जो डेटा सिग्नल की गति निर्धारित करती है।

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

अंत में, डेटा पिन वह जगह है जहां हमने शिफ्ट रजिस्टर के आउटपुट के चालू / बंद राज्य का निर्धारण करने के लिए बिट्स के साथ वास्तविक सीरियल डेटा भेजा है।

पूरी प्रक्रिया 4 चरणों में वर्णित की जा सकती है:

  1. शिफ्ट रजिस्टर पर पहले आउटपुट पिन के लिए डेटा पिन को उच्च या निम्न पर सेट करें।
  2. रजिस्टर में डेटा को ’शिफ्ट’ करने के लिए घड़ी को पल्स करें।
  3. जब तक आप सभी आउटपुट पिन के लिए आवश्यक स्थिति निर्धारित नहीं करते हैं, तब तक डेटा सेट करना और घड़ी को स्पंदन करना जारी रखें।
  4. उत्पादन अनुक्रम को सक्रिय करने के लिए कुंडी पिन को पल्स करें।

कार्यान्वयन

आपको इस परियोजना के लिए निम्नलिखित घटकों की आवश्यकता है:

  • 7HC595N शिफ्ट रजिस्टर चिप
  • 8 एल ई डी और उपयुक्त प्रतिरोधक, या जो भी आप आउटपुट करना चाहते हैं
  • सामान्य ब्रेडबोर्ड, कनेक्टर्स और एक मूल Arduino

यदि आपके पास Oomlout स्टार्टर किट है, तो आप यहाँ से ब्रेडबोर्ड लेआउट डाउनलोड कर सकते हैं।

यहां देखें विधानसभा का वीडियो:

बोर्ड लेआउट:

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

और मेरे इकट्ठे संस्करण:

Arduino प्रोग्रामिंग - शिफ्ट रजिस्टरों के साथ खेलना (a.k.a यहां तक ​​कि अधिक एल ई डी) इकट्ठे शिफ्ट रजिस्टर ट्यूटोरियल

मैंने ऊल्मआउट द्वारा प्रदान किए गए मूल कोड को संशोधित किया है, लेकिन यदि आप इसके बजाय कोशिश करना चाहते हैं, तो इसे यहां पूर्ण रूप से डाउनलोड किया जा सकता है। कोड की व्याख्या शामिल है, इसलिए नीचे या नीचे से पूरी चीज़ को कॉपी और पेस्ट करें pastebin कोड का स्पष्टीकरण पढ़ने के लिए।

/ * * | के आधार पर शिफ्ट रजिस्टर ट्यूटोरियल, | * Arduino प्रयोग किट CIRC-05 | *।.: 8 अधिक एल ई डी:। (74HC595 शिफ्ट रजिस्टर) | * * | जेम्स द्वारा संशोधित @ MakeUseOf.com | * * / // पिन परिभाषाएँ। // 7HC595N में तीन पिन हैं। int data = 2; // जहां हम बिट्स को नियंत्रित करने के लिए आउटपुट int int = 3 भेजते हैं; // डेटा को सिंक में रखता है। int कुंडी = 4; // उत्पादन अनुक्रम शून्य सेटअप को सक्रिय करने के लिए शिफ्ट रजिस्टर बताता है () {1. पिनमोड (डेटा, डेटा) को आउटपुट करने के लिए तीन नियंत्रण पिन सेट करें; पिनमोड (घड़ी, OUTPUT); पिनमोड (कुंडी, बाहर); सीरियल.बेगिन (9600); // इसलिए हम सीरियल मॉनिटर पर डिबग संदेश भेज सकते हैं। } शून्य लूप () {outputBytes (); // हमारा बेसिक आउटपुट जो यह बताता है कि शिफ्ट रजिस्टर कैसे काम करता है, यह दिखाने के लिए 8-बिट्स लिखते हैं। //outputIntegers(); // बाइट्स के बजाय डेटा के रूप में एक पूर्णांक मूल्य भेजता है, प्रभावी रूप से बाइनरी में गिना जाता है। } void outputIntegers () {for (int i = 0; i <256; i ++) {digitalWrite (latch, LOW); सिरियल.प्रिंटल (आई); // डिबग, सीरियल मॉनिटर शिफ्ट में आउटपुट भेज रहा है (डेटा, घड़ी, MSBFIRST, i); digitalWrite (कुंडी, उच्च); देरी (100); }} शून्य आउटपुटबाइट्स () {/ * बाइट्स, या 8-बिट्स, एक बी द्वारा प्रतिनिधित्व किया जाता है उसके बाद 8 0 या 1 एस। इस उदाहरण में, इसे एक सरणी की तरह समझें जिसका उपयोग हम 8 एल ई डी को नियंत्रित करने के लिए करेंगे। यहां मैंने बाइट मान को 00000001 * / बाइट डेटावैल्यू = B00000001 के रूप में शुरू किया है; // इसे बदलने के लिए शुरुआती पैटर्न को समायोजित करें * * लूप के लिए, हम शिफ्ट कम का उपयोग करके शुरू करते हैं, शिफ्ट Arduino फ़ंक्शन का उपयोग करते हुए शिफ्ट रजिस्टर से बात करें, इसे हमारी बाइट भेजते हुए डेटावैल्यूज़ को एलईड की स्थिति का प्रतिनिधित्व करते हुए फिर कुंडी को अंदर खींचने के लिए उच्च खींचें जगह। अंत में, हम बिट्स को बाईं ओर एक स्थान पर स्थानांतरित करते हैं, जिसका अर्थ है कि अगली पुनरावृत्ति श्रृंखला में अगले एलईडी को चालू करेगी। भेजे जा रहे सटीक बाइनरी मान को देखने के लिए, सीरियल मॉनिटर की जांच करें। * (के लिए (int i = 0; i <8; i ++) {digitalWrite (latch, LOW); Serial.println (dataValues, BIN); // डिबग, सीरियल मॉनिटर शिफ्ट में आउटपुट भेज रहा है (डेटा, घड़ी, MSBFIRST, dataValues); digitalWrite (कुंडी, उच्च); dataValues ​​= dataValues ​​<< 1; // बिट्स को बाईं ओर एक स्थान पर शिफ्ट करें - दिशा विलंब (100) को समायोजित करने के लिए >> के लिए बदलें; } }

बिट-शिफ्टिंग (आउटपुटबाइट्स फंक्शन)

पहले लूप उदाहरण में - outputBytes () - कोड 8-बिट अनुक्रम (एक बाइट) का उपयोग करता है, जो तब शिफ्ट करता है ताकि लूप के प्रत्येक पुनरावृत्ति को छोड़ दिया जाए। यह नोट करना महत्वपूर्ण है कि यदि आप संभव से अधिक शिफ्ट करते हैं, तो बिट बस खो जाता है।

बिट-शिफ्टिंग << या >> का उपयोग करके किया जाता है और उसके बाद आप कितने बिट्स को शिफ्ट करना चाहते हैं।

निम्नलिखित उदाहरण देखें और सुनिश्चित करें कि आप समझ रहे हैं कि क्या हो रहा है:

बाइट वैल = B00011010। वैल = वैल << 3 // B11010000। val = val << 2 // B01000000, हमने उन अन्य बिट्स को खो दिया! वैल = वैल >> 5 // B00000010। 

बदले में इंटेगर भेजना (आउटपुटइंटरगेन्स फंक्शन)

यदि आप बाइट के बजाय शिफ्ट रजिस्टर में एक पूरी संख्या भेजते हैं, तो यह संख्या को बाइनरी बाइट अनुक्रम में बदल देगा। इस फ़ंक्शन में (लूप में असहजता और प्रभाव देखने के लिए अपलोड करें), हमारे पास एक लूप है जो 0-255 से गिना जाता है (उच्चतम पूर्णांक जिसे हम एक बाइट के साथ प्रतिनिधित्व कर सकते हैं), और इसके बजाय भेजता है। यह मूल रूप से बाइनरी में गिना जाता है, इसलिए अनुक्रम थोड़ा यादृच्छिक लग सकता है जब तक कि आपके एल ई डी को एक लंबी लाइन में नहीं रखा जाता है।

उदाहरण के लिए, यदि आप बाइनरी समझाया गया लेख पढ़ते हैं, तो आप जानते होंगे कि संख्या 44 को 00101100 के रूप में दर्शाया जाएगा, इसलिए अनुक्रम में 3,5,6 एलईडी उस बिंदु पर प्रकाश में आने वाली हैं।

Arduino प्रोग्रामिंग - शिफ्ट रजिस्टरों के साथ खेलना (a.k.a यहां तक ​​कि अधिक एल ई डी) बाइनरी 44

एक शिफ्ट रजिस्टर की तुलना में डेज़ी चेनिंग

शिफ्ट रजिस्टरों के बारे में उल्लेखनीय बात यह है कि यदि उन्हें 8-बिट्स से अधिक जानकारी दी जाती है (या हालांकि उनकी रजिस्ट्री बड़ी है), तो वे अन्य अतिरिक्त बिट्स को फिर से बाहर कर देंगे। इसका मतलब है कि आप उनमें से एक श्रृंखला को एक साथ जोड़ सकते हैं, बिट्स की एक लंबी श्रृंखला में धक्का दे सकते हैं, और इसे प्रत्येक रजिस्टर को अलग से वितरित किया है, सभी आपके हिस्से पर कोई अतिरिक्त कोडिंग नहीं है।

यद्यपि हम यहां प्रक्रिया या योजनाबद्धता का विवरण नहीं दे रहे हैं, यदि आपके पास एक से अधिक शिफ्ट रजिस्टर हैं तो आप यहां आधिकारिक Arduino साइट से परियोजना का प्रयास कर सकते हैं।

श्रृंखला के अन्य लेख:

  • Arduino क्या है और आप इसके साथ क्या कर सकते हैं Arduino क्या है और आप इसके साथ क्या कर सकते हैं?Arduino एक उल्लेखनीय छोटा इलेक्ट्रॉनिक्स उपकरण है, लेकिन यदि आपने पहले कभी एक का उपयोग नहीं किया है, तो वास्तव में वे क्या हैं, और आप एक के साथ क्या कर सकते हैं? अधिक पढ़ें ?
  • एक Arduino स्टार्टर किट क्या है और इसमें क्या होता है? एक Arduino स्टार्टर किट में क्या शामिल है? [MakeUseOf बताते हैं]मैंने पहले भी MakeUseOf पर यहां Arduino ओपन-सोर्स हार्डवेयर पेश किया है, लेकिन आपको इससे बाहर कुछ बनाने और वास्तव में शुरू करने के लिए वास्तविक Arduino से अधिक की आवश्यकता होगी। Arduino "स्टार्टर किट" हैं ... अधिक पढ़ें
  • अपने स्टार्टर किट के साथ खरीदने के लिए अधिक शांत घटक अपने Arduino परियोजनाओं के लिए 8 और अधिक शांत घटकतो, आप एक Arduino स्टार्टर किट प्राप्त करने के बारे में सोच रहे हैं, लेकिन सोच रहे हैं कि क्या कुछ बुनियादी एल ई डी और प्रतिरोधक आपको सप्ताहांत के लिए व्यस्त रखने के लिए पर्याप्त होने जा रहे हैं? शायद ऩही। यहाँ एक और 8 हैं ... अधिक पढ़ें
  • अपने Arduino स्टार्टर किट के साथ शुरू हो रही है? ड्राइवर और बोर्ड और पोर्ट की स्थापना अपने Arduino स्टार्टर किट के साथ शुरू करना - ड्राइवरों को स्थापित करना और बोर्ड और पोर्ट को स्थापित करनातो, आपने अपने आप को एक Arduino स्टार्टर किट खरीदा है, और संभवतः कुछ अन्य यादृच्छिक शांत घटक - अब क्या? कैसे आप वास्तव में इस Arduino बात प्रोग्रामिंग के साथ शुरू करते हैं? आप इसे कैसे सेट करते हैं ... अधिक पढ़ें
  • फ्रिट्ज़िंग, सर्किट आरेखों के लिए एक मुफ़्त उपकरण फ्रिट्ज़िंग - इलेक्ट्रॉनिक्स प्रोजेक्ट्स [क्रास प्लेटफ़ॉर्म] से स्केचिंग के लिए अंतिम उपकरणअल्कोपॉप की तरह लगने के बावजूद, फ्रिट्ज़िंग वास्तव में मुफ्त सॉफ्टवेयर का एक अविश्वसनीय बिट है जिसे आप बनाने के लिए उपयोग कर सकते हैं रैपिड-प्रोटोटाइपिंग इलेक्ट्रॉनिक्स बोर्ड जैसे शानदार ओपन-सोर्स के साथ उपयोग के लिए सर्किट और कंपोनेंट आरेख Arduino ... अधिक पढ़ें
  • एक Arduino ऐप और उदाहरण पलक कार्यक्रम की संरचना में एक करीब देखो Arduino के साथ पहला कदम: सर्किट बोर्ड और एक कार्यक्रम की संरचना में एक करीब देखोपिछली बार मैंने आपको मैक या विंडोज के साथ काम करने के लिए अपना Arduino सेट करने के लिए छोड़ दिया था, और एक साधारण परीक्षण ऐप अपलोड किया था जिसने ऑन-बोर्ड एलईडी को ब्लिंक किया था। आज मैं कोड समझाने जा रहा हूँ ... अधिक पढ़ें
  • Arduino क्रिसमस ट्री रोशनी परियोजना एक Arduino परियोजना: कैसे आकर्षक क्रिसमस रोशनी गहने बनाने के लिएयह हमारे सीखने के Arduino श्रृंखला का अगला भाग है, और इस बार हम विभिन्न चमकते दृश्यों के साथ थोड़ा क्रिसमस ट्री आभूषण बनाने के लिए Arrays के बारे में सीखेंगे और उनका उपयोग करेंगे। यह एक होगा ... अधिक पढ़ें (सरणियों के बारे में सीखते हुए AKA)
  • बाइनरी क्या है? बाइनरी क्या है? [प्रौद्योगिकी समझाया]यह देखते हुए कि बाइनरी कंप्यूटर के अस्तित्व के लिए पूरी तरह से मौलिक है, यह अजीब लगता है कि हमने पहले कभी भी इस विषय से निपटा नहीं है - इसलिए आज मैंने सोचा कि मैं बाइनरी का संक्षिप्त विवरण देता हूं ... अधिक पढ़ें

आज तक हम शिफ्ट रजिस्टर के साथ चलते हैं, क्योंकि मुझे लगता है कि हमने बहुत कुछ कवर किया है। हमेशा की तरह, मैं आपको कोड के साथ खेलने और समायोजित करने के लिए प्रोत्साहित करता हूं, और किसी भी प्रश्न को पूछने के लिए स्वतंत्र महसूस कर सकता हूं या आपकी भयानक शिफ्ट रजिस्टर आधारित परियोजना का लिंक भी साझा कर सकता हूं।

जेम्स के पास आर्टिफिशियल इंटेलिजेंस में बीएससी है, और कॉम्पिटिया ए + और नेटवर्क + प्रमाणित है। वह MakeUseOf के प्रमुख डेवलपर हैं, और अपना खाली समय वीआर पेंटबॉल और बोर्डगेम खेलने में बिताते हैं। वह पीसी का निर्माण कर रहा है क्योंकि वह एक बच्चा था।