वहाँ arduino पर 14 से अधिक उत्पादन पिन करने के लिए एक रास्ता है?


52

क्या Arduino पर 14 से अधिक आउटपुट पिन होना संभव है, मैं एक ऐसी परियोजना पर काम कर रहा हूं जिसमें मुझे व्यक्तिगत रूप से कई एलईडी को प्रकाश में लाने की आवश्यकता है। मेरे पास केवल एक Arduino Uno है, और मैं एक मेगा प्राप्त नहीं करना चाहता।


विस्तार की भावना में, क्या I2C Arduino के साथ भी एक विकल्प है?
क्रिस ओ

@ क्रिस आपको I2C से क्या मतलब है? क्योंकि जिसे मैं शिफ्ट रजिस्टर समझता हूं, उसे I2C माना जाएगा।
JVarhol

ओह मुझे मेरे सवाल का जवाब दो ;-) यहाँ इस बस मानक पर एक विकिपीडिया लेख है । और मुझे I2C के लिए वायर लीब से कुछ समर्थन मिला , ताकि आप अपने यूनो को I2C श्रृंखला कनेक्ट कर सकें।
क्रिस ओ

@JVarhol काफी नहीं। I2C, उर्फ ​​TWI एक 2-वायर इंटरफ़ेस है जबकि SPI को 3-वायर इंटरफ़ेस माना जा सकता है।
क्लॉस-डाइटर वारज़ेखा

1
@JVarhol क्या आपने अपनी परियोजना के लिए पहले से ही एक समाधान चुना है? यदि हाँ, तो यह आपके प्रश्न को संपादित करने और उस उत्तर को स्वीकार करने के लिए उपयोगी होगा जो आपके समाधान से मेल खाता है (या निकटतम है)।
jfpoilpret

जवाबों:


50

Arduino पर उपलब्ध आउटपुट पिन के सेट का विस्तार करने का एक सामान्य तरीका 74HC595 IC ( डेटाशीट से लिंक ) जैसी शिफ्ट रजिस्टर का उपयोग करना है

इन चिप्स को नियंत्रित करने के लिए आपको 3 पिन चाहिए:

  1. घड़ी
  2. कुंडी
  3. डेटा

किसी प्रोग्राम में, आप शिफ्ट रजिस्टर में शिफ्टऑट () कमांड का उपयोग करके एक बार में डेटा को एक बिट पर पास करते हैं , जैसे:

shiftOut(dataPin, clockPin, data); 

उस कमांड के साथ, आप 5 आउटपुट IC पर 8 बिट्स में से प्रत्येक को 8 बिट्स के साथ dataवेरिएबल में सेट करते हैं।

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

परिणामी सर्किट (एक 595 का उपयोग करके) इस तरह दिखेगा:

595 शिफ्ट रजिस्टर का उपयोग करते हुए सर्किट

उपरोक्त आंकड़ा इस codeproject.com वेबपेज से लिया गया था :

595 आउटपुट को स्थिर रखने के लिए लैच पिन का उपयोग किया जाता है, जब आप डेटा को उसमें शिफ्ट कर रहे हों, जैसे:

digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, data); 
digitalWrite(latchPin, HIGH);

1
Thx, शिफ़्ट रजिस्टर कैसे काम करता है, इसे शामिल करना भूल गया। मैंने योजना बनाई थी, लेकिन मुझे अपने कॉम्प से दूर चलना पड़ा और जब मैं वापस आया तो यह मेरे दिमाग से फिसल गया था। :)
JVarhol

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

2
साथ ही यह प्रोग्रामिंग को आसान बनाता है, आपको घड़ी को पल्स में शिफ्ट करने और फिर लैच को सक्रिय करने की आवश्यकता नहीं है। मैं काफी कुछ समय के लिए ढाल के बारे में जानता हूं और मुझे लगता है कि यह शुरुआती लोगों के लिए एकदम सही है। सबसे अच्छी बात यह है, क्योंकि कोड ओपनसोर्स है आप कोड का उपयोग कर सकते हैं भले ही आप वास्तव में ढाल का उपयोग नहीं कर रहे हों लेकिन आपके पास अपना बोर्ड हो या ब्रेडबोर्ड का उपयोग कर रहे हों।
जवरहॉल

1
यह मत भूलो कि आप उन्हें लाइन में (सैद्धांतिक रूप से) अनिश्चित काल तक जोड़ सकते हैं, इसलिए 2 8-बिट रजिस्टर एक 16-बिट बन सकते हैं।
स्कॉट एम।

धन्यवाद! यहाँ मामले में अद्भुत codeproject वर्णन करने के लिए एक संग्रह कड़ी है लिंक कभी नीचे चला जाता है archive.fo/1uvPE
Akhmed

27

वहाँ दो तरीके से आप एक arduino से अधिक पिन प्राप्त कर सकते हैं।

पहला तरीका एनालॉग पिंस को डिजिटल आउटपुट पिंस के रूप में उपयोग करना है, जो वास्तव में करना आसान है। आपको बस A0-A5 को पिन 14,15,16,17,18,19 के रूप में संदर्भित करना होगा। उदाहरण के लिए उच्च पिन को लिखने के लिए A0 बस digitalWrite (14, उच्च) का उपयोग करें।

Arduino से अधिक पिन प्राप्त करने का दूसरा तरीका शिफ्ट रजिस्टर का उपयोग करना है। यह करने के लिए मैं ईज़ी- एक्सपैंडर शील्ड का उपयोग करने की सलाह देता हूं, जो आपको ईज़ी- एक्सपैंडर लाइब्रेरी को आयात करते समय डिजिटलविराइट ([20-35], हाई) का उपयोग करने की अनुमति देता है। यह ढाल हालांकि केवल पिंस को केवल आउटपुट के रूप में उपयोग करने की अनुमति देता है और शिफ्ट रजिस्टर को नियंत्रित करने के लिए पिन 8,12 और 13 का उपयोग करता है।

बड़ी बात यह है, कि आप बिना किसी समस्या के, एक साथ उपरोक्त दोनों विधियों का उपयोग कर सकते हैं।


3
Arduino के संदर्भ के अनुसार, आप वास्तव में A0- A5संख्या 14-19 का उपयोग करने के बजाय सीधे पहचानकर्ताओं का उपयोग कर सकते हैं । उदाहरण के लिए, digitalWrite(A0, HIGH)
पीटर ब्लूमफील्ड

3
@ पीटरआर.ब्लूमफील्ड दोनों सही हैं, हालांकि मैं सरलता और पढ़ने में आसान के लिए A0-A5 की सलाह देता हूं। एलईडी ब्लिंकिंग के साथ कोई बड़ी बात नहीं है लेकिन जब आपके पास बड़े प्रोजेक्ट होते हैं तो छोटी आदतें जुड़ जाती हैं।
बेनामी पेंग्विन

2
वास्तव में, जबकि दोनों को संयुक्त राष्ट्र संघ और संगत बोर्डों पर काम मिलेगा, पहले से हमेशा सही भौतिक (एनालॉग) पिन के लिए मैप करने की digitalWrite(A0)तुलना में अधिक सही है digitalWrite(14)। एक अलग बोर्ड पर, pin 14वास्तव में नहीं हो सकता है A0, उदाहरण के pin 14लिए MEGA Serial3 है TXऔर आपके द्वारा किए जाने वाले एनालॉग पिन को प्रभावित नहीं करेगा। यानी, यदि digitalWriteएक एनालॉग पिन पर उपयोग किया जाता है , तो A0- A5संदर्भ का उपयोग करें ।
मड़िवाड़

18

यदि आप एल ई डी ड्राइव करना चाहते हैं, तो आप एक MAX7219 का उपयोग भी कर सकते हैं जो 64 एल ई डी ड्राइव कर सकता है, बिना अतिरिक्त सर्किटरी (सिग्नल को प्रवर्धित करने के लिए ट्रांजिस्टर की कोई आवश्यकता नहीं)।

MAX7219 ड्राइविंग के लिए Arduino पर केवल 3 आउटपुट पिन की आवश्यकता होती है। इसके अलावा, आप इसके लिए कुछ Arduino लाइब्रेरी पा सकते हैं ।

यदि आप 64 से अधिक एल ई डी बिजली की जरूरत है, तो आप उनमें से कई को भी चेन कर सकते हैं।

मैंने इसे कई 7-सेगमेंट के एलईडी डिस्प्ले के लिए सफलतापूर्वक उपयोग किया है।

नकारात्मक पक्ष: यह महंगा है (लगभग $ 10)।


मैं MAX7219 के बारे में भूल गया, पोस्ट करने के लिए धन्यवाद!
JVarhol

384 एलईडी ... वाह! प्लस यूएसबी पिन के लिए दो पिन। आश्चर्य है कि आप किस तरह की कष्टप्रद ट्रिंकेट बना सकते हैं (पर्याप्त बिजली की आपूर्ति के साथ)।
अनाम पेंगुइन

17

आप चार्लीप्लेक्सिंग का उपयोग कर सकते हैं । इस तकनीक से आप n*(n-1)एलईडी को सीधे पिन से चला सकते हैं । तो 3 पिन के साथ आप 6 एलईडी, 4 पिन - 12 एलईडी, 5 पिन - 20 एलईडी और इतने पर ड्राइव कर सकते हैं।

उदाहरण के लिए:

3 पिन पर छह एलईडी

PINS        LEDS
0 1 2   1 2 3 4 5 6
0 0 0   0 0 0 0 0 0
0 1 Z   1 0 0 0 0 0
1 0 Z   0 1 0 0 0 0
Z 0 1   0 0 1 0 0 0
Z 1 0   0 0 0 1 0 0
0 Z 1   0 0 0 0 1 0
1 Z 0   0 0 0 0 0 1
0 0 1   0 0 1 0 1 0
0 1 0   1 0 0 1 0 0
0 1 1   1 0 0 0 1 0
1 0 0   0 1 0 0 0 1
1 0 1   0 1 1 0 0 0
1 1 0   0 0 0 1 0 1
1 1 1   0 0 0 0 0 0

यहाँ छवि विवरण दर्ज करें

आप यहां एक बेहतर ट्यूटोरियल देख सकते हैं ।


ध्यान देने वाली एक बात यह है कि यह तकनीक आपको अधिक लीड को नियंत्रित करने की अनुमति देती है, लेकिन एक साथ जरूरी नहीं है।
kontur

1
@kontur हाँ, आप सही हैं। लेकिन दृष्टि की दृढ़ता के संदर्भ में आप विचार कर सकते हैं कि वे हैं। प्रश्न में ऐसा विवरण नहीं है।
डैनियल ग्रिलो

चार्लीप्लेक्सिंग शिफ्ट रजिस्टर का उपयोग किए बिना मल्टीप्लेक्स एल ई डी का एकमात्र तरीका नहीं है।
linhartr22

1
@ linhartr22 मैंने कभी नहीं कहा कि यह एकमात्र तरीका है। चार्लीप्लक्सिंग इस समस्या का एक सामान्य समाधान है। और मेरा जवाब 7 वां था। इसलिए अन्य संभावनाएं पहले ही दिखाई दे चुकी थीं।
डैनियल ग्रिलो

@DanielGrillo मुझे और अधिक विशिष्ट होना चाहिए था और बताया गया था कि कैसे कॉलम और रो मल्टीप्लेक्सिंग, जो आमतौर पर एलईडी क्यूब्स पर उपयोग किया जाता है, को शिफ्ट रजिस्टर के बिना और चार्लीप्लेक्सिंग की सीमाओं के बिना किया जा सकता है। एक 4x4 पंक्ति कॉलम मैट्रिक्स 8 I / O लाइनों के साथ व्यक्तिगत रूप से 16 एलईड को नियंत्रित कर सकता है। एक 4x4x4 क्यूब व्यक्तिगत रूप से 12 I / O लाइनों के साथ 64 एलईड को नियंत्रित कर सकता है (डिजिटल लाइनों के रूप में एनालॉग A0-A5 का उपयोग करके एक Uno पर भी संभव है)।
linhartr22

13

मैं 2 सी (तार)

पोर्ट-विस्तारक जैसे अन्य उपकरणों से कनेक्ट करने के लिए आप I 2 C प्रोटोकॉल (वायर लाइब्रेरी) का उपयोग कर सकते हैं । उदाहरण के लिए, MCP23017।

मैंने एलसीडी बोर्ड से कनेक्ट करने के लिए उन चिप्स में से एक का उपयोग किया। MCP23017 में 16 पोर्ट हैं, जिन्हें इनपुट या आउटपुट के रूप में कॉन्फ़िगर किया जा सकता है। इनपुट के रूप में वे वांछित होने पर व्यवधान उत्पन्न कर सकते हैं।

उन 16 में से 13 को एलसीडी से जोड़ने का उदाहरण:

MCP23017 एलसीडी स्क्रीन से जुड़ा है

अब हम Arduino को केवल 2 तारों (SDA / SCL) प्लस पावर और ग्राउंड का उपयोग करके कनेक्ट करते हैं:

MCP23017 Arduino से जुड़ा है


कुछ तीसरे पक्ष के निर्माताओं ने उन पर 4 x MCP23017 के साथ बोर्ड बनाए हैं, इससे आपको 64 इनपुट / आउटपुट मिलते हैं:

सेंटीपीड बोर्ड


मल्टीप्लेक्सर

आप 8 पिन / 8 पोर्ट (जैसे एक समय में केवल एक) से कनेक्ट करने के लिए 74HC4051 (8 पोर्ट) या 74HC4067 (16 पोर्ट) जैसे एनालॉग मल्टीप्लेक्स का उपयोग कर सकते हैं:

74HC4051 मल्टीप्लेक्स

ये द्वि-दिशात्मक हैं, इसलिए इनपुट या आउटपुट विस्तारक के रूप में उपयोग किया जा सकता है।


74HC595 के साथ एसपीआई

एसपीआई का उपयोग करके आप तेजी से सीरियल डेटा को एक शिफ्ट रजिस्टर में भेज सकते हैं, जैसे कि 74HC595। ये एक साथ डेज़ी जंजीर हो सकते हैं। इस उदाहरण में मैं केवल 3 I / O पिन (MOSI / MISO / SCK) प्लस पावर और ग्राउंड के साथ 32 एल ई डी को नियंत्रित कर रहा हूं।

32 एलईडी ड्राइविंग 74HC595


मैंने एक वाणिज्यिक एलईडी साइन के अंदर पाया कि 72 एलईडी 74HC595 चिप्स द्वारा संचालित थे।

स्क्रॉलिंग एलईडी साइन

इसमें स्तंभों को चलाने वाले 9 चिप्स (9 x 8 = 72 एल ई डी) थे और एक चिप में मल्टीप्लेक्स कॉन्फ़िगरेशन में पंक्तियों को चलाते हुए।


MAX7219 के साथ एसपीआई

यदि आप केवल एलईडी ड्राइव करना चाहते हैं तो आप आमतौर पर उन्हें मल्टीप्लेक्स कर सकते हैं। MAX7219 सरल करता है कि एलईडी मैट्रिक्स को ड्राइव करने के लिए डिज़ाइन किया गया है, उदाहरण के लिए 7-सेगमेंट डिस्प्ले:

7-सेगमेंट डिस्प्ले के साथ MAX7219

या 64-एलईडी मैट्रिक्स:

64-एलईडी मैट्रिक्स के साथ MAX7219

उदाहरण के लिए, दोनों मामलों में ये एक साथ व्यवस्थित किए जा सकते हैं:

MAX7219 डेज़ी-चेन

उन सभी उदाहरणों में केवल Arduino (MOSI / MISO / SCK) प्लस पावर और ग्राउंड के 3 पिन का उपयोग किया जाता है।


MCP23S17 के साथ एसपीआई

पहले उल्लेख किए गए 16-पोर्ट पोर्ट विस्तारक (MCP23017) एक SPI संस्करण (MCP23S17) में भी आता है, जो लगभग समान चीजें करता है। यह एक और तार का उपयोग करता है, लेकिन तेज होगा।


अन्य प्रोटोकॉल

एलईडी स्ट्रिप्स (जैसे NeoPixel वाले) के अपने प्रोटोकॉल हैं। जोश लेविन द्वारा यूट्यूब पर एक पोस्ट किया गया था जहां लेखक ने एक ड्यूमिलानोव के साथ 1000 से अधिक पिक्सेल निकाले थे!


संदर्भ


12

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

16-बिट MCP23017 और MCP23S17 जैसे अधिक उन्नत पोर्ट विस्तारकों का उपयोग करने के लिए एक विकल्प है । ये क्रमशः I2C और SPI का समर्थन करते हैं, जिसका अर्थ है कि आप उन्हें कई अन्य उपकरणों (विभिन्न प्रकारों के संभावित) के साथ एक बस में रख सकते हैं। बस में प्रत्येक डिवाइस को व्यक्तिगत रूप से संबोधित किया जा सकता है, जिसका अर्थ है कि आपको उन सभी से बात करने के लिए केवल 2 या 3 पिन चाहिए। अपडेट की गति आम तौर पर बहुत तेज होती है, इसलिए आप Arduino प्रोजेक्ट में महत्वपूर्ण विलंबता (यानी ट्रांसमिशन देरी) का अनुभव करने की संभावना नहीं रखते हैं।

निम्न स्तर पर, I2C या SPI का उपयोग करना एक साधारण बदलाव रजिस्टर की तुलना में काफी अधिक जटिल है। हालाँकि, Arduino के लिए आपके लिए देखभाल करने के लिए लाइब्रेरी कोड है। इस प्रश्न को देखें, उदाहरण के लिए: मैं Arduino के साथ I2C उपकरणों का उपयोग कैसे करूं?


वाह, मैं उन, thx के बारे में कभी नहीं जानता था, उन्हें देखो!
JVarhol

क्या आप एलईडी को नियंत्रित करने के लिए I2C का उपयोग कर सकते हैं?
प्रो क्यू

1
@ProQ आप I2C का उपयोग करके सीधे मानक एल ई डी को नियंत्रित नहीं कर सकते। हालांकि, कुछ एलईडी उत्पादों को प्राप्त करना संभव है जिनके पास एक अंतर्निहित I2C ड्राइवर है। यह आमतौर पर बहुत सारे एलईडी जैसे उत्पादों के लिए होता है, जैसे कि स्ट्रिप्स या मैट्रीस।
पीटर ब्लूमफील्ड

8

रिकार्डो के जवाब के अलावा , शिफ्ट रजिस्टर पर विकिपीडिया क्या कहता है :

शिफ्ट रजिस्टर के सबसे सामान्य उपयोगों में से एक धारावाहिक और समानांतर इंटरफेस के बीच कनवर्ट करना है। [...] SIPO रजिस्टर आमतौर पर माइक्रोप्रोसेसरों के आउटपुट से जुड़े होते हैं, जब सामान्य प्रयोजन इनपुट / आउटपुट पिन उपलब्ध होने की तुलना में अधिक आवश्यक होते हैं। यह कई बाइनरी डिवाइसों को केवल दो या तीन पिनों का उपयोग करके नियंत्रित करने की अनुमति देता है, लेकिन समानांतर I / O की तुलना में धीमी है।

में लेख रिकार्डो जुड़ा हुआ आप शिफ्ट रजिस्टर के चित्र देख सकते हैं।

रजिस्टर रजिस्टर आरेख

यहाँ क्या होता है कि आप 8 पिनों का डेटा एक अनुक्रम में रखते हैं और प्रत्येक घड़ी के लिए शिफ्ट रजिस्टर टिक जाएगा शिफ्ट (प्रत्येक बैच से बाइनरी डेटा को अगले एक तक ले जाएं) जब तक कि यह "एक सर्कल" नहीं बनाता है, यानी पहला बिट अंतिम पिन पर आता है। शिफ्ट रजिस्टर में एक इनपुट भी होता है जहां आप शिफ्टिंग को चालू / बंद कर सकते हैं ताकि डेटा को स्थिति में स्थानांतरित करने के बाद स्थिति को रखा जा सके। एक साधारण प्रदर्शन के लिए निम्नलिखित एनीमेशन देखें।

शिफ्ट रजिस्टर एनीमेशन

यहां लाल बत्ती सीरियल इनपुट है और हरे लोग इस सरल SIPO शिफ्ट रजिस्टर में कुंडी की स्थिति दिखा रहे हैं । शिफ्टिंग के लिए स्थानांतरित किए गए डेटा को बंद करने के बाद आप पिन को पढ़ सकते हैं। इस उदाहरण में मैं बाहर स्थानांतरित हो गया 10101011

इन उदाहरणों से आप महसूस कर सकते हैं कि सीरियल ट्रांसफर समानांतर से धीमा होगा, क्योंकि आपको बिट्स को उनके स्थान पर शिफ्ट करने के लिए शिफ्ट रजिस्टर का इंतजार करना होगा। जितनी घड़ी आप लोड करना चाहते हैं उतनी ही घड़ी की टिक टिक की प्रतीक्षा करनी होगी। यह कई कारणों में से एक है कि आप उन्हें अनिश्चित काल तक श्रृंखला क्यों नहीं दे सकते, क्योंकि लोडिंग हमेशा के लिए ले जाएगी।


1
अतिरिक्त जानकारी के लिए और सुंदर एनिमेटेड जीआईएफ और इसके प्रभाव के लिए +1! आपको GIF कहां से मिली? या आपने इसे बनाया?
रिकार्डो

1
@ रिकार्डो मैंने डिजिटल वर्क्स के साथ सर्किट बनाया, फिर प्रिंट स्क्रीन, एडिट, जिफ एनिमेटर।
टोटमेडली

6

जैसा कि आपने पहले ही लिखा था, आप डिजिटल आउटपुट के रूप में TX और RX सहित सभी पिन का उपयोग कर सकते हैं। मैंने ऐसा कुछ समय पहले एक प्रदर्शनकारी के लिए किया था और एक वीडियो रिकॉर्ड किया था - 20 LEDS 20 पिन पर - इस बल्कि निरर्थक प्रोजेक्ट का।

जैसा कि पीटर आर। ब्लूमफील्ड ने यहां बताया है , आपको अपलोड के लिए TX और RX को डिस्कनेक्ट करना होगा। इसके अलावा, आप संभावित अन्तरक्रियाशीलता के लिए सेंसर पढ़ने के लिए पिन से बाहर हैं और यह सुनिश्चित करना है कि कुल वर्तमान सीमा तक पहुँच नहीं है। यदि आप उन्हें सीधे अपने Arduino के साथ चलाते हैं, तो यह न भूलें कि आप 5V एलईड तक सीमित हैं।

इसलिए सामान्य तौर पर शिफ्ट रजिस्टर का उपयोग और रिकार्डो द्वारा वर्णित 595 की अत्यधिक अनुशंसा की जाती है।

  • वे घटिया हैं!
  • बल्कि उन्हें कैस्केड करना आसान है।
  • जब आप हार्डवेयर-एसपीआई का उपयोग करते हैं तो बहुत अधिक गति प्राप्त की जा सकती है।

मैंने कुछ समय पहले उनका इस्तेमाल किया था जब मुझे अपकमिंग कलाकार डोमिनिक जैस के कावई मी (लिंक का पाठ जर्मन में है) के सोल्डरिंग और प्रोग्रामिंग हिस्से का एहसास हुआ ।

इधर, बस का एक समूह 595 8x11 एल ई डी के एक प्रदर्शन ड्राइव करने के लिए इस्तेमाल किया गया। चूंकि एलईड 12 वी एसएमडी लेड्स की एक स्ट्रिप से काटे गए थे, अतिरिक्त बिजली की आपूर्ति और कुछ UDN2803A डार्लिंगटन सरणियों, शिफ्ट रजिस्टरों के आउटपुट पिंस पर हुक किए गए, आवश्यक थे।

अन्य सामान्य विधियों में PCF8574 (A) 8bit पोर्ट एक्सपैंडर्स का उपयोग शामिल होगा, जिन्हें I2C बस के माध्यम से नियंत्रित किया जाता है।

वैसे भी, मैं 595 शिफ्ट रजिस्टर पहले एक कोशिश दे देंगे।

यदि आपको RGB नेतृत्व के एक जोड़े को नियंत्रित करने की आवश्यकता है, हालांकि, आप अधिक विशिष्ट समाधानों की तलाश करना चाहते हैं। कुछ RGB लीड्स अपने खुद के WS2812 के साथ आते हैं । इन बारीक टुकड़ों को कैस्केड (1-वायर बस) किया जा सकता है और श्रृंखला में उनकी स्थिति के माध्यम से संबोधित किया जाता है।


3

यदि यह सब एल ई डी के बारे में है, तो WS2812B एलईडी स्ट्रिप्स के बारे में क्या है, या बस ड्राइवर खुद को चिप करता है? आप केवल एक पिन का उपयोग करके लगभग असीमित संख्या में एल ई डी को नियंत्रित कर सकते हैं!

यद्यपि लोग स्ट्रिप्स में इनका उपयोग करते हैं, वे स्टैंडअलोन एल ई डी के रूप में उपलब्ध हैं (जिन्हें एडफोर्स पर नियो पिक्सल के रूप में जाना जाता है)। या यदि आप केवल एक ही रंग का वाहन चला रहे हैं, तो प्रत्येक WS2811 चिप एक एलईडी के लिए RGB आउटपुट में से प्रत्येक का उपयोग करके 3 एल ई डी को नियंत्रित कर सकता है।

मैंने हाल ही में सिर्फ एक प्रोजेक्ट बनाया है जिसमें 5 ऐसे एल ई डी का उपयोग किया गया है: डोर 1 ओपन / बंद, डोर 2 ओपन / क्लोज, मोटर 1 एक्टिव, मोटर 2 एक्टिव और पावर। "सक्रिय" एल ई डी दोहरे उद्देश्य हैं क्योंकि मेरे पास सक्रिय मोटर से इनपुट है और Arduino के अंदर हरे रंग का सक्रिय ध्वज है।

1 पिन और स्थापित लाइब्रेरी के साथ, आप एल ई डी की किसी भी संख्या को नियंत्रित कर सकते हैं


2

मैं अपने लिए इस विधि का दावा नहीं करता, लेकिन मुझे वेबपेज MUX-DEMUX पर यह साफ-सुथरी ट्रिक मिली : CD40D पार्लर पार्लर

आउटपुट या ड्राइव इनपुट पढ़ने के लिए आप जो भी तरीका चुनते हैं (शिफ्ट रजिस्टर, मल्टीप्लेक्सर्स या खुद Arduino पिन का सीधा सीधा उपयोग) आप समानांतर सर्किट जोड़े के एक चतुर उपयोग से आउटपुट या इनपुट की संख्या को दोगुना कर सकते हैं (एक दोहरी फॉर्म बनाने के लिए) इनपुट या आउटपुट बैंक ), प्रत्येक समानांतर शाखा पर इंद्रियों के विरोध में डायोड को नियोजित करता है, और इनपुट / आउटपुट को उच्च और निम्न पर स्विच करता है।

आउटपुट के लिए विधि का वर्णन करने के लिए (इस मामले में एल ई डी, ध्यान दें कि अतिरिक्त डायोड की आवश्यकता नहीं है):

एलईडी बैंक

यदि आप इस उदाहरण में एलईडी की जोड़ी को "बैंक" मानते हैं, और आप LED_0 को प्रकाश में लाना चाहते हैं, तो आपको पिन 17 को हाई सेट करने की आवश्यकता है, और 18 से LOW को पिन करना होगा। (पिन नंबर भ्रमित कर रहे हैं, लेकिन वे मेरे साथ नंगे होने के बाद के उदाहरण से मेल खाते हैं)। LED_1 को प्रकाश में लाने के लिए, आप बस PINS को उल्टा कर दें। एल ई डी की डायोड प्रकृति दूसरे को बंद रखने के विपरीत दिशा को बहने से रोकती है।

इनपुट के लिए विधि का वर्णन करने के लिए (इस मामले में सीडीएस, ध्यान दें कि अतिरिक्त डायोड आवश्यक हैं):

सीडीएस बैंक

यदि आप CdS लाइट सेंसर पर एनालॉग रीड करना चाहते हैं तो यह थोड़ा और जटिल हो जाता है। सबसे पहले, आपको प्रवाह को नियंत्रित करने के लिए प्रत्येक सेंसर में एक डायोड जोड़ना होगा। दूसरा, चूंकि आप मान पढ़ रहे हैं, इसलिए आपको फ्लोटिंग रखने के लिए इनपुट को उच्च या निम्न खींचने की आवश्यकता है। एक आलसी व्यक्ति होने के नाते, मैं आंतरिक पुल-अप प्रतिरोधों का उपयोग करके उन्हें उच्च खींचने जा रहा हूं। CdS_0 को पढ़ने के लिए, आप OUTPUT को पिन 17 मोड सेट करें और इसे LOW पर सेट करें। इससे यह जमीन बन जाती है। फिर आप INPUT को पिन 18 मोड सेट करें और पुल-अप रोकनेवाला को संलग्न करने के लिए इसे हाई पर सेट करें। अब आप पिन 18 (उर्फ एनालॉग पिन 4) पर एक रीड करने के लिए तैयार हैं। अन्य सेंसर तक पहुंचने के लिए, बस मोड और आउटपुट स्विच करें।

इसलिए, यदि आपके पास Arduino (सामान्य 3 के बजाय) पर 5 पिन का उपयोग करके एक CD4051 8 पोर्ट मल्टीप्लेक्स है, तो आप 16 इनपुट या आउटपुट या दो का मिश्रण प्राप्त कर सकते हैं।

CD4051 का उपयोग कर 16 आउटपुट / इनपुट

इसी तरह, यदि आपके पास 4067 16 पोर्ट मल्टीप्लेक्स है तो आप 32 इनपुट या आउटपुट या दो का मिश्रण प्राप्त कर सकते हैं।

एक उदाहरण स्केच होगा:

/*
 * Example of getting 16 i/o from 5 pins using a CD4051
 *
 * Based on tutorial and code by david c. and tomek n.* for k3 / malmö högskola
 * http://www.arduino.cc/playground/Learning/4051?action=sourceblock&ref=1
 */ 


int selPin[] = { 14, 15, 16 }; // select pins on 4051 (analog A0, A1, A2)
int commonPin[] = { 17, 18};   // common in/out pins (analog A3, A4)
int led[] = {LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW };  // stores eight LED states
int CdSVal[] = { 0, 0, 0, 0 }; // store last CdS readings
int cnt = 0;  // main loop counter
int persistDelay = 100; // LED ontime in microseconds


void setup(){
  Serial.begin(9600);  // serial comms for troubleshooting (always)
  for(int pin = 0; pin < 3; pin++){ // setup select pins
    pinMode(selPin[pin], OUTPUT);
  } 
}


void loop(){
  flashLEDs();
  if (cnt == 0){
    for(int x; x < 8; x++){
      led[x] = random(2);
    }
  }
  cnt++;
  if (cnt > 100) { cnt = 0; }
}


void flashLEDs() {
  for(int pin = 0; pin < 2; pin++) {  // set common pins low
    pinMode(commonPin[pin], OUTPUT);
    digitalWrite(commonPin[pin], LOW);
  } 
  for (int bank = 0; bank < 4; bank++) {
    for(int pin = 0; pin < 3; pin++) { // parse out select pin bits
      int signal = (bank >> pin) & 1;  // shift  & bitwise compare
      digitalWrite(selPin[pin], signal);
    }
    if (led[bank * 2]){        // first LED
      digitalWrite(commonPin[0], HIGH);  // turn common on
      delayMicroseconds(persistDelay);   // leave led lit
      digitalWrite(commonPin[0], LOW);   // turn common off
    } 
    if (led[bank * 2 + 1]){     // repeat for second LED
      digitalWrite(commonPin[1], HIGH);
      delayMicroseconds(persistDelay);
      digitalWrite(commonPin[1], LOW); 
    }
  } 
}

जैसा कि मैंने पहली पंक्ति में कहा था, पूरा विवरण MUX-DEMUX: CD4051 पार्लर ट्रिक्स पर पाया जा सकता है


1

एक क्लास प्रोजेक्ट के लिए मैंने 7-सेगमेंट डिस्प्ले को ड्राइव करने के लिए एक सीडी 4024 और दो अरुडिनो पिन का इस्तेमाल किया।

इस दृष्टिकोण के लिए कुछ संकेत हैं। उदाहरण के लिए, highरिपल काउंटर के पहले आउटपुट का मान लिखने के लिए केवल resetघड़ी पिन को दो बार टॉगल करने की आवश्यकता होती है । लेकिन अगर आप highसभी n पिन को लिखना चाहते हैं, तो आपको 2 बार n पिन क्लॉक टॉगल करने की आवश्यकता है , और उस समय के दौरान अन्य सभी पिन लगातार और बंद टॉगल कर रहे हैं।

यदि आपका एप्लिकेशन इन सीमाओं से निपट सकता है और आप पिन पर कम हैं, तो यह एक और विकल्प है।

बोनस उत्तर: यहां मल्टीप्लेक्सिंग इनपुट के बहुत सारे उदाहरण हैं , जिनमें से कई मल्टीप्लेक्सिंग आउटपुट पर भी लागू होते हैं।


7-सेगमेंट के ड्राइव को 7-सेगमेंट के डिस्प्ले का उपयोग करने से पता चलता है कि आपने खुद को किन कारणों के लिए एक उप-अपनाने वाला दृष्टिकोण दिया है।
jfpoilpret

1

काम के एक बिट (एक अलग बूटलोडर को स्थापित करने के साथ) एक अतिरिक्त सात I / O लाइनें ICSP1 और JP2 हेडर पर एक Uno पर उपलब्ध हैं। प्रतिस्थापन बूटलोडर को HoodLoader2 कहा जाता है । यह आपको एको पर Atmega328 और Atmega16U2 दोनों पर स्केच स्थापित करने की अनुमति देता है। कई प्रोसेसरों से निपटना इस पद्धति का उपयोग करने से मुख्य जटिलता होगी।

एक ऊनो पर, ICSP1 और JP2 हेडर पिंस पीबी 1 से कनेक्ट होते हैं ... एटमेगा 16 यू 2 के पीबी 7। इसके अलावा Atmega16U2 में लगभग 9 I / O पिन हैं, जिनका सर्किट बोर्ड से कोई संबंध नहीं है। एक माइक्रोस्कोप के तहत काम करने वाला व्यक्ति 16U2 पर कुल 18 I / O पिंस के तारों को संलग्न करने में सक्षम हो सकता है, जबकि तीन अन्य I / O पिंस को उनके साधारण कनेक्शन से जुड़ा हुआ छोड़ देता है।

HoodLoader2 मेगा बोर्ड पर भी काम करता है।


0

यहां अच्छे जवाबों का खजाना है, लेकिन अगर आप अपना समय खर्च करते हैं तो आपको मेगा खरीदना सस्ता पड़ेगा।

मेरा 3/2-डी मूल्य।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.