सबसे कम बिजली की खपत के लिए ATMega328P पर अप्रयुक्त I / O पिन कैसे कॉन्फ़िगर किया जाना चाहिए?


15

मैं अपने द्वारा बनाए गए एक Arduino बोर्ड में जितना संभव हो उतना बिजली कम करने की कोशिश कर रहा हूं। अप्रयुक्त इनपुट पिन को कैसे कॉन्फ़िगर किया जाना चाहिए? इसके लिए कुछ उत्तर ( यहां , यहां ) पहले से ही हैं, लेकिन मैं ATMega328P के लिए कुछ विशिष्ट हूं।

  1. पिन को इनपुट पर सेट करें, आंतरिक पुल-अप को संलग्न करने के लिए पिन को उच्च ड्राइव करें
  2. पिन टू इनपुट, ड्राइव पिन लो
  3. पिन टू इनपुट, एक्सटर्नल पुल अप
  4. पिन टू इनपुट, एक्सटर्नल पुल डाउन
  5. आउटपुट कम करने के लिए पिन सेट करें
  6. उच्च आउटपुट के लिए पिन सेट करें
  7. आउटपुट को कम करने के लिए पिन सेट करें, बाहरी पुल डाउन करें

जवाबों:


12

के माध्यम से खुदाई करने के बाद डेटापत्रक , मैं इस पाया:

14.2.6 असंबद्ध पिंस

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

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

टिप्पणी / प्रश्न के संबंध में अद्यतन:

तालिका 14-1 के अनुसार, पुल-अप अवरोधक केवल तभी सक्रिय होता है जब निम्नलिखित स्थितियां संतुष्ट हों:

  1. पिन इनपुट के रूप में सेट किया गया है (DDxn बिट तर्क कम है)
  2. PORTxn तर्क उच्च सेट है
  3. PUD लॉजिक कम है

एकमात्र तरीका है कि आप पुल-अप रोकनेवाला के माध्यम से महत्वपूर्ण प्रवाह प्राप्त करेंगे यदि पिन पुल-अप सक्षम होने के साथ निम्न स्तर का अनुभव करता है। इसका मतलब है कि या तो Atmel ने बुरी तरह से गड़बड़ कर दी है (संभावना नहीं है) या आपके पास पुल-अप सक्षम के साथ इनपुट के रूप में कॉन्फ़िगर किया गया पिन है और पिन किसी तरह जमीन से जुड़ा हुआ है।

अनुभाग 14.2.5डिजिटल इनपुट सक्षम और नींद मोड पर चर्चा करता है। सारांशित करने के लिए, स्लीप मोड में फ्लोटिंग स्तर को रोकने के लिए डिजिटल इनपुट को जमीन पर चिपकाया जाता है, जब तक कि स्लीप मोड में पिन को बाहरी रुकावट के रूप में कॉन्फ़िगर नहीं किया जाता है। मैं नहीं बता सकता कि क्या डिजिटल आउटपुट स्लीप मोड में अक्षम है। ऐसा नहीं लगता कि यह आंकड़ा के अनुसार अक्षम है 14-2, हालांकि मैं बहुत आश्चर्यचकित नहीं होता अगर यह होता। सबसे अच्छा शर्त आंतरिक या बाहरी पुल-अप रोकनेवाला का उपयोग करना है।


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

अद्यतन उत्तर। मुझे नहीं लगता कि आउटपुट होने के साथ आपको बहुत अधिक समस्याएं होंगी, लेकिन Atmel की सलाह लेने के लिए सबसे अच्छी शर्त है।
Helloworld922

10
  1. इनपुट पर पिन सेट करें, आंतरिक पुल-अप को संलग्न करने के लिए पिन को ड्राइव करें : मुझे लगता है कि इसे पढ़ना चाहिए: " आंतरिक पुल-अप को उलझाकर इनपुट को उच्च बनाएं "। (मैं "ड्राइव" शब्द का उपयोग केवल तभी करूँगा जब आप एक सक्रिय रूप से FET से Vcc या ग्राउंड के माध्यम से करते हैं।) यह स्पष्ट है कि आप एक परिभाषित स्तर चाहते हैं, और पुल-अप इसका ध्यान रखता है। यह सुनिश्चित करें कि पुल-अप को सक्षम करना उन सभी चीजों में से एक है जिन्हें आप रीसेट करने के बाद करते हैं। यह सामान्य रूप से I / O आरंभीकरण के लिए जाता है। केवल वर्तमान पुश-पुल जोड़ी के एनएफईटी का रिसाव वर्तमान और इनपुट एफईटी का गेट रिसाव होगा। 1 :A से कम: ठीक है।
  2. पिन टू इनपुट, ड्राइव पिन लो : अच्छा आइडिया नहीं। यदि सॉफ्टवेयर केले के पास जाता है और पिन को स्विच कर देता है तो आप पिन को छोटा कर रहे हैं, पूरक जोड़ी के PFET को नुकसान पहुंचा रहे हैं।
  3. पिन को इनपुट पर सेट करें, बाहरी पुल अप : 1 के समान है), केवल अधिक महंगा। लेकिन फायदा यह है कि पुल-अप हमेशा रहेगा; आप आंतरिक पुल-अप (जो डिफ़ॉल्ट रूप से अक्षम है) को सक्षम करना भूल सकते हैं। अगर I / O दुर्घटनावश आउटपुट कम में बदल जाएगा तो आपके पास एक छोटा करंट ड्रेन होगा।
  4. इनपुट पर पिन सेट करें, बाहरी पुल डाउन करें : फिर से एक रोकनेवाला की लागत (हाँ, मुझे पता है कि वे सस्ते हैं, लेकिन सस्ते + अनावश्यक = महंगे हैं।) 3 के रूप में एक ही वर्तमान) यदि पिन सक्रिय उच्च पर जाएगा।
  5. आउटपुट कम करने के लिए पिन सेट करें : इनपुट के रूप में कॉन्फ़िगर किए जाने की तुलना में एक उच्च रिसाव चालू है, लेकिन अभी भी 1 ,A से नीचे है, इसलिए चिंता करने की कोई बात नहीं है। मैं अभी भी आंतरिक पुल-अप को सक्षम करूंगा। यह आउटपुट के रूप में I / O के साथ सक्रिय नहीं होगा, लेकिन अगर यह गलती से इनपुट में बदल जाएगा तो पिन फ्लोटिंग नहीं रहेगा।
  6. उच्च आउटपुट के लिए पिन सेट करें : 5 के समान)
  7. आउटपुट को कम करने के लिए पिन सेट करें, बाहरी पुल डाउन : पुल-डाउन रोकनेवाला एक अनावश्यक लागत है: यह आउटपुट को कम कर देगा, जो पहले से ही कम है। लेकिन 5 की तुलना में) लाभ है कि आप सुनिश्चित हैं कि यदि इनपुट पर स्विच नहीं किया गया है तो पिन फ्लोट नहीं करेगा।

मैं 1 के लिए जाऊंगा): आंतरिक पुल-अप के साथ इनपुट; कोई बाहरी भागों की आवश्यकता नहीं है। FMEA 5 में) बेहतर किराया हो सकता है, लेकिन यह इस बात पर निर्भर करता है कि आप कितने जोखिम का अनुमान लगाते हैं जो आप आंतरिक पुल-अप को सक्षम करना भूल जाते हैं। एक सॉफ्टवेयर डिजाइन सहकर्मी की समीक्षा आपको बीमा देना चाहिए।


1

पिंस आमतौर पर खुद एक बहुत बड़ा फर्क नहीं पड़ता। आप देखेंगे कि प्रत्येक पिन का एक विशिष्ट कार्य भी है - पिन के कार्य को अक्षम करें

volatile uint8_t timer2sum; // see interrupt handler

void Initialize()
{
    // configure pin for output
    DDR_LED |= LED;

    // set Power Reduction Register
    PRR = (1<<PRTWI)     // turn off TWI
        | (1<<PRTIM0)    // turn off Timer/Counter0
        | (1<<PRTIM1)    // turn off Timer/Counter1 (leave Timer/Counter2 on)
        | (1<<PRSPI)     // turn off SPI
        | (1<<PRUSART0)  // turn off USART (will turn on again when reset)
        | (1<<PRADC);    // turn off ADC

    // select POWER SAVE mode for sleeping, which allows Timer/Counter2 to wake us up
    set_sleep_mode(SLEEP_MODE_PWR_SAVE);

    // configure Timer/Counter2 to wake us up as infrequently as possible
    TCCR2B |= (1<<CS22) | (1<<CS21) | (1<<CS20); // clock at 14400 Hz
    TIMSK2 |= (1<<TOIE2);                        // interrupt on overflow, 56.25 Hz
    timer2sum = 0;                               // see interrupt handler
    sei();                                       // enable interrupts
}

http://www.nerdkits.com/library/lowpowerexample/ से लिया गया, जो समान चिप्स का भी उपयोग करते हैं।

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