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

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

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


답변

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

14.2.6 연결되지 않은 핀

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

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

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

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

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

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

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


답변

  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)에서는 더 나은 요금을 지불 할 수 있지만 내부 풀업을 사용하는 것을 잊어 버린 위험을 얼마나 높게 평가 하느냐에 따라 다릅니다. 소프트웨어 설계 전문가 검토를 통해 보험에 가입해야합니다.


답변

핀은 대개 큰 차이를 만들지 않습니다. 각 핀에는 특정 기능이 있습니다. 핀 기능을 비활성화하십시오.

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/ 에서 가져온 것입니다 .


답변