ฉันควรกำหนดค่าหมุด I / O ที่ไม่ได้ใช้บน ATMega328P อย่างไรเพื่อการสิ้นเปลืองพลังงานน้อยที่สุด?


15

ฉันพยายามลดพลังงานให้ได้มากที่สุดในบอร์ด Arduino ที่ฉันสร้างขึ้น หมุดอินพุตที่ไม่ได้ใช้ควรกำหนดค่าอย่างไร มีคำตอบที่ไม่กี่ ( ที่นี่ , ที่นี่ ) แล้วสำหรับการนี้ แต่ฉันหลังจากบางสิ่งบางอย่างที่เฉพาะเจาะจงเพื่อ ATMega328P

  1. ตั้งค่าพินเป็นอินพุทขับสูง ๆ เพื่อดึงภายใน
  2. ตั้งค่าพินเป็นอินพุทขับดันต่ำ
  3. ตั้งค่าพินเป็นอินพุทดึงขึ้นภายนอก
  4. ตั้งค่าพินเป็นอินพุทดึงลงจากภายนอก
  5. ตั้งค่าพินเป็นเอาต์พุตต่ำ
  6. ตั้งค่าพินเป็นเอาท์พุทสูง
  7. ตั้งพินเป็นเอาท์พุทต่ำดึงภายนอก

คำตอบ:


12

หลังจากขุดผ่านแผ่นข้อมูลฉันพบสิ่งนี้:

14.2.6 พินที่ไม่ได้เชื่อมต่อ

หากไม่ได้ใช้หมุดบางอย่างขอแนะนำให้ตรวจสอบว่าหมุดเหล่านี้มีระดับที่กำหนดไว้ แม้ว่าอินพุตดิจิตอลส่วนใหญ่จะปิดการใช้งานในโหมดสลีปลึกดังที่อธิบายไว้ข้างต้นอินพุตแบบลอยควรหลีกเลี่ยงเพื่อลดการใช้กระแสไฟในโหมดอื่น ๆ ทั้งหมดที่เปิดใช้งานอินพุตดิจิตอล (รีเซ็ตโหมดแอ็คทีฟและโหมดไม่ทำงาน)

วิธีที่ง่ายที่สุดเพื่อให้มั่นใจในระดับที่กำหนดของพินที่ไม่ได้ใช้คือการเปิดใช้งานการดึงภายใน ในกรณีนี้การดึงขึ้นจะถูกปิดใช้งานในระหว่างการรีเซ็ต หากการใช้พลังงานต่ำในระหว่างการรีเซ็ตเป็นสิ่งสำคัญขอแนะนำให้ใช้ pull-up หรือ pull-down ภายนอก ไม่แนะนำให้เชื่อมต่อพินที่ไม่ได้ใช้โดยตรงกับ VCC หรือ GND เนื่องจากอาจทำให้เกิดกระแสมากเกินไปหากกำหนดพินเป็นเอาท์พุทโดยไม่ได้ตั้งใจ

อัปเดตเกี่ยวกับความคิดเห็น / คำถาม:

ตามตารางที่ 14-1 ตัวต้านทานแบบดึงขึ้นจะทำงานเฉพาะเมื่อตรงตามเงื่อนไขต่อไปนี้:

  1. พินถูกตั้งค่าเป็นอินพุต (บิต DDxn เป็นลอจิกต่ำ)
  2. PORTxn ตั้งค่าตรรกะสูง
  3. PUD อยู่ในระดับต่ำ

วิธีเดียวที่คุณจะได้รับกระแสที่สำคัญไหลผ่านตัวต้านทานแบบดึงขึ้นคือถ้าพินสัมผัสกับระดับต่ำเมื่อเปิดใช้งานพูลอัพ ซึ่งหมายความว่า Atmel อาจทำให้เกิดความสับสน (ไม่น่าเป็นไปได้) หรือคุณมีการกำหนดค่าพินเป็นอินพุตเมื่อเปิดใช้งานพูลอัพและหมุดเชื่อมต่อกับกราวด์

ส่วนที่14.2.5กล่าวถึงการเปิดใช้งานอินพุตดิจิตอลและโหมดสลีป เพื่อสรุปข้อมูลดิจิตอลจะถูกจับยึดกับกราวด์ที่อินพุตของ Schmitt Trigger เพื่อป้องกันระดับการลอยตัวในขณะที่อยู่ในโหมดสลีปยกเว้นว่ามีการกำหนดค่าพินว่าเป็นอินเตอร์รัปต์ภายนอก ฉันไม่สามารถบอกได้ว่าเอาต์พุตดิจิตอลถูกปิดใช้งานในโหมดสลีปหรือไม่ ดูเหมือนว่ามันจะปิดการใช้งานตามรูป14-2แต่ฉันก็ไม่แปลกใจถ้ามันเป็น ทางออกที่ดีที่สุดคือการใช้ตัวต้านทานแบบดึงขึ้นภายในหรือภายนอก


ขอบคุณคุณคิดว่าสิ่งนี้ดีกว่าการตั้งค่าเอาต์พุตในแง่ของการใช้พลังงานหรือไม่? มีกระแสไหลผ่าน pull-up ภายในหรือไม่? อุปกรณ์จะอยู่ในโหมดปิดเครื่องเป็นเวลาส่วนใหญ่
geometrikal

คำตอบที่อัปเดต ฉันไม่คิดว่าคุณจะมีปัญหามากเกินไปกับการเป็นผลลัพธ์ แต่ทางออกที่ดีที่สุดคือการรับคำแนะนำของ Atmel
helloworld922

10
  1. ตั้งค่าพินเป็นอินพุทขับสูงขึ้นเพื่อดึงภายใน : ฉันคิดว่าสิ่งนี้ควรอ่าน: " ทำให้อินพุทสูงด้วยการดึงขึ้นภายใน " (ฉันจะใช้คำว่า "ขับ" เฉพาะเมื่อคุณทำอย่างนั้นโดยใช้ FET ถึง Vcc หรือกราวนด์) เป็นที่ชัดเจนว่าคุณต้องการระดับที่กำหนดไว้และการดึงขึ้นมาดูแลสิ่งนั้น ตรวจสอบให้แน่ใจว่าการเปิดใช้งานการดึงขึ้นเป็นสิ่งแรกที่คุณทำหลังจากรีเซ็ต ที่ไปสำหรับการเริ่มต้น I / O โดยทั่วไป กระแสไฟฟ้าเดียวจะเป็นกระแสรั่วไหลของ NFET ของคู่หูแบบดึงและการรั่วไหลของประตูของอินพุต FET น้อยกว่า 1 µA: ตกลง
  2. ตั้งค่าพินเป็นอินพุตขับระดับต่ำ : ไม่ใช่ความคิดที่ดี หากซอฟต์แวร์ไปกล้วยและจะเปลี่ยนพินไปที่เอาต์พุตสูงคุณกำลังทำให้พินลัดเสียหาย PFET ของคู่เสริม
  3. ตั้งค่าพินเป็นอินพุต, ดึงขึ้นภายนอก : เหมือนกับ 1), แพงกว่าเท่านั้น แต่มีข้อได้เปรียบที่การดึงขึ้นจะอยู่ที่นั่นเสมอ คุณอาจลืมเปิดใช้งานการดึงภายใน (ซึ่งถูกปิดใช้งานโดยค่าเริ่มต้น) หาก I / O โดยบังเอิญจะเปลี่ยนเป็นเอาต์พุตต่ำคุณจะมีท่อระบายน้ำขนาดเล็กในปัจจุบัน
  4. ตั้งค่าพินเป็นอินพุทดึงลงจากภายนอก : อีกครั้งค่าใช้จ่ายของตัวต้านทาน (ใช่ฉันรู้ว่ามันราคาถูก แต่ราคาถูก + ไม่จำเป็น = แพง) ปัจจุบันเท่ากับ 3) ถ้าพินนั้นสูง
  5. ตั้งค่าพินเป็นเอาต์พุตต่ำ : มีกระแสไฟรั่วสูงกว่าเมื่อกำหนดค่าเป็นอินพุต แต่ยังต่ำกว่า 1 µA ดังนั้นจึงไม่ต้องกังวล ฉันยังคงเปิดใช้งานการดึงภายใน มันจะไม่ทำงานกับ I / O เป็นเอาท์พุท แต่ถ้ามันจะถูกเปลี่ยนเป็นอินพุตโดยไม่ตั้งใจขาจะไม่คงอยู่
  6. ตั้งค่าพินเป็นเอาต์พุตสูง : เหมือนกับ 5)
  7. ตั้งค่าพินเป็นเอาท์พุทต่ำและดึงลงภายนอก : ตัวต้านทานแบบดึงลงเป็นค่าใช้จ่ายที่ไม่จำเป็น: มันจะทำให้เอาต์พุตต่ำซึ่งต่ำอยู่แล้ว แต่เมื่อเทียบกับ 5) มีข้อได้เปรียบที่คุณมั่นใจว่าพินจะไม่ลอยหากเปลี่ยนไปใช้อินพุตโดยไม่ได้ตั้งใจ

ฉันจะไป 1): อินพุตพร้อม pull-up ภายใน; ไม่จำเป็นต้องใช้ชิ้นส่วนภายนอก ใน 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/ซึ่งใช้ชิปเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.