एक Arduino आउटपुट एक विशिष्ट (यानी 56 kHz) वाहक आवृत्ति कैसे कर सकता है?


9

मैं दो बिंदुओं के बीच वायरलेस रूप से डेटा भेजने के लिए एक मुक्त स्थान प्रकाशिकी परियोजना पर काम कर रहा हूं। इसे पूरा करने के लिए, मैं एक Arduino Uno से जुड़ी IR LED का उपयोग कर रहा हूं जो ट्रांसमीटर के लिए 56 kHz वाहक आवृत्ति और रिसीवर के लिए 56 kHz IR डिटेक्टर मॉड्यूल के साथ एक दूसरे Arduino का उपयोग करता है।

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

ATmega328 के लिए डेटाशीट पढ़ना यह प्रतीत होता है कि चिप के टाइमर का उपयोग करके अधिक सटीक पल्स सेट करने का एक तरीका है। क्या यह संभव है, और यदि ऐसा है, तो आप टाइमर का उपयोग करके 56 kHz की पल्स कैसे बनाते हैं?


आपकी 56KHz फ़्रीक्वेंसी के लिए आपको कितनी सटीकता चाहिए? यानी आपके प्रोजेक्ट में कौन सी फ्रीक्वेंसी रेंज स्वीकार्य है? मैं पूछता हूं क्योंकि अकेले Arduino टाइमर का उपयोग करते हुए, परिशुद्धता की सीमाएं हैं।
jfpoilpret

डिटेक्टर में उच्च स्तर की जवाबदेही बनाए रखने के लिए 55.5khz से 56.5khz आदर्श होगा।
jlbnjmn 15

जवाबों:


10

Arduino टाइमर के साथ 56 kHz सिग्नल उत्पन्न करना वास्तव में संभव है ।

MCU में वास्तव में एक टाइमर को एक विशेष रजिस्टर के रूप में देखा जा सकता है, जो एक मान (0 से शुरू) रखता है जो एक आवृत्ति पर बढ़ जाता है जो MCU घड़ी की आवृत्ति (Arduino Uno पर 16 मेगाहर्ट्ज), एक कारक द्वारा विभाजित संभावना है। प्रिस्कलर । जब यह मान एक सीमा तक पहुँच जाता है , तो तुलना करें , जिसे आप निर्दिष्ट करते हैं, कहा जाता है , तब दो चीजें होती हैं:

  • टाइमर रजिस्टर मान 0 पर रीसेट है।
  • एक ISR (व्यवधान सेवा दिनचर्या) कॉलबैक फ़ंक्शन को कॉल किया जाता है (आप इसे अपने कोड को इंगित करने के लिए परिभाषित कर सकते हैं)।

इस विचार का उपयोग उस ISR को तार्किक पिन के उत्पादन को बदलने के लिए किया जाता है HIGH, जब भी इसे कहा जाता है ( तब LOW, तब HIGH...)।

अब, 56 kHz वर्ग तरंग उत्पन्न करने के लिए, आपको अपने ISR को 56000 * 2प्रति सेकंड कई बार कॉल * 2करने की आवश्यकता होगी ( क्योंकि आपको प्रति अवधि दो बार आउटपुट मूल्य बदलने की आवश्यकता है)।

आप निम्न सूची के बीच टाइमर के लिए इच्छित प्रीस्कूलर मूल्य चुन सकते हैं:

  • 1 (घड़ी आवृत्ति विभाजित नहीं है, इसलिए 16 मेगाहर्ट्ज)
  • 8 (घड़ी की आवृत्ति 8 से विभाजित है, इसलिए 2 मेगाहर्ट्ज)
  • 64
  • 256
  • 1024

Arduino Uno पर टाइमर / काउंटर के दो आकार हैं (उन्हें वास्तव में टाइमर / काउंटर कहा जाता है ): 8 बिट्स और 16 बिट्स।

Arduino Uno (ATmega328P) पर, आपके पास समग्र रूप से तीन टाइमर हैं, लेकिन कुछ का उपयोग Arduino कोर लाइब्रेरी या आपके स्केच में उपयोग की जाने वाली अन्य लाइब्रेरी (आपको खुद से जाँचना होगा):

  • टाइमर 0 (8-बिट)
  • टाइमर 1 (16-बिट)
  • टाइमर 2 (8-बिट): इस में अधिक प्रीस्कूलिंग विकल्प (1, 8, 32, 64, 128, 256, और 1024) हैं।

अब आपको 16 मेगाहर्ट्ज से 56 kHz की तरंग उत्पन्न करने की आवश्यकता है, इसलिए, बिना प्रिस्कूलिंग के, आपको इसकी गणना करने की आवश्यकता होगी:

16000000 / (56000 * 2) - 1 = 141.857( - 1क्योंकि एक टाइमर 0 से इस मूल्य तक गिना जाता है और पहुंचने के बाद ही रीसेट करता है )

इस गणना से, हम दो अवलोकन आकर्षित कर सकते हैं:

  1. 141.857 पूर्णांक नहीं है और इस प्रकार आप 56 kHz की लहर उत्पन्न नहीं कर पाएंगे।
  2. प्रीस्कूलिंग के बिना, आपको 16-बिट टाइमर की आवश्यकता है क्योंकि 285 8-बिट अहस्ताक्षरित पूर्णांक के रूप में प्रतिनिधित्व करने योग्य नहीं है।

अब से आपके पास दो विकल्प हैं:

  1. एक 16-बिट टाइमर (का प्रयोग करें timer1 ), उपयोग prescaler = 1, और चयन 142की तुलना करें मैच के रूप में; जो आपको निम्न आवृत्ति देगा:16000000 / (2 * (142 + 1)) = 55944 Hz
  2. एक 8 बिट टाइमर (का प्रयोग करें Timer0 ), उपयोग prescaler = 8, और चयन 17की तुलना करें मैच के रूप में; यह निम्न आवृत्ति के साथ कम सटीकता देगा: 16000000 / (8 * 2 * (17 + 1)) = 55555 Hzजो अभी भी आवश्यक सीमा के भीतर है।

अब, इसके लिए अपना स्केच कैसे लिखें, इसके बारे में मैं आपको सलाह देता हूं कि इस निर्देश को देखें जो कि बहुत ही संपूर्ण और पढ़ने में बहुत दिलचस्प है।

बेशक, ATmega328P पूर्ण डेटशीट भी महत्वपूर्ण है यदि आप समझना चाहते हैं, तो मामूली विवरणों में, आप क्या कर रहे हैं।

कुछ महत्वपूर्ण नोट:

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

2
इसके अलावा जब निर्दिष्ट सीमा तक पहुँच जाता है तो हार्डवेयर पिन को टॉगल कर सकता है। इस प्रकार ISRs का उपयोग करने की कोई आवश्यकता नहीं है। वहाँ हमेशा हो जाएगा घबराना एक ISR साथ क्योंकि एक अनुदेश एक बार यह शुरू होता है बाधित नहीं किया जा सकता है। हालाँकि हार्डवेयर हमेशा वांछित दर पर पिन को टॉगल करेगा।
निक गैमन

यह कुछ आश्चर्य की बात है कि Arduino Uno एक सिरेमिक अनुनादक का उपयोग करता है, लेकिन इसके लिए एक स्रोत Arduino UNO FAQ है (पास में "Uno प्रोसेसर घड़ी के लिए एक अनुनादक या क्रिस्टल का उपयोग करता है?" )।
पीटर मोर्टेंसन

3

मैंने tone()किसी भी पिन पर उच्च आवृत्ति दालों के उत्पादन के लिए उपयोगी पाया है। यह 56 KHz को संभालने में सक्षम होना चाहिए। (संपादित करें: जैसा कि jfpoilpret द्वारा उल्लेख किया गया है, आप वास्तव में एक 16 मेगाहर्ट्ज Arduino पर प्राप्त कर सकते हैं 55.944 हर्ट्ज के बारे में है)

कठिनाई स्पष्ट रूप से आपके डेटा सिग्नल के साथ संयोजन करेगी। मुझे नहीं लगता कि आप निम्न स्तर के कोड का सहारा लिए बिना सॉफ्टवेयर में ऐसा कर सकते हैं। यह हार्डवेयर में बहुत आसान होना चाहिए, हालांकि यह डिजिटल है।

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

यदि आपके पास एक और गेट काम नहीं है, तो ट्रांजिस्टर की एक जोड़ी का उपयोग करके अपना खुद का बनाना काफी सरल है। बस "ट्रांजिस्टर और गेट" के लिए ऑनलाइन खोजें।


पुनर्विक्रेताओं के पास आम तौर पर सक्रिय कम आउटपुट होते हैं। यदि आप LED के शीर्ष को 56khz से जोड़ते हैं, और अपने डेटा पिन के निचले हिस्से तक, जब डेटा पिन कम हो जाता है, तो आपको IR आउटपुट मिलता है, जिससे रिसीवर कम हो जाना चाहिए। नहीं और गेट की जरूरत है, बस एक नेतृत्व और रोकनेवाला। केवल समस्या जो भी मौजूदा io पिन ड्राइव कर सकते हैं तक सीमित है।
इटरनिटी

2

Jfpoilpret का स्वीकृत उत्तर बहुत अच्छी तरह से लिखा गया है, पूरी तरह से मान्य है और 99% मामलों में मैं वही करता हूँ जो वह समझाता है। उनके समाधान आपके परिभाषित मापदंडों के भीतर अच्छी तरह से हैं, इसलिए उन्हें बहुत अच्छी तरह से काम करना चाहिए। लेकिन " बहुत अच्छी " से बेहतर क्या है ? पूर्णता! आखिरकार, सवाल एक सटीक मूल्य पैदा करने के बारे में है। जैसा कि कहा गया है कि ज्यादातर मामलों में (लगभग सभी) अच्छा है, और यहां तक ​​कि घड़ियों के रूप में कुछ के साथ काम करते समय जब 1 सेकंड के लिए 1 सेकंड की आवश्यकता होती है, तो आपको अभी भी विरासत में मिले भागों की खामियों को भुगतना पड़ता है।

मैं जो सुझाव दूंगा वह हमेशा संभव नहीं है। कुछ मामलों में, यह संभव है, लेकिन इस मामले की तुलना में बहुत अधिक परेशानी और प्रयास के साथ। क्या यह मामला-दर-मामला आधार पर निर्भर है। मेरा लक्ष्य ज्यादातर भविष्य के संदर्भों के लिए एक विकल्प दिखाना है जो कुछ हद तक फ्रिंज मामलों में बेहतर है। यह नौसिखिया Arduino उपयोगकर्ताओं को ध्यान में रखकर लिखा गया है, जिनके पास इलेक्ट्रॉनिक्स में व्यापक अनुभव नहीं है।

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

आपके मामले में, आपको एक विशिष्ट आवृत्ति की आवश्यकता है और इसके बारे में अच्छी बात यह है कि वास्तव में 56 kHz को बहुत आसानी से प्राप्त किया जा सकता है (भागों की व्यावहारिक खामियों की गिनती नहीं)। तो यह भी एक आदर्श उदाहरण मामला है।

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

पहले याद दिलाने के लिए, पिन राज्य को टॉगल करने के कारण, आपको सिग्नल आवृत्ति की तुलना में आईएसआर को दो गुना अधिक निष्पादित करना होगा। यह प्रति सेकंड 112,000 बार है। 56,000 और 16,000,000 बहुत अच्छी तरह से जोड़ नहीं है जैसा कि पहले ही बताया गया है। हमें सिग्नल फ्रिक्वेंसी या टैक्स् फ़्रीक्वेंसी को बदलना होगा। चलिए अब एक अपरिवर्तनीय सिग्नल आवृत्ति के साथ सौदा करते हैं और एक बेहतर घड़ी गति पाते हैं।

56 kHz (या 112 kHz से अधिक) के परिमाण के कुछ क्रम के साथ एक घड़ी चुनना सबसे सरल होगा, लेकिन यह व्यावहारिक रूप से समान है), क्योंकि आप केवल शून्य जोड़ते हैं और इस तरह का गणित अधिकांश लोगों के लिए सबसे सरल है। दुर्भाग्य से इस दुनिया में सब कुछ किसी न किसी तरह का समझौता है। हर मान से काम नहीं चलेगा।

पहला उदाहरण बहुत कम टैक जनरेटर गति के साथ है।

यदि आप 56,000 हर्ट्ज की घड़ी चुनते हैं तो आप कुछ भी नहीं कर पाएंगे क्योंकि आपको आईएसआर को हर चक्र पर कॉल करना होगा और कुछ और नहीं कर सकते। यह सरासर बेकार है। यदि आप 10 गुना तेज गति (560 kHz) चुनते हैं, तो आपके पास अपना काम करने के लिए 9 (10 चक्रों के लिए अधिकतम मूल्य - ISR फ़ंक्शन को कॉल करने के लिए एक चक्र) माइक्रोकंट्रोलर चक्र होगा और यह काफी संभव नहीं हो सकता है। आपको अक्सर अधिक कम्प्यूटेशनल शक्ति की आवश्यकता होती है।

यदि आप दूसरे हाथ पर बहुत अधिक मूल्य चुनते हैं, तो 56 मेगाहर्ट्ज का माइक्रोकंट्रोलर बस इसके साथ काम नहीं कर सकता है। यह बहुत तेज़ है। तो, बस दुकान में सबसे बड़ा मूल्य चुनना या तो यह कटौती नहीं करेगा।

मूल Arduino Uno R3 में 16 MHz पर एक स्टॉक घड़ी है, इसलिए कुछ भी धीमा है जो काम करने की गारंटी है। अगला मूल्य जो 56 की तुलना में बड़ा और 16 मेगाहर्ट्ज से कम का क्रम 5.6 मेगाहर्ट्ज है। यह आईएसआर को प्रत्येक 50 चक्रों में कॉल करने में सक्षम होगा और 112,000 हर्ट्ज टाइमर आवृत्ति को सही बनाएगा। और आपका सिग्नल ठीक 56 kHz होगा। आईएसआर कॉल के बीच अपने कार्यक्रम को निष्पादित करने के लिए आपके पास 49 एमसीयू चक्र होंगे, लेकिन यह मूल घड़ी की गति के 1/3 के आसपास है। एक आधार के रूप में 112 का उपयोग कर सकता है और एक 11.2 मेगाहर्ट्ज घड़ी का उपयोग कर सकता है और यह स्टॉक 16 मेगाहर्ट्ज के प्रतिध्वनि के बारे में 2/3 देगा। ISR फ़ंक्शन को हर 100 चक्र कहा जाएगा और अभी भी एक परिपूर्ण 56 kHz सिग्नल पैदा करेगा।

हालाँकि इन मूल्यों के साथ दो प्रमुख समस्याएं मौजूद हैं।

  • पहली समस्या गंभीर रूप से आपकी आवश्यकताओं पर निर्भर करती है: आप सटीक सिग्नल आवृत्ति प्राप्त करने के लिए अपनी अधिकतम कम्प्यूटेशनल शक्ति के 1/3 (11.2 मेगाहर्ट्ज के साथ) का त्याग करते हैं जो एक आसान-से-रजिस्टर रजिस्टर मूल्य (ओसीआर आईक्रैक ) का उपयोग करते हैं। आप इसके साथ ठीक हो सकते हैं या आप नहीं हो सकते हैं।

  • दूसरी समस्या एक कठिन शोस्टॉपर है : मूल्यों को खोजना बहुत आसान है, लेकिन बहुत बार वे केवल एक निर्मित घड़ी स्रोत के रूप में मौजूद नहीं होते हैं। यह Farnell का अनुनाद वेब पेज है जिसमें केवल 5.6 MHz और 11.2 MHz दोनों का अभाव है।

इसे दरकिनार करने के लिए हम उपलब्ध अनुनादक मानों को देख सकते हैं और कुछ और पता लगा सकते हैं जिनका उपयोग बिल्कुल वांछित मान उत्पन्न करने के लिए किया जा सकता है। यदि हम 56 को 4 से विभाजित करते हैं तो हमें 14 मिलते हैं और सौभाग्य से एक 14 मेगाहर्ट्ज का गुंजयमान यंत्र है। यह हमें अधिक उच्च गति और अधिक शक्ति प्रदान करता है और रजिस्टर मूल्य खोजने के लिए समान रूप से आसान है। ISR को प्रति सेकंड 112,000 बार कॉल करने के लिए हमें OCR रजिस्टर में दशमलव 124 या हेक्साडेसिमल 0x7C का मान डालने की आवश्यकता होती है, इसलिए ISR को कॉल करने के लिए 124 चक्र + 1 की गिनती के साथ, हमें अपना वांछित सही मूल्य मिलता है।

एनबी

  1. ISR - इंटरप्ट सर्विस रूटीन (यह वह कोड है जो केवल उत्पन्न इंटरप्ट पर निष्पादित होता है)
  2. आपका प्रोग्राम कितना बड़ा हो सकता है यह मेमोरी साइज़ पर निर्भर करता है! इसका घड़ी की गति से कोई लेना-देना नहीं है और इसका इस बात से कोई लेना-देना नहीं है कि आप ISR को कितनी बार कहते हैं।
  3. जब माइक्रोकंट्रोलर प्रोग्राम कमांड से शुरू होता है तो एक काउंटर बढ़ जाता है। यदि एक बाधा उत्पन्न होती है, तो ISR कहा जाता है और यह मान एक विशेष रजिस्टर में संग्रहीत किया जाता है। जब ISR कोड पूरा हो जाता है, तो प्रोग्राम काउंटर के मूल्य को इस विशेष रजिस्टर से बहाल कर दिया जाता है और कार्यक्रम जारी रहता है जहां से यह बाधित हुआ था जैसे कि यह कभी नहीं हुआ था।

    मैं एक बेहद गूंगा-नीचे उदाहरण दूंगा। यदि आप एक शुद्धतावादी हैं, तो मैं आपको चेतावनी देता हूं: नाक और आंखों से रक्तस्राव हो सकता है।

    सोचिए आपको कहीं से कहीं चलना है। चरण-दर-चरण मार्ग निर्देश आपके मुख्य कार्यक्रम और इसके आदेश हैं। आप कितनी तेजी से चलते हैं या दौड़ते हैं, यह आपकी "क्लॉक स्पीड" पर निर्भर करता है, लेकिन मार्ग के निर्देशों पर नहीं (30 कदम आगे, 1 मोड़ 90 ग्रेड। बाएं, 10 कदम आगे, 45 ग्रेड पर। दाएँ, आदि) वे हमेशा समान होते हैं। । अब एक छोटे से बच्चे की कल्पना करें या एक लालची भ्रष्ट स्थानीय राजनेता आपके जूते अब और फिर से खोल दें। यह वह घटना है जो एक व्यवधान उत्पन्न करती है। फिर आप अपने अंतिम चरण के बाद रुक जाएं, फिर से अपना जूता मोड़ें। यह आपका ISR प्रोग्राम है।

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

  4. थोड़ा ही काफी है! एक तेज घड़ी हमेशा बेहतर नहीं होती है। धीमी गति से चलने वाले उपकरण काफी कम बिजली का उपयोग करते हैं। बैटरी से चलने वाले उपकरण में यह एक महत्वपूर्ण बिंदु हो सकता है।

  5. आवश्यक सूत्र इस सूत्र से लिए गए हैं:
    (घड़ी की गति / (प्रिस्कलर मूल्य * आवश्यक ISR कॉलिंग आवृत्ति)) - 1


TLDR: सिरेमिक 16 मेगाहर्ट्ज थरथरानवाला का वर्णन करें और इसे दूसरे के साथ बदलें जो पूर्णांक विभाजन द्वारा ठीक 56 kHz की अनुमति देता है (जैसे 14 मेगाहर्ट्ज और 250 से विभाजित)।
पीटर मोर्टेंसन

0

आप आउटपुट और इनपुट के बीच वाहक पिन मोड को टॉगल करके वाहक को चालू और बंद कर सकते हैं। मैंने इसका इस्तेमाल 37KHz इंफ्रारेड (रिमोट कंट्रोल) पोर्ट के माध्यम से हीट पंप को नियंत्रित करने के लिए किया है।


0

वाहक बनाने के लिए ISR का उपयोग करने की कोई आवश्यकता नहीं है। आवश्यक वाहक आवृत्ति पर 50% PWM आउटपुट का उत्पादन करने के लिए बस एक टाइमर सेट करें। ISR तब वाहक को संशोधित करने के प्रभारी है - आम तौर पर 0.5 या 1ms के अंतराल पर - कहीं अधिक आरामदायक दर। मेरे अनुभव में वाहक आवृत्ति में 5% त्रुटि सबसे आईआर रिसीवर द्वारा सहन की जाती है। मैंने एक Freetronics EtherMega 2560 का उपयोग किया (जिसमें बहुत सारी इमारते हैं) लेकिन मुझे यकीन है कि अन्य CPU भी ऐसा ही करेंगे।


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