ATxmegaのパワーダウンモードで消費電流を1mAまで下げる方法

このQ&Aのポイント
  • ATMEL(現在はmicrochip)のマイコンATxmega64A3Uでは、パワーダウンモードに移行すると消費電流を1uA程度まで下げることができるが、実際に計測すると約1mA程度の消費電流が発生してしまう。
  • パワーダウンモードに設定すると、各ポート端子は入力インピーダンス状態にはならない可能性がある。
  • ポートEやポートFに接続されているディップスイッチの状態によって消費電流が影響を受けている可能性がある。
回答を見る
  • ベストアンサー

ATxmega パワーダウンしても消費電流1mA

現在ATMELのマイコン(現在はmicrochip)ATxmega64A3Uでプログラミングを行っています。 https://avr.jp/user/DS/PDF/xmegaA4U.pdf このマイコンの機能で、パワーダウンモードというモードに移行すると、消費電流を1uA程度まで下げられるというので試してみました。 しかし、テスターで計測してみると、約1mA程度まで消費してしまっています。 ポートE、ポートFにディップスイッチを接続していて、ONにすると消費が上がり、OFFにすると消費が下がります。 なので、ポートE、ポートFにプルアップ抵抗が設定されてしまっているように感じます。 ただ、パワーダウンモードに設定すると自動的に各ポート端子は入インピーダンス状態にはならないのでしょうか? どうぞ、ご教示の程よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • TIGANS
  • ベストアンサー率35% (244/680)
回答No.1

そうですね。パワーダウンモードにしても出力ポートの方向は変わりませんよ。もしそうしたければパワーダウンモードに入る前にプログラムでDIRを入力にすればよいだけですからそういう仕様になっているかと。 普通にH/Lを出力している出力ピンもソース/シンク電流を流そうと思えば流せるはずです  もし勝手に入力モードになってしまうとCPUの周囲の回路に影響がでてしまいますからね。

techhouse
質問者

お礼

回答頂きありがとうございます。 パワーダウンモードに移行してもポートが入インピーダンスにならないことを確認しました。確かに考えてみればそうですね。 今回のディップスイッチが接続されているポートE,Fのプルアップ抵抗はパワーダウンモードに移行するプログラムの前で、 (例) PORTF.PIN0CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN1CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN2CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN3CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN4CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN5CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN6CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN7CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTE.PIN0CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTE.PIN1CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTE.PIN2CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTE.PIN3CTRL = (PORT_OPC_TOTEM_gc); // high-impedance このようなプログラムで、ディップスイッチがONでGNDに接続されたとしてもハイインピーダンスで電流消費は軽減されたことを確認できました。

その他の回答 (2)

  • kaba__san
  • ベストアンサー率46% (27/58)
回答No.3

https://avr.jp/user/DS/PDF/xmegaA.pdf これの8.5に指南が書いてます。

techhouse
質問者

お礼

回答頂きありがとうございます。 パワーダウンモードに移行してもポートが入インピーダンスにならないことを確認しました。確かに考えてみればそうですね。 今回のディップスイッチが接続されているポートE,Fのプルアップ抵抗はパワーダウンモードに移行するプログラムの前で、 (例) PORTF.PIN0CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN1CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN2CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN3CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN4CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN5CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN6CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN7CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTE.PIN0CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTE.PIN1CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTE.PIN2CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTE.PIN3CTRL = (PORT_OPC_TOTEM_gc); // high-impedance このようなプログラムで、ディップスイッチがONでGNDに接続されたとしてもハイインピーダンスで電流消費は軽減されたことを確認できました。 今までは約1.5mAだったものが約1mA程度まで電流消費が少なくなりました。 基板作成者によると、マイコン以外に0.6mA程度常時食っているICもあるとのこと。 もしかしたらあと0.4mA程度減らせる可能性があるようです。 まだ、adcとかの停止をちゃんと確認していないのでトライしてみたいと思います。

  • kaba__san
  • ベストアンサー率46% (27/58)
回答No.2

CPUだけはその消費電力になるでしょう。 入力ポートについては、こんな質問を書く時間でデータシートを読めばわかるはずです。 勝手にハイインピーダンスなんてされたら、ピン変化割り込みでウェークアップ出来なくなるじゃないですか。 スリープ時に電力を消費したくないなら、自分でそのようにプログラムするんです。 ウォッチドッグやBODを動かしてたらそれ用のオッシレータも動きますし、その他の周辺機能も意図的に停止しなければウェークアップ用に動作し続けて電力を消費するでしょう。 周辺機能部の消費電流も書いているはずです。

techhouse
質問者

お礼

回答頂きありがとうございます。 パワーダウンモードに移行してもポートが入インピーダンスにならないことを確認しました。確かに考えてみればそうですね。 今回のディップスイッチが接続されているポートE,Fのプルアップ抵抗はパワーダウンモードに移行するプログラムの前で、 (例) PORTF.PIN0CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN1CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN2CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN3CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN4CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN5CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN6CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTF.PIN7CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTE.PIN0CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTE.PIN1CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTE.PIN2CTRL = (PORT_OPC_TOTEM_gc); // high-impedance PORTE.PIN3CTRL = (PORT_OPC_TOTEM_gc); // high-impedance このようなプログラムで、ディップスイッチがONでGNDに接続されたとしてもハイインピーダンスで電流消費は軽減されたことを確認できました。 今までは約1.5mAだったものが約1mA程度まで電流消費が少なくなりました。 基板作成者によると、マイコン以外に0.6mA程度常時食っているICもあるとのこと。 もしかしたらあと0.4mA程度減らせる可能性があるようです。

関連するQ&A

  • アトメルマイコンでパワーダウンしても400uA消費

    現在、アトメル社製のマイコン ATxmega64a3uでプログラミングを行っています。特にパワーダウンモードに移行させて消費電流を削減したいと思っています。 前回、消費電流が思うように削減できなかったため質問させて頂きました。 ATxmega パワーダウンしても消費電流1mA @okwave https://okwave.jp/qa/q9930101.html 上記の質問サイトにて記述しておりますが、マイコンがパワーダウンさせても400uA程度消費している可能性があるとのことで、実際にマイコン以外の部品を外して、消費電流を計測してみたところ、やはり400uA程度消費していることを確認しました。 前回の質問で教えてもらった power_all_enable(); こちらの関数を利用して可能な限り消費電流を抑えたつもりなのですが、それでもパワーダウンモード中に400uA程度消費していました。 この場合なんですが、他に確認すべき箇所などはありますでしょうか? 一部基板担当の方から、 ”漏れ電流があるかもしれないから仕方ない・・・” みたいな声も聞こえてくるのですが、何か確認方法等ご教示頂きますようお願い致します。 なお、パワーダウンモードへのプログラムの一部ですが、 #include <avr/power.h> //------(中略)----------- main(void) { //------(中略)----------- wdt_disable(); power_all_disable(); sleep(); wdt_enable(0x26); //wdt timeout 4sec enable power_all_enable(); //------(中略)----------- }

  • AVRマイコンのパワーセーブモード時の消費電流

    AVRマイコンのパワーセーブモード時の消費電流について質問させて頂きます。 パワーセーブモード、パワーダウンモー時の消費電流を測定すると、 ・パワーセーブモード時消費電流:92.5μA(電源電圧:3V、動作クロック:31.25kHz、WDT無効) ・パワーダウンモード時消費電流:0.2μA(電源電圧:3V、動作クロック:31.25kHz、WDT無効) になりました。 AVRマイコンのマニュアルを見ると、 ・パワーセーブモード時消費電流:7μA(WDT無効) ・パワーダウンモード時消費電流:0.2μA(WDT無効) との記載があり、パワーセーブモード時消費電流においてマニュアル値と実測値で大幅な相違があります。 何らかのミスを犯していると思われますが、原因を推測できる方がいらっしゃいましたら、ご教示下さい。 AVRマイコンの型番は、『ATMEGA48V』になります。 よろしくお願い致します。

  • アトメルマイコンATtiny2313のパワーダウンモードに設定しても200uAも電流消費する。

    現在、アキバで買ってきたアトメルのマイコンATtiny2313で、割り込みが入った場合、一定時間を測って、それが終了したら自ら電源消費を抑えるためにマイコンの機能の”パワーダウンモード”に入って、次の割り込みが入るまで待つといったようなプログラミングをしています。 ATtiny2313には内部RC発振器があるので、水晶発振子部品を付けて動作させるのではなく、内部RC発振器で128kHzに設定して動作させています。 http://reef.path.ne.jp/~hero/pdf/tiny2313.pdf ATtiny2313のデータシートの122ページ目にはRC発振器を128kHzで使った場合は供給電圧が3Vの時には、だいたい20uAくらいというグラフになっているのですが、実際動作させてみると200uAくらい食っています。また、パワーダウンモードに移行させてみても、マイコンは200uAを常に食っている感じになってしまいました。 パワーダウンモードになれば電流消費が10uA以下になると考えていた私としてはちょっと電流の取りすぎと思っているのですが、やはりこれくらいの電流消費量になってしまうのでしょうか。 ご存知の方いらっしゃいましたら是非ご教授よろしくお願い致します。

  • AVRマイコン パワーダウンモード時のピン状態

    AVRマイコンをパワーダウンした際に、入出力ポートはどの様な状態になるのでしょうか? 入力ポート→GND? 出力ポート→GND? ご教示下さい。 よろしくお願い致します。

  • ATxmega AD変換を停止して消費電流を削減

    現在、ATxmega64a3uマイコンで、パワーダウンモードに移行させた場合に、消費電流が1mA程度というのを測定しました。 パワーダウンモードに移行する前にA0ポートピンで行っているAD変換機能を停止するため、 // adc disnable ADCA.CTRLA = 0 ; // Disnable the ADC PORTA.PIN0CTRL = (PORT_OPC_TOTEM_gc); // high-impedance このように、プログラムしてみたのですが、消費電流は1mA程度とそれほど変化がありません。 AD変換を停止できているかどうか確認する方法などはありませんでしょうか? AD変換が停止できているなら、どの程度電流消費を下げることができますでしょうか? どうぞ、ご教示の程よろしくお願い致します。

  • atmel社のマイコンで使用できるOSってある?

    現在、アトメル社製のマイコンでATxmega128A1Uを使用しているのですが、このマイコンで使用できるATMEL社純正のOSというのはあるのでしょうか? 使用する場合に価格とか、使い方などを知ることができるWEBサイトなどありましたら、ご教示いただきますよう、宜しくお願い致します。

  • Atmel studo6.2デバッグ時EEPROM

    現在、Atmel studio6.2でAtmel88pマイコンのプログラミングを行っています。JTAGICE3でリアルタイムデバッグをやっています。通常のプログラミングモードからデバッグモードにマイコンを切り替える際に、EEPROMの内部データが初期化されてしまいます。 マイコンのデバッグを開始する際に一番最初にEEPROMのデータ内容を読み込んでいるので、このデータをいちいち打ち込まなければいけないのですが、EEPROM内容を保存しているeepファイルなどを読み込む機能はデバッグモード時にありますでしょうか? AVR Studio4.19の時はこの機能があったと思うのですが、ご教示頂きますよう、よろしくお願い致します。

  • ATxmegaマイコンのヒューズビットのコード設定

    現在ATxmega64A3Uでプログラミングを行なっています。 このマイコンのパワーダウンモード機能を利用して、バッテリーの消費電流を可能な限り抑える必要があり、400uA程度だった消費電流を300uA程度まで低下させることができました。 原因がヒューズビットのBODPD機能で、このビット設定をATmega専用ライターでdisableに設定することで消費電流の軽減ができるようになりました。 同じファームウェアを搭載している基板にも同様のヒューズビット設定の変更を実施すれば良いのですが、プログラムで、電源起動時に同様の設定を実行することも可能ですか? どうぞ、ご教示の程宜しくお願い致します。

  • ATtiny2313でsleep_mode()関数でパワーダウンモード機能はステートマシンでは使えない?

    C言語プログラミングでアトメル社製ATtiny2313マイコンでプログラミングをやってます。 ATtiny2313のパワーダウンモード機能を使って割り込み入力端子、INT0、INT1端子を使って、入力の組み合わせでLEDを数パターンの点滅させるステートを作り、入力がない場合は、パワーダウンモードのステートで消費電流を節約するようにし、次の割り込みを待つようなプログラムを作っています。 ただ、パワーダウンモードのステートに入って、きっかけである”sleep_mode();”関数を使うと、割り込み入力でウェイクアップさせようとしてもLEDの点灯ステートに行っていないようで、完全にマイコンが動作停止してしまいます。 この時の状態をyoutubeに動画投稿しましたので参照をお願いします。 現在このプログラムは https://sourceforge.jp/projects/midicv/svn/view/trunk/LED_FLASHER/?root=midicv このサイトで”Download GNU tarball”をクリックでダウンロードできるようになっております。 この問題の原因がわかるかたいらっしゃいましたら是非ご教授よろしくお願い致します。 ちなみに、このプログラムファイル”LED_FLASHER.c”の224行目のsleep_mode();関数をコメントアウトすると、このステートマシンはちゃんと動作できていることを確認しております。こちらも動画で掲載しております。

  • xmega128のPB4-7端子をIO出力できない

    現在ATxmega128A1Uマイコンを使用して、プログラミングを行っています。 PBポート0~7をIO出力設定にして、H→L を繰り返すテストプログラムを作成してみました。 PBポート0~3はH→Lできたのですが、4~7がその動作をしません。 現在この動作の確認はJTAGICE3でデバッグモードでプログラムステップさせながら見ています。このPBポート4~7はJTAG端子としても兼用されているとデータシートには書いてありましたが、このことが動作しない原因となにか関係ありますでしょうか? どうぞ、ご教示頂きますよう、よろしくお願い致します。