消費電力を最小にするには、ATMega328Pで未使用のI / Oピンをどのように構成する必要がありますか?


15

私が作成したArduinoボードでは、可能な限り電力を削減しようとしています。未使用の入力ピンはどのように構成する必要がありますか?これについてはすでにいくつかの回答があります(ここここ)が、私はATMega328Pに固有の何かを求めています。

  1. ピンを入力に設定し、ピンをハイに駆動して内部プルアップを有効にします
  2. ピンを入力に設定し、ピンをローに駆動
  3. ピンを入力に設定、外部プルアップ
  4. ピンを入力に設定、外部プルダウン
  5. ピンを出力Lowに設定
  6. ピンを出力Highに設定
  7. ピンを出力Low、外部プルダウンに設定

回答:


12

データシートを掘り下げた後、私はこれを見つけました:

14.2.6未接続ピン

一部のピンが使用されていない場合、これらのピンのレベルが定義されていることを確認することをお勧めします。上記のように、ディープスリープモードではほとんどのデジタル入力が無効になっていますが、デジタル入力が有効になっている他のすべてのモード(リセット、アクティブモード、アイドルモード)での消費電流を減らすため、フローティング入力は避ける必要があります。

未使用ピンの定義済みレベルを確保する最も簡単な方法は、内部プルアップを有効にすることです。この場合、リセット中にプルアップは無効になります。リセット中の低消費電力が重要な場合は、外部プルアップまたはプルダウンを使用することをお勧めします。未使用のピンをVCCまたはGNDに直接接続することは推奨されません。これは、ピンが誤って出力として設定された場合に過電流が発生する可能性があるためです。

コメント/質問に関連して更新:

表14-1によると、プルアップ抵抗は次の条件が満たされた場合にのみアクティブになります。

  1. ピンは入力として設定されます(DDxnビットは論理Low)
  2. PORTxnはロジックHighに設定されます
  3. PUDが論理ローです

プルアップ抵抗に大きな電流が流れる唯一の方法は、プルアップを有効にしてピンが低レベルになる場合です。これは、Atmelがひどく(めったに)混乱するか、ピンが入力として設定され、プルアップが有効になっていて、ピンが何らかの方法でグランドに接続されていることを意味します。

セクションで14.2.5は、デジタル入力の有効化モードとスリープモードについて説明します。要約すると、デジタル入力はシュミットトリガーの入力でグランドにクランプされ、ピンが外部割り込みとして設定されていない限り、スリープモード中のフローティングレベルを防ぎます。スリープモードでデジタル出力が無効になっているかどうかわかりません。図14-2によると、無効になっているようには見えませんが、そうであったとしてもあまり驚かないでしょう。最善の策は、内部または外部プルアップ抵抗を使用することです。


おかげで、これは出力に設定するよりも、消費電力の点で優れていると思いますか?内部プルアップに電流が流れますか?ほとんどの時間、デバイスはパワーダウンスリープモードになります。
geometrikal

回答を更新しました。出力であることにあまり問題はないと思いますが、Atmelのアドバイスに従うことをお勧めします。
helloworld922

10
  1. ピンを入力に設定し、ピンをHighに駆動して内部プルアップを有効にします。これは、「内部プルアップを有効にして入力をHighにする」と読むべきだと思います。(「ドライブ」という言葉は、VccまたはグラウンドへのFETによって積極的に行う場合にのみ使用します。)定義済みのレベルが必要であることは明らかであり、プルアップがそれを処理します。プルアップを有効にすることは、リセット後に最初に行うことの1つであることを確認してください。これは一般的なI / O初期化に当てはまります。唯一の電流は、プッシュプルペアのNFETのリーク電流と、入力FETのゲートリークです。1 µA未満:OK。
  2. ピンを入力に設定し、ピンをローに駆動:良いアイデアではありません。ソフトウェアがバナナになり、ピンを出力Highに切り替えると、ピンが短絡し、相補ペアのPFETが損傷します。
  3. ピンを入力に設定し、外部プルアップ:1)と同じですが、より高価です。しかし、プルアップが常に存在するという利点があります。内部プルアップを有効にすることを忘れることがあります(デフォルトでは無効になっています)。I / Oが誤って低出力に切り替わった場合、わずかな電流が流れます。
  4. ピンを入力に設定し、外部プルダウン:抵抗器のコスト(はい、安いことはわかっていますが、安価+不要=高価です。)ピンがアクティブHighになる場合の電流は3と同じです。
  5. ピンを出力Lowに設定:入力として構成された場合よりも高いリーク電流がありますが、それでも1 µA未満なので、心配する必要はありません。引き続き内部プルアップを有効にします。I / Oを出力としてアクティブになりませんが、誤って入力に切り替えられた場合、ピンはフローティングのままになりません。
  6. ピンを出力Highに設定:5と同じ)
  7. ピンを出力Low、外部プルダウンに設定します。プルダウン抵抗は不要なコストです。出力が低くなりますが、これは既に低くなっています。しかし、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.