가장 낮은 전력 소비를 위해 ATMega328P에서 사용하지 않는 I / O 핀을 어떻게 구성해야합니까?


15

내가 만든 Arduino 보드에서 가능한 한 많이 전력을 줄이려고합니다. 사용하지 않는 입력 핀은 어떻게 구성해야합니까? 이에 대한 몇 가지 답변 ( here , here )이 이미 있지만 ATMega328P에 특정한 것입니다.

  1. 핀을 입력으로 설정하고 드라이브 핀을 높게 끌어 내부 풀업에 연결
  2. 핀을 입력으로 설정하고 드라이브 핀을 낮게 설정
  3. 핀을 입력, 외부 풀업으로 설정
  4. 핀을 입력으로 설정, 외부 풀다운
  5. 핀을 낮은 출력으로 설정
  6. 핀을 높은 출력으로 설정
  7. 핀을 낮은 외부 풀다운 출력으로 설정

답변:


12

데이터 시트를 파고 들자 이것을 찾았습니다.

14.2.6 연결되지 않은 핀

일부 핀을 사용하지 않는 경우 이러한 핀의 레벨이 정의되어 있는지 확인하는 것이 좋습니다. 위에서 설명한대로 대부분의 디지털 입력이 딥 슬립 모드에서 비활성화되어 있지만 디지털 입력이 활성화 된 다른 모든 모드 (재설정, 활성 모드 및 유휴 모드)에서 전류 소비를 줄이려면 플로팅 입력을 피해야합니다.

사용되지 않는 핀의 정의 된 레벨을 보장하는 가장 간단한 방법은 내부 풀업을 활성화하는 것입니다. 이 경우 재설정 중에 풀업이 비활성화됩니다. 재설정 중 낮은 전력 소비가 중요한 경우 외부 풀업 또는 풀다운을 사용하는 것이 좋습니다. 사용하지 않는 핀을 VCC 또는 GND에 직접 연결하는 것은 권장하지 않습니다. 실수로 핀이 출력으로 구성된 경우 과도한 전류가 발생할 수 있습니다.

의견 / 질문과 관련하여 업데이트 :

표 14-1에 따르면 풀업 저항은 다음 조건이 충족 될 때만 활성화됩니다.

  1. 핀이 입력으로 설정되었습니다 (DDxn 비트가 로직 로우 임)
  2. PORTxn은 로직을 높게 설정
  3. PUD는 로직 로우입니다

풀업 저항을 통해 상당한 전류가 흐르게하는 유일한 방법은 풀업이 활성화 된 상태에서 핀의 레벨이 낮은 경우입니다. 이것은 Atmel이 심하게 엉망이되거나 (풀지 않게) 풀업이 활성화 된 상태에서 핀이 입력으로 구성되었고 핀이 어떻게 든 접지에 연결되어 있음을 의미합니다.

이 섹션 14.2.5에서는 디지털 입력 활성화 및 절전 모드에 대해 설명합니다. 요약하자면, 핀이 외부 인터럽트로 구성되지 않은 경우 디지털 입력은 슈미트 트리거의 입력에서 접지에 고정되어 슬립 모드에있는 동안 플로팅 레벨을 방지합니다. 휴면 모드에서 디지털 출력이 비활성화되어 있는지 알 수 없습니다. figure에 따라 비활성화 된 것처럼 보이지 14-2는 않지만 너무 놀랐지는 않습니다. 가장 좋은 방법은 내부 또는 외부 풀업 저항을 사용하는 것입니다.


고맙습니다. 사용되는 전력면에서 출력으로 설정하는 것보다 낫다고 생각하십니까? 내부 풀업을 통해 전류가 흐릅니 까? 장치는 대부분의 시간 동안 절전 모드에 있습니다.
geometrikal

업데이트 된 답변. 나는 당신이 출력물에 너무 많은 문제가 있다고 생각하지 않지만 최선의 방법은 Atmel의 조언을 따르는 것입니다.
helloworld922

10
  1. 내부 풀업을 연결하려면 핀을 입력으로 설정하고 드라이브 핀을 높게 설정하십시오 . " 내부 풀업을 연결하여 입력을 높이십시오 "라고 읽어야 합니다. VCC 또는 접지에 대한 FET를 통해 능동적으로 그렇게하는 경우에만 "드라이브"라는 단어를 사용합니다. 정의 된 수준을 원한다는 것이 분명하고 풀업이이를 처리합니다. 풀업을 활성화하면 재설정 후 가장 먼저 수행해야합니다. 그것은 일반적으로 I / O 초기화에 적용됩니다. 유일한 전류는 푸시 풀 쌍의 NFET의 누설 전류와 입력 FET의 게이트 누설입니다. 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/ 에서 가져온 것입니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.