GPIO एनालॉग और डिजिटल को समझना


11

मैं GPIO को समझने की कोशिश कर रहा हूं, और विभिन्न ब्लॉग पोस्टों का एक समूह पढ़ा है और मुझे लगता है कि मैं इसे प्राप्त करने के करीब हूं, लेकिन फिर भी कुछ चीजों से जूझ रहा हूं।

मैंने GPIO का कुछ संदर्भ देखा है जो केवल द्विआधारी मूल्यों के साथ काम करने में सक्षम है, लेकिन अन्य पोस्ट जो कहते हैं कि मान 0-255 से हो सकता है। मैं मान रहा हूं कि यह एनालॉग और डिजिटल GPIO के बीच अंतर है। क्या वो सही है? क्या यह संभव है कि एक एकल GPIO पिन एनालॉग और डिजिटल दोनों के रूप में कार्य कर सकता है?


कुछ जवाबों के लिए अनुवर्ती के रूप में ... द्विआधारी मूल्य एक डिजिटल इनपुट या आउटपुट को संदर्भित करता है। यह 1 हो सकता है (जो कि स्रोत वोल्टेज होना चाहिए, जिसे "हाय" या "ऑन") या 0 (जिसका अर्थ 0 वी है, जिसे "लो" या "ऑफ" कहा जाता है)। यह 1 बिट संकल्प है। एक एनालॉग इनपुट एक सीमा हो सकती है, आमतौर पर 0 वी से वीसीसी (स्रोत वोल्टेज) तक। 8bit रिज़ॉल्यूशन वाली एक डिजिटल चिप इस एनालॉग इनपुट को रेंज 0 - 255 (बाइनरी: 00000000 - 11111111) के 8bit डिजिटल सिग्नल में बदल देगी, क्योंकि 2 ^ 8 - 1 = 255 (बाइनरी मतलब बेस 2, 8 8 बिट से है) भाग, और "- 1" क्योंकि डिजिटल सामान 0 पर गिनना शुरू करता है, 1 नहीं)।
कर्ट ई। क्लोथियर

जवाबों:


14

GPIO पिन एक 'सामान्य प्रयोजन इनपुट / आउटपुट' पिन है। यह डिफ़ॉल्ट रूप से केवल उच्च या निम्न (वोल्टेज स्तर, उच्च माइक्रो नियंत्रक की आपूर्ति वोल्टेज, कम आमतौर पर जमीन, या 0 वी) है। लेकिन 'हाई' और 'लो' के स्तर को आमतौर पर वोल्टेज की आपूर्ति वोल्टेज के अनुपात के रूप में दिया जाता है। इसलिए आमतौर पर आपूर्ति वोल्टेज के 66% से ऊपर कुछ भी एक तर्क स्तर 'उच्च' माना जाता है, जिसका अर्थ है कि कुछ कम वोल्टेज डिवाइस उच्च वोल्टेज उपकरणों के साथ बात कर सकते हैं जब तक कि स्तर 'उच्च' माना जाता है। उदाहरण के लिए 1.8-2.7V के लो पावर माइक्रोकंट्रोलर या GPS रिसीवर को 5V माइक्रोकंट्रोलर से सीधे संवाद करने में परेशानी होगी क्योंकि जो लो वोल्टेज डिवाइस हाई वोल्टेज डिवाइस को 'हाई' के रूप में देखता है, वह यह नहीं सोचता कि यह हाई है। यह एक इनपुट पिन के रूप में GPIO का उपयोग करने के लिए है,

कभी-कभी 'एनालॉग' से 'डिजिटल' (एडीसी) कनवर्टर जैसे अन्य जहाज के उपकरणों द्वारा उपयोग किए जाने वाले जीपीआईओ पिन को कॉन्फ़िगर करके 'एनालॉग' मूल्यों के लिए आप एक सिंगल पिन का उपयोग कर सकते हैं। पिन ADC पर एक चैनल पर सेट है और यह ADC के इनपुट के रूप में कार्य करता है, सामान्य GPIO पिन नहीं। फिर आप नमूना लेने के लिए एडीसी को सेट कर सकते हैं, और अगर 10-बिट रिज़ॉल्यूशन है तो 0-1024 जैसे नंबरों के लिए एडीसी के परिणाम रजिस्टर मूल्य को पढ़ें।

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

GPIO पिन आमतौर पर समूहों में व्यवस्थित होते हैं, जिन्हें पोर्ट कहा जाता है। छोटे नियंत्रकों में, वे 8-बिट आर्किटेक्चर हो सकते हैं, इसलिए बंदरगाहों को अक्सर 8 के बहुत सारे समूहों में बांटा जाता है, और उनके मूल्यों को एक ही समय में एक 'डेटा रजिस्टर' पढ़कर पढ़ा जा सकता है जो उन लोगों के उच्च / निम्न मानों का प्रतिनिधित्व करता है पिंस। इसी तरह, आप पिन को आउटपुट के रूप में सेट कर सकते हैं और फिर 8-बिट्स को डेटा रजिस्टर में लिख सकते हैं, और माइक्रोकंट्रोलर जीपीआईओ नियंत्रक रजिस्टर के बदले हुए मूल्यों को पढ़ेंगे, और पिन को हाई ड्राइव करेंगे या पिन को कम से कम खींचेंगे जो आपके द्वारा निर्धारित मूल्य पर निर्भर करता है।

एआरएम कॉर्टेक्स ए 8 और ए 9 जैसे नए नियंत्रकों में जैसे रास्पबेरी पाई और बीगलबोन, उनके जीपीआईओ नियंत्रक और विभिन्न विकल्प बहुत जटिल हैं। वे 32-बिट आर्किटेक्चर का उपयोग करते हैं, इसलिए अधिकांश GPIO पिन को 32-पिन ब्लॉक में व्यवस्थित किया जाता है, भले ही सभी वास्तव में उपयोग करने योग्य न हों (कुछ समर्पित या सक्षम नहीं हो सकते हैं)। बीगलबोन (जो मैंने पहले काम किया है) में इसकी बड़ी मात्रा में पिन के लिए कुछ बहुत ही बढ़िया विकल्प हैं, और कभी-कभी आपको 'पिन मक्स' टूल का उपयोग करने की आवश्यकता होगी, जो आपको चीजों के लिए कुछ निश्चित पिनों के विशेष मोड को स्थापित करने की अनुमति देता है। PWM की तरह, पल्स कैप्चर, टाइमर आउटपुट, एनालॉग (ADC) चैनल इनपुट, और यहां तक ​​कि (बीगलबोन पर) एआरएम कोर पर उपलब्ध औद्योगिक उप-प्रोसेसर के लिए मैपिंग, लेकिन स्वतंत्र प्रोसेसर माना जाता है और क्रम में अपने स्वयं के पिन मैपिंग की आवश्यकता होती है बाहरी दुनिया से जुड़ा होना।


क्या आप एक उदाहरण दे सकते हैं कि "SINGLE पिन का उपयोग 'एनालॉग' वैल्यू के लिए कैसे किया जा सकता है?"
पावेल

@ JimJim2000 आउटपुट पर एक चिकनी एनालॉग "औसत" वोल्टेज का उत्पादन करने के लिए आरसी फिल्टर के माध्यम से ऑन / ऑफ या उचित पीडब्लूएम की एक धारा।
1

7

आप सबसे अधिक Arduino के एनालॉग आउट का जिक्र कर रहे हैं, जो अक्सर सॉफ्टवेयर PWM के साथ GPIO पिन का उपयोग करता है । GPIO में आमतौर पर तीन राज्य होते हैं। आउटपुट हाई, आउटपुट कम और इनपुट / हाई-जेड (उच्च प्रतिबाधा, जहां यह आउटपुट को प्रभावित नहीं करता है)।

पीडब्लूएम तेजी से आउटपुट हाई से आउटपुट कम (पीरियड) तक टॉगल करता है, एवरेज (ड्यूटी साइकल) बनाने के लिए, ऐसी चीज के लिए अनुमति देता है जो एनालॉग वैल्यू की तरह दिखती है। 50% (या 128) शुल्क चक्र पर एक बाइनरी जीपीआईओ को टॉगल करके, आउटपुट अभी भी द्विआधारी है, लेकिन उच्च और निम्न के बीच आधे रास्ते तक औसत है।

एक प्रकाश बल्ब के बारे में सोचो। आप इसे चालू या बंद देखें। लेकिन यह वास्तव में प्रति सेकंड 60 बार चालू और बंद हो रहा है, इतनी तेजी से कि आप वास्तव में तेजी से अपने निमिष को नोटिस नहीं करते हैं। लेकिन प्रकाश बल्ब को मैन्युअल रूप से वास्तव में धीरे-धीरे बंद करें, और आप इसकी पलक को नोटिस करते हैं। 255 तक, इसका मतलब है कि 100% पर, और 255 से कम पर 100% का अंश है।

कि कैसे एक द्विआधारी GPIO 255 ​​स्टेट एनालॉग पिन की तरह कार्य कर सकता है।


धन्यवाद @Passerby, यह बहुत स्पष्ट है। मैं विशेष रूप से आर्डिनो नहीं देख रहा हूं, लेकिन रास्पबेरी पाई और बीगलबोन। क्या आप कह रहे हैं कि किसी भी पिन का मान 0 से 255 के बीच हो सकता है? मैं प्रलेखन के बीच भ्रमित हो रहा हूं जो कहता है कि एक मूल्य बाइनरी बनाम अन्य हो सकता है जो कहते हैं कि एक मान 0-255 हो सकता है।
पैदल

1
@pedalpete RPI और Arduino में भीड़ और विचारों में अतिव्याप्ति है। लेकिन 0 से 255 तक का पीडब्लूएम मनमाना है। यह 0 से 65535, या 0 से 16 हो सकता है। 0 से 255 तक 8 बिट्स की शुद्धता है। जहां 255 या 65535 या जो भी 100% है। एक GPIO में केवल बाइनरी चालू और बंद होता है, लेकिन आप यह दावा करने के लिए PWM का उपयोग करते हैं कि यह केवल चालू या बंद से अधिक हो सकता है। यह एक उपयोगी और जानबूझकर ऑप्टिकल भ्रम है।
राहगीर

2
एक प्रकाश बल्ब प्रति सेकंड 60 बार पर और बंद नहीं झपकाता है। फिलामेंट गर्म होता है और गर्म रहता है
स्कॉट सेडमन

0

एक GPIO बिट 0 या 1. एक 8 बिट GPIO पोर्ट हो सकता है, जो लगातार 8 बिट्स से बना होता है, 00000000 और 11111111 या 255 दशमलव के बीच हो सकता है। यह "एनालॉग" की अवधारणा के साथ बहुत कम है


धन्यवाद स्कॉट, हालांकि मुझे लगता है कि मैं पहले की तुलना में अब अधिक भ्रमित हूं। GPIO पोर्ट क्या है? अगर मेरे पास एक GPIO पिन (उदाहरण रास्पबेरी पाई पर) है, तो क्या प्रत्येक पिन को एक बंदरगाह माना जाता है? यदि हां, तो क्या प्रत्येक पिन उक्त श्रेणी 0-255 दशमलव के साथ काम करने में सक्षम है?
पैडलपेट

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