まとめを後日書きました ボタン電池で動く小型・低消費電力 AVR エレキー (50円 ワンチップマイコン ATTiny13A) | tech | avr | arduino - 氾濫原
前に書いたのの続き。
せっかくメインのICが小さいので、できるだけ小さく作るならどうするのがいいだろう?と考えてる。
まず、乾電池1本で動いたらいいなと思ったので、1.4Vを3.3Vに昇圧する回路を組んで駆動させてみたら、昇圧回路がどうもうまくいかなくて、やたら電気食う感じだった。昇圧回路の調整を別途やれば乾電池1本でもいい感じになるかもしれないけど、実際ブレッドボードで組んでみたら結構体積も食う感じになってしまったので、そもそもこの方法を諦めた。
じゃあリチウムコイン電池を使うことを考えよう、と思った。リチウムコイン電池なら1個で3V出せる。ただ、あまり電流を流すことができなくて、標準で 0.2mA 程度に抑える必要がある。消費電力を減らす工夫はしてるつもりだけど、スピード調節をADCにしたのでボリュームに常に電流が流れるとか (10kΩなのでこれだけで0.3mA流れる)、もうちょっと頑張る必要がありそうだった。
まず、ADC は1秒ごとに行うようにコードを変えて、そもそも頻度を減らした。また、ボリュームに電圧をかけるのも、ADCが行われるときだけにした。これはピン1個を出力にして、VCC の代わりにそこに繋いでる。VCC とピンの出力電圧は厳密には違うので、ADCの精度は落ちるけど、そもそも安定してない電池駆動だし、相対値だけがとれればいいのでまぁいいかな、という気がする。
それでだいたいアイドル時に0.3mA程度まで下がった。しかしこれ以上思いつかないので、とりあえずクロックを下げてみて挙動に問題がないか試すことにした。ATTiny13A の場合、内蔵クロックは 9.6MHz, 4.8MHz, 128kHz とそれらを8分周したものが選べる。なので 4.8MHz を8分周した600kHzで動かしてみると、思ったより変なことにならなかった。これでアイドル中はほぼ0.2mA未満に。
じゃあ 128kHz だとどうだろう、ということでやってみたら、
bad AVRISPmkII connection status: Unknown status 0x00
とかでるように…… たぶんクロックを下げすぎたせいで ISP の書きこみのクロックを読めてないのかな……
うーん困ったと思っていたら avrdude に転送スピードを下げるオプション (-B) があったので、-B 100 ぐらいにしてやったらいけた。しかし書きこみ速度がだいぶ遅い。
コードを全体的に書きなおさないと 128kHz でバグってて動かない感じだけど、軽く試した感じだと、アイドル中で0.09mAぐらい。キーイング中で0.19mA。パワーダウンは変わらず0.6uA程度。コーディングが面倒になった割にはそんなに減らない。ベースの消費が無視できないほどクロックの支配率が低くなってるせいかな。
仕様から
- VCC=3V, f=128kHz
- idle: 0.01mA
- active: 0.04mA
- power down: 0.00015mA
- ADC: 0.225mA
- Timer0: 0.002mA
- pull-up: 0.08mA
- キーイング中は pull-up + active + timer0 + FET GS接地抵抗(440k)電流 = 0.122mA が最低でも必ずかかる
- アイドル中は idle + timer0 = 0.012mA
- ADC中は active + ADC + timer0 = ボリューム電流 = 0.567mA
- パワーダウン中はクロックに関係なく固定で 0.15uA
- 比較すると実測値が結構高いけどなんでだろう
- 瞬間最大電流
- キー同時押し pull-up * 2 + active + timer0 + FET GS接地抵抗(440k)電流 + ADC
- 0.7338mA
パワーダウン中の消費は AVR ISP Mark II と繋っていたからで、RESET をはずせば 0uA になった
- パワーダウンモード 0.0uA未満
- アイドル中 90uA -> 0.09mA
- キーイング中 198uA -> 0.198mA with FET