के साथ एक रोटरी एन्कोडर का उपयोग करके मुझे एवीआर माइक्रो नियंत्रकों के साथ ठीक से काम करने के लिए रोटरी एन्कोडर प्राप्त करने में परेशानी हो रही है। एन्कोडर एक यांत्रिक ALPS encoder है, और मैं Atmega168 का उपयोग कर रहा हूं।एवीआर माइक्रो नियंत्रक
स्पष्टीकरण
मैं पिन को सुनने के लिए एक बाहरी इंटरप्ट उपयोग करने की कोशिश की है, लेकिन ऐसा लगता है जैसे कि यह बहुत धीमी है। जब पिन ए उच्च हो जाता है, तो इंटरप्ट प्रक्रिया शुरू होती है और फिर पिन बी उच्च होने पर जांच करता है। विचार यह है कि अगर पिन बी उच्च हो गया है तो पिन ए उच्च हो गया है, तो यह काउंटर घड़ी के विपरीत घूम रहा है। यदि पिन बी कम है, तो यह घड़ी के अनुसार घुमा रहा है। लेकिन ऐसा लगता है कि एवीआर को पिन बी की जांच करने में बहुत लंबा समय लगता है, इसलिए इसे हमेशा उच्च के रूप में पढ़ा जाता है।
मैंने एक प्रोग्राम बनाने की भी कोशिश की है जो पिन बी या पिन ए परिवर्तनों तक बस ब्लॉक करता है। लेकिन हो सकता है कि एन्कोडर घुमाए जाने पर बहुत अधिक शोर हो, क्योंकि यह या तो काम नहीं करता है। मेरा आखिरी प्रयास एक टाइमर होना था जो पिछले 8 मानों को एक बफर में संग्रहीत करता है और जांच करता है कि यह निम्न से उच्च तक जा रहा है या नहीं। यह या तो काम नहीं किया।
मैंने एन्कोडर को स्कॉइंग करने का प्रयास किया है, और ऐसा लगता है कि दूसरे पिन परिवर्तनों तक पहले पिन परिवर्तनों से 2 और 4ms के बीच उपयोग करना प्रतीत होता है।
यह "शौकिया" समाधान के रूप में ठीक है। हालांकि, अतिरिक्त हार्डवेयर (प्रतिरोधक/कैपेसिटर्स) को कम करके आंका नहीं जा सकता है। यही कारण है कि सॉफ्टवेयर debouncing एक "बेहतर" समाधान (आईएमएचओ) है। –
हार्डवेयर समाधान के बारे में अच्छी बात है, हालांकि, यह उपयोगकर्ता से ईएसडी से अतिरिक्त सुरक्षा प्रदान करता है। इसके लिए अनुकूलित नहीं है, बेशक, लेकिन थोड़ा बोनस। –
मुझे लगता है कि आपका सर्किट एन्कोडर से μC तक एक निष्क्रिय एलपी फ़िल्टर नहीं दिखाता है। आपको प्रतिरोधकों और कैपेसिटर की स्थिति का आदान-प्रदान करना होगा। –