विषयसूची:

एवीआर माइक्रोकंट्रोलर में एडीसी का परिचय - शुरुआती के लिए: १४ कदम
एवीआर माइक्रोकंट्रोलर में एडीसी का परिचय - शुरुआती के लिए: १४ कदम

वीडियो: एवीआर माइक्रोकंट्रोलर में एडीसी का परिचय - शुरुआती के लिए: १४ कदम

वीडियो: एवीआर माइक्रोकंट्रोलर में एडीसी का परिचय - शुरुआती के लिए: १४ कदम
वीडियो: Logical Instructions and Programs, Assembly Language Programming of AVR Microcontroller 2024, जुलाई
Anonim
एवीआर माइक्रोकंट्रोलर में एडीसी का परिचय | नौसिखिये के लिए
एवीआर माइक्रोकंट्रोलर में एडीसी का परिचय | नौसिखिये के लिए

इस ट्यूटोरियल में आप avr माइक्रोकंट्रोलर में एडीसी सब कुछ जानेंगे

चरण 1: एडीसी क्या है?

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

चरण 2: AVR- माइक्रोकंट्रोलर में ADC कैसे काम करता है

एवीआर एडीसी एवीआर माइक्रोकंट्रोलर को एनालॉग वोल्टेज को डिजिटल मानों में परिवर्तित करने की अनुमति देता है जिसमें कुछ बाहरी भाग नहीं होते हैं। ATmega8 में एक 10-बिट क्रमिक सन्निकटन ADC है। ATmega8 में PortC पर 7 चैनल ADC है। एडीसी में एक अलग एनालॉग आपूर्ति वोल्टेज पिन, एवीसीसी है। AVCC VCC से ± 0.3V से अधिक भिन्न नहीं होना चाहिए। वोल्टेज संदर्भ को AREF पिन पर बाहरी रूप से अलग किया जा सकता है। AVCC का उपयोग वोल्टेज संदर्भ के रूप में किया जाता है। एडीसी को लगातार (फ्री-रनिंग मोड) चलाने के लिए या केवल एक रूपांतरण करने के लिए भी सेट किया जा सकता है।

चरण 3: एडीसी रूपांतरण फॉर्मूला

एडीसी रूपांतरण फॉर्मूला
एडीसी रूपांतरण फॉर्मूला

जहां विन चयनित इनपुट पिन पर वोल्टेज है और चयनित वोल्टेज संदर्भ को Vref करता है

चरण 4: ATmega8 में ADC को कैसे कॉन्फ़िगर करें?

ATmega8 में ADC को कैसे कॉन्फ़िगर करें?
ATmega8 में ADC को कैसे कॉन्फ़िगर करें?

ATmega8 में ADC के कार्यान्वयन के लिए निम्नलिखित रजिस्टरों का उपयोग किया जाता है

एडीसी बहुसंकेतक चयन

चरण 5: एडलर चयन

एडलर चयन
एडलर चयन
एडलर चयन
एडलर चयन

ADC वाम समायोजन परिणाम ADLAR बिट ADC डेटा रजिस्टर में ADC रूपांतरण परिणाम की प्रस्तुति को प्रभावित करता है। परिणाम को समायोजित करने के लिए बाईं ओर ADLAR में एक लिखें। अन्यथा, परिणाम सही समायोजित है

जब एक एडीसी रूपांतरण पूरा हो जाता है, तो परिणाम एडीसीएच और एडीसीएल में मिलता है जब एडीसीएल पढ़ा जाता है, तब तक एडीसी डेटा रजिस्टर अपडेट नहीं किया जाता है जब तक कि एडीसीएच पढ़ा नहीं जाता है। नतीजतन, यदि परिणाम को समायोजित छोड़ दिया जाता है और 8-बिट से अधिक सटीकता की आवश्यकता नहीं होती है, तो यह ADCH को पढ़ने के लिए पर्याप्त है। अन्यथा, ADCL को पहले पढ़ा जाना चाहिए, फिर ADCH को। एनालॉग चैनल चयन बिट्स इन बिट्स के मान का चयन करता है कि कौन से एनालॉग इनपुट एडीसी से जुड़े हैं।

चरण 6: ADCSRA चयन

ADCSRA चयन
ADCSRA चयन
ADCSRA चयन
ADCSRA चयन

• बिट 7 - ADEN: ADC सक्षम करें इस बिट को किसी एक पर लिखने से ADC सक्षम हो जाता है। इसे शून्य पर लिखकर, ADC को बंद कर दिया जाता है

• बिट 6 - एडीएससी: एडीसी रूपांतरण शुरू करें एकल रूपांतरण मोड में, प्रत्येक रूपांतरण शुरू करने के लिए इस बिट को एक में लिखें। फ्री रनिंग मोड में, पहला रूपांतरण शुरू करने के लिए इस बिट को एक पर लिखें।

• बिट 5 - एडीएफआर: एडीसी फ्री रनिंग सिलेक्ट जब यह बिट सेट होता है (एक) एडीसी फ्री रनिंग मोड में काम करता है। इस मोड में, एडीसी लगातार डेटा रजिस्टरों का नमूना और अद्यतन करता है। इस बिट (शून्य) को साफ़ करने से फ्री रनिंग मोड समाप्त हो जाएगा।

• बिट 4 - एडीआईएफ: एडीसी इंटरप्ट फ्लैग यह बिट तब सेट होता है जब एडीसी रूपांतरण पूरा हो जाता है और डेटा रजिस्टर अपडेट हो जाते हैं। यदि ADIE बिट और SREG में I-बिट सेट हैं, तो ADC रूपांतरण पूर्ण व्यवधान निष्पादित किया जाता है। ADIF को हार्डवेयर द्वारा क्लियर किया जाता है जब संबंधित इंटरप्ट हैंडलिंग वेक्टर को निष्पादित किया जाता है। वैकल्पिक रूप से, ध्वज को तार्किक लिखकर ADIF को साफ़ किया जाता है।

• बिट 3 - ADIE: ADC इंटरप्ट सक्षम करें जब यह बिट एक को लिखा जाता है और SREG में I-बिट सेट किया जाता है, तो ADC रूपांतरण पूर्ण इंटरप्ट सक्रिय होता है।

• बिट्स 2:0 - ADPS2:0: ADC Prescaler Select Bits डेटाशीट के अनुसार, इस प्रीस्केलर को सेट करने की आवश्यकता है ताकि ADC इनपुट फ़्रीक्वेंसी 50 KHz और 200 KHz के बीच हो। ADC घड़ी ADPS2:0 की मदद से सिस्टम क्लॉक से ली गई है ये बिट्स XTAL फ़्रीक्वेंसी और ADC को इनपुट क्लॉक के बीच विभाजन कारक निर्धारित करते हैं।

चरण 7: यदि आप एडीसी मूल्य लेना चाहते हैं तो आपको कुछ काम करने होंगे जो नीचे सूचीबद्ध हैं

  • एडीसी मान सेट करें
  • आउटपुट एलईडी पिन कॉन्फ़िगर करें
  • एडीसी हार्डवेयर कॉन्फ़िगर करें
  • एडीसी सक्षम करें
  • डिजिटल रूपांतरण के अनुरूप प्रारंभ करें
  • जबकि हमेशा के लिए

यदि ADC मान अधिक है तो मान सेट करें, LED चालू करें ELSE LED बंद करें

चरण 8: ADC मान सेट करें

कोड: uint8_t ADCValue = 128;

चरण 9: आउटपुट एलईडी पिन कॉन्फ़िगर करें

कोड: DDRB|= (1 << PB1);

चरण 10: एडीसी हार्डवेयर कॉन्फ़िगर करें

एडीसी हार्डवेयर कॉन्फ़िगर करें

यह एडीसी के लिए नियंत्रण रजिस्टरों में बिट्स सेट करके किया जाता है। सबसे पहले, आइए एडीसी के लिए प्रीस्कूलर सेट करें। डेटाशीट के अनुसार, इस प्रीस्कूलर को सेट करने की आवश्यकता है ताकि एडीसी इनपुट आवृत्ति 50 किलोहर्ट्ज़ और 200 किलोहर्ट्ज़ के बीच हो। एडीसी घड़ी सिस्टम घड़ी से ली गई है। 1 मेगाहर्ट्ज की सिस्टम आवृत्ति के साथ, 8 के प्रीस्केलर के परिणामस्वरूप 125 किलोहर्ट्ज़ की एडीसी आवृत्ति होगी। एडीसीएसआरए रजिस्टर में एडीपीएस बिट्स द्वारा प्रीस्कूलिंग निर्धारित की जाती है। डेटाशीट के अनुसार, 8 प्रीस्केलर प्राप्त करने के लिए सभी तीन ADPS2: 0 बिट्स को 011 पर सेट किया जाना चाहिए।

कोड: ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

अगला, आइए एडीसी संदर्भ वोल्टेज सेट करें। इसे ADMUX रजिस्टर में REFS बिट्स द्वारा नियंत्रित किया जाता है। निम्नलिखित संदर्भ वोल्टेज को AVCC पर सेट करता है।

कोड: ADMUX |= (1 << REFS0);

मल्टीप्लेक्सर के माध्यम से एडीसी में पारित चैनल को सेट करने के लिए, एडीएमयूएक्स रजिस्टर में एमयूएक्स बिट्स को तदनुसार सेट करने की आवश्यकता है। चूँकि हम यहाँ ADC5 का उपयोग कर रहे हैं

कोड: ADMUX&=0xF0; एडीएमयूएक्स|=5;

एडीसी को फ्री-रनिंग मोड में डालने के लिए, एडीसीएसआरए रजिस्टर में उपयुक्त नामित एडीएफआर बिट सेट करें:

कोड: एडीसीएसआरए |= (1 << एडीएफआर);

ADC मान को पढ़ने को सरल बनाने के लिए एक अंतिम सेटिंग परिवर्तन किया जाएगा। हालांकि एडीसी में 10 बिट्स का रिज़ॉल्यूशन होता है, लेकिन अक्सर इतनी जानकारी की आवश्यकता नहीं होती है। यह 10 बिट मान दो 8 बिट रजिस्टरों, ADCH और ADCL में विभाजित है। डिफ़ॉल्ट रूप से, ADC मान के निम्नतम 8 बिट ADCL में पाए जाते हैं, जिनमें से ऊपरी दो ADCH के निम्नतम दो बिट होते हैं। ADMUX रजिस्टर में ADLAR बिट सेट करके, हम ADC मान को संरेखित कर सकते हैं। यह एडीसीएच रजिस्टर में माप के उच्चतम 8 बिट्स रखता है, बाकी एडीसीएल रजिस्टर में। यदि हम ADCH रजिस्टर पढ़ते हैं, तो हमें एक 8 बिट मान मिलता है जो 0 से 255 तक की संख्या के रूप में हमारे 0 से 5 वोल्ट माप का प्रतिनिधित्व करता है। हम मूल रूप से हमारे 10 बिट एडीसी माप को 8 बिट में बदल रहे हैं। ADLAR बिट सेट करने के लिए कोड यहां दिया गया है:

कोड:

ADMUX |= (1 << एडलर); यह इस उदाहरण के लिए एडीसी हार्डवेयर का सेटअप पूरा करता है। एडीसी द्वारा माप लेना शुरू करने से पहले दो और बिट्स सेट करने की आवश्यकता है।

चरण 11: एडीसी सक्षम करें

ADC को सक्षम करने के लिए ADCSRA में ADEN बिट सेट करें:

कोड: ADCSRA |= (1 << ADEN);

चरण 12: डिजिटल रूपांतरण के अनुरूप प्रारंभ करें

एडीसी माप शुरू करने के लिए, एडीसीएसआरए में एडीएससी बिट को सेट करने की आवश्यकता है:

कोड: एडीसीएसआरए |= (1 << एडीएससी);

इस बिंदु पर, एडीसी लगातार एडीसी 5 पर प्रस्तुत वोल्टेज का नमूना लेना शुरू कर देगा। इस बिंदु पर कोड इस तरह दिखेगा:

चरण १३: जबकि हमेशा के लिए

केवल एक चीज जो करना बाकी है वह है एडीसी मूल्य का परीक्षण करना और एलईडी को उच्च / निम्न संकेत प्रदर्शित करने के लिए सेट करना। चूंकि ADCH में ADC रीडिंग का अधिकतम मान 255 है, इसलिए यह निर्धारित करने के लिए th का परीक्षण मान चुना गया था कि वोल्टेज उच्च या निम्न था। FOR लूप में एक साधारण IF/ELSE स्टेटमेंट हमें सही LED को चालू करने की अनुमति देगा:

कोड

अगर (एडीसीएच> एडीसीवैल्यू)

{

PORTB |= (1 << PB0); // एलईडी चालू करें

}

अन्यथा

{

PORTB&= ~(1 << PB0); // एलईडी बंद करें

}

चरण 14: अंत में पूरा कोड is

कोड:

#शामिल

मुख्य अंतर (शून्य)

{

uint8_t एडीसीवैल्यू = 128;

डीडीआरबी |= (1 << PB0); // LED1 को आउटपुट के रूप में सेट करें

ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // ADC प्रीस्कूलर को 8 पर सेट करें - // 125KHz नमूना दर 1MHz

ADMUX |= (1 << REFS0); // AVCC के लिए ADC संदर्भ सेट करें

ADMUX |= (1 << एडलर); // आसान 8 बिट पढ़ने की अनुमति देने के लिए एडीसी परिणाम को बाएं समायोजित करें

एडीएमयूएक्स&=0xF0;

एडीएमयूएक्स|=5; // ADC0 का उपयोग करने के लिए MUX मानों को बदलने की आवश्यकता है

एडीसीएसआरए |= (1 << एडीएफआर); // एडीसी को फ्री-रनिंग मोड पर सेट करें

ADCSRA |= (1 << ADEN); // एडीसी सक्षम करें

एडीसीएसआरए |= (1 << एडीएससी); // A2D रूपांतरण प्रारंभ करें जबकि(1) // लूप फॉरएवर

{

अगर (एडीसीएच> एडीसीवैल्यू)

{

PORTB |= (1 << PB0); // LED1 चालू करें

}

अन्यथा

{

PORTE &= ~(1 << PB1); // LED1 बंद करें

}

}

वापसी 0;

}

पहले इस ट्यूटोरियल को प्रकाशित करें यहाँ क्लिक करें

सिफारिश की: