16 बटन को केवल 8 तारों से कैसे जोड़ा जा सकता है?


9

यहाँ उत्पाद है। मैं इस विचार को समझता हूं: ये 16 बटन 4x4 मैट्रिक्स का उपयोग करते हैं। पंक्तियों के लिए 4 पंक्तियाँ, स्तंभों के लिए 4 पंक्तियाँ, और हमारे पास 8 केबल हैं।

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

परंतु:

  1. बिना किसी मल्टीप्लेक्सर के यह काम कैसे हो सकता है?

  2. क्या यह कई बटनों की सही प्रेस का पता लगा सकता है? भले ही बटन एक ही पंक्ति या एक ही कॉलम का उपयोग करें? उदाहरण: स्थिति में बटन (2,2) (2,3), (3,2), और (3,3) एक ही समय में दबाए गए।

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


7
यह सामान्य ज्ञान है जैसा कि आप 'कीपैड मल्टीप्लेक्सिंग' या इस तरह के Google खोज के साथ पाएंगे। क्या आपने यह पोस्ट करने से पहले पहले कोशिश नहीं की थी?
टोनीएम

3
@ TonyM बेशक मैंने किया, कई खोज की, और मैंने कुछ मल्टीप्लेक्स चिप्स 74HC164 का भी आदेश दिया जो कुछ दिनों पहले घर पर आया था। जब मुझे यह मिला तो मैं इस मल्टीप्लेक्स चिप के साथ सब कुछ वायर करने वाला था। तब मैं सोच रहा था "यह बिना किसी मल्टीप्लेक्सर के कैसे काम कर सकता है"?
बसज

1
बाईं ओर स्थित डिवाइस के अंदर मल्टीप्लेक्सिंग का एक कोड होना चाहिए
Marcelo Espinoza Vargas

3
@TonyM मुझे यह इंगित करने के लिए धन्यवाद। आप एक रहस्य बनाने के बजाय पीडीएफ लिंक कर सकते हैं?) हो सकता है कि मैंने कीपैड, आदि की तुलना में अन्य कीवर्ड्स के साथ खोज की और मुझे शायद ऐसा नहीं मिला।
बसज

1
@ बस्ज: कई प्रेस होना कोई समस्या नहीं है। आप एक के बाद एक सभी चार लाइनों को स्कैन करते हैं। यदि एक बटन लाइन 1 में दबा हुआ पाया जाता है, तो आप इसे नोट करते हैं। जब लाइन 3 की बात आती है, तो आपको वहां एक और बटन दबाया जाता है, आप इसे नोट करते हैं। अंत में, आपको दोनों बटन मिलते हैं। जब तक आप लोगों को बटन दबाने की तुलना में काफी तेजी से स्कैन करने में सक्षम होते हैं, तब तक आप इसे याद नहीं करेंगे।
गार्बोर

जवाबों:


24
बिना किसी मल्टीप्लेक्सर के यह काम कैसे हो सकता है?

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

मल्टीप्लेक्सिंग एल्गोरिथ्म कुछ इस तरह से काम करता है:

  1. एक पंक्ति ऊँची, दूसरी नीची।

  2. स्तंभ लाइनों पर निष्क्रिय पुलडाउन सक्षम करें।

  3. देखें कि कौन सी कॉलम लाइनें अधिक हैं। उन स्तंभ रेखाओं के चौराहों पर बटन जो एक मुखर पंक्ति रेखा के साथ दबाए गए हैं। उस पंक्ति के अन्य बटन जारी किए गए हैं।

  4. अगली पंक्ति को अनुक्रम में अगली पंक्ति में सम्मिलित करते हुए वापस दोहराएं।

उपरोक्त प्रक्रिया को काफी तेजी से दोहराया जाता है ताकि सभी बटन एक समय में जांचे जा सकें जो अभी भी एक मानव पर्यवेक्षक को तात्कालिक लगता है। इस संदर्भ में "तात्कालिक" की मानव सीमा लगभग 50 एमएस है। यहां तक ​​कि एक कम अंत माइक्रोकंट्रोलर 4x4 कीपैड को उससे बहुत कम समय में स्कैन कर सकता है।

क्या यह कई बटनों के सटीक दबाव का पता लगा सकता है?

शायद हाँ। एक तरीका यह है कि प्रत्येक बटन के साथ श्रृंखला में एक डायोड रखा जाए। वे आपके द्वारा दिखाए गए बोर्ड के नीचे की तरफ हो सकते हैं। डायोड के साथ, ऊपर वर्णित एल्गोरिदम बस काम करता है।

एक और तरीका है लाइनों के साथ श्रृंखला में प्रतिरोधों को लगाकर और उनके अनुरूप वोल्टेज को मापना। यहां तक ​​कि एक साथ कई पंक्तियों / कॉलम लाइनों को छोटा करते हुए, आप अंततः यह पता लगा सकते हैं कि कौन से बटन दबाए गए हैं। इसके लिए माइक्रो में ए / डी इनपुट की जरूरत होती है, न कि डिजिटल इनपुट की जब डायोड का इस्तेमाल किया जाता है।


1
धन्यवाद। एक ही समय में कई प्रेस के बारे में क्या? नोट: बायां बोर्ड रास्पबेरीपी है।
बसज

1
@ हेमैन ऐसा क्यों है? क्या आप एक उदाहरण दे सकते हैं? डायोड न होने पर (1,2), (2,2) और (3,3) एक ही समय में एक समस्या को क्यों दबाया जाता है? हो सकता है कि आपके पास एक छोटा सा स्कीमैटिक्स होगा? जैसा कि यह बिंदु वास्तव में महत्वपूर्ण है, हो सकता है कि यह एक समर्पित उत्तर @Hayman के लिए है?
बसज

8
+1 के लिए "बायाँ बोर्ड ऐसा लगता है जैसे उस पर एक प्रोसेसर है"। पसंद आया।
एनरिक ब्लैंको

3
यदि आप इसके साथ खेलते हैं तो @Basj यह स्पष्ट है। जब भी आप एक बटन दबाते हैं, तो आप एक पंक्ति को एक कॉलम से जोड़ रहे हैं। जब भी एक पंक्ति और एक स्तंभ जुड़ा होता है, चौराहे पर कुंजी दबाया जाता है। लेकिन अगर कम से कम 3 कुंजी दबाए जाते हैं, तो एक पंक्ति और एक कॉलम अप्रत्यक्ष रूप से जुड़ा हो सकता है ।
होब्स

2
@Basj पर एक नजर डालें इस तस्वीर । लाल रेखाएं एक तर्क उच्च स्तर का संकेत देती हैं। यदि आप एक 'x' के साथ संकेतित 3 बटन पकड़ते हैं, तो आप उन्हें ट्रेस कर सकते हैं और उस मार्ग को देख सकते हैं जिसमें सिग्नल बहेगा। सबसे पहले पंक्ति 1 का चयन किया जाता है और उच्च सेट किया जाता है, बटन 1,1 दबाकर यह पहला स्तंभ उच्च बनाता है। 1,2 बटन दबाकर हमने अब पंक्ति 2 ऊँची कर दी है। अब यदि हम पंक्ति 2 पर कोई अन्य बटन दबाते हैं, तो हम एक और कॉलम ऊँचा करेंगे। इसके साथ समस्या यह है कि μC गूंगा है, यह जानता है कि यह पंक्ति 1 को उच्च सेट करता है और यह कॉलम 3 पर एक उच्च देखता है, इसलिए यह सोचता है कि बटन 1,3 उच्च है
डूडल

9

डायोड के बिना ... आपको प्रेत आयतें मिलेंगी।

उदाहरण के लिए आपके उदाहरण में (2,2) (2,3), (3,2), और (3,3); आपने एक आयत चुनकर एक विडंबनापूर्ण उदाहरण चुना। यदि आप वास्तव में सभी चार दबाते हैं, तो यह काम करेगा। लेकिन यदि आप आयत के किसी भी तीन कोनों को दबाते हैं, तो चौथा कोना भी दबा हुआ दिखाई देगा , भले ही वह ऐसा न हो।

कि कीपैड स्पष्ट रूप से कीबोर्ड डेटा एंट्री के लिए होता है, जहाँ उपयोगकर्ता कन्वेंशन एक बार में एक कीपर होता है। आप देखते हैं कि उदाहरण के लिए, गैस स्टेशन क्रेडिट कार्ड एंट्री कीपैड पर "शिफ्ट" कीज़ नहीं हैं।

हालाँकि, यदि आपने S1 को एक शिफ्ट कुंजी बनाया है, और S3 एक ऑल-शिफ्ट कुंजी है, ताकि उपयोगकर्ता S13 दबाते समय दोनों को यथोचित रूप से पकड़ सकें, तो S15 भी दबाया हुआ दिखाई देगा।


1
वास्तव में, अधिकांश डेटा एंट्री कीबोर्ड में एक समय में 2 से अधिक कुंजी दबाने का इरादा नहीं होता है, इसलिए कोई समस्या नहीं है। म्यूज़िकल कीबोर्ड एक और कहानी है, क्योंकि एक बार में कई चाबियों को दबाया जा सकता है। उनमें से ज्यादातर के पास प्रत्येक कुंजी के डायोड या स्वतंत्र वायरिंग हैं। लेकिन मुझे दूसरे हाथ की दुकान (9 यूरो की कीमत) में एक संगीत कीबोर्ड मिला, जिसमें अप्रत्याशित और कष्टप्रद परिणामों के साथ एक समय में दबाए गए कई कुंजी के लिए कोई उपयुक्त अनुकूलन नहीं था!
स्तर नदी सेंट

की-वर्ड एक प्रकार का हो सकता है जिसमें एक बिलियन डायोड होता है, या उनके नीचे छिपे हुए डायोड हो सकते हैं।
रैकंडेबिनमैन

1

निरंतर स्कैन के बिना इसे कैसे करें:

  • सभी ड्राइवरों को उच्च पर सेट करें
  • लाइनों को प्राप्त करने पर निष्क्रिय पुलडाउन सक्षम करें
  • उच्चतर जा रही लाइनों में से किसी एक का पता लगाने के लिए पिन परिवर्तन में बाधा डालें (या स्तर में परिवर्तन)
  • जब ऐसा होता है, तो कीपैड स्कैन को सक्षम करें, हर 10ms पर कहें
  • सामान्य रूप से स्कैन करें और कुंजी दबाएं
  • घटनाओं के बिना समय समाप्त होने के बाद, पहली बुलेट बिंदु पर स्कैन और पुनरारंभ करना बंद करें

0

मैंने असेंबली एवीआर माइक्रोकंट्रोलर्स पर असेंबली लैंग्वेज के साथ ऐसा किया है।
सरलता के लिए: कीपैड पंक्तियाँ: Arduino Pins 4,5,6 और 7 (AVR पिन PD4, PD5, PD6 और PD7) कीपैड कॉलम का उपयोग करें: Arduino पिन 8, 9, 10 और 11 (AVR पिन PB0, PB1, PB2 और PB3 और PB3 का उपयोग करें ) पुल-अप के साथ पंक्ति पिन इनपुट सक्षम करें। कॉलम पिन करें आउटपुट और आउटपुट उन्हें शून्य बनाते हैं। सभी पंक्ति और स्तंभ पिनों पर पिन परिवर्तन व्यवधान सक्षम करें। http://playground.arduino.cc/Main/PinChangeInterrupt कीपैड पर एक बटन दबाने से रो पिन कम खींचेगा। इंटरप्ट रूटीन को पंक्ति पिन पढ़ने और यह पता लगाने की आवश्यकता है कि कौन सा पिन कम है। ऊपरी 4 बिट्स तीन और एक शून्य होना चाहिए। यदि आप एक uint8_t 8 बिट चर का उपयोग करते हैं, तो आप इसे 4 बिट्स को संख्या के निचले बिट्स में रखने के लिए 16 या (var >> 4) से विभाजित कर सकते हैं। आप एक बिटवाइस का उपयोग कर सकते हैं या | 240 के साथ ऑपरेशन 1s के लिए ऊपरी 4 बिट्स सेट करने के लिए और सभी बिट्स को पलटने के लिए एक बिटवाइज़ नहीं ~ ऑपरेशन ताकि आप केवल एक बिट सेट करें जो बटन दबाए जाने वाली पंक्ति का प्रतिनिधित्व करता है। इस नंबर को 0, 1, 2 या 3 के रूप
में संग्रहीत करें। पिन कॉन्फ़िगरेशन स्विच करें:
पुल-अप सक्षम के साथ कॉलम पिन इनपुट बनाएं। उन्हें पंक्ति पिन आउटपुट और आउटपुट शून्य बनाते हैं। कॉलम पिन पढ़ें और जानें कि कौन सा पिन कम है। इस मान के साथ एक समान हेरफेर करें, इसके अलावा आपको नंबर को दाईं ओर शिफ्ट करने की आवश्यकता नहीं है। Var ^ 240 और ^ var के बाद आपके पास कुंजी प्रेस पर मौजूद कॉलम को दर्शाने के लिए एक बिट है। बंदरगाहों को फिर से कॉन्फ़िगर करने से पहले इंटरप्ट को अक्षम करना याद रखें क्योंकि यह अवांछित अवरोधों को ट्रिगर करेगा। डुप्लिकेट इंटरप्ट हैंडलिंग को रोकने के लिए इंटरप्ट रूटीन को छोड़ते समय आपको इंटरप्ट झंडे साफ़ करने पड़ सकते हैं।

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