PIC12F1822でLチカしたときの消費電流を測ってみました。どのくらい消費電流が抑えられるか(=どのくらい電池動作ができるか)を確認したいので。
レジスタの設定はすべてCode Cofiguratorにお任せ。
CPUのクロックは初期設定の500kHzです。
特にあれこれ設定はいじらず、TMR1でぼんやり明滅するタイミング(100ms周期)を生成、割り込みを発生させて、PWM2のデューティーを変動させます。TMR2は100us周期のクロックを生成して、ECCPでPWM波形を生成します。そして、PWM端子の出力に1kΩを通して高輝度LEDを接続して点灯させます。なお、不要な端子は入力端子として、貫通電流による消費電力増加を防ぐため内部プルアップを有効化してあります。
作成したソースコードは main.c の以下の部分だけです。見ての通り、初期化以外はすべて100msに1回の割り込みの際に処理しています。
#include "mcc_generated_files/mcc.h" uint8_t c=0; uint16_t pwmt[]={ 0, 2, 4, 6, 8,10,12,14,16,18, 20,20,20,20,20,20,20,20,20,20, 18,16,14,12,10, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; void TMR1int(void){ c++; if(c == sizeof(pwmt)/sizeof(uint16_t)) c=0; EPWM_LoadDutyValue(pwmt[c]); } void main(void) { SYSTEM_Initialize(); TMR1_SetInterruptHandler(TMR1int); INTERRUPT_GlobalInterruptEnable(); INTERRUPT_PeripheralInterruptEnable(); while (1) { // Add your application code } }
単4電池2本で動かしてみると、消費電流は平均で0.2mA〜0.6mAなので、こちらの資料を参考にすると2,900時間くらい持つ計算です。つまり、約4ヶ月くらいでしょうか。ただ、電圧が落ちてくるとLEDが点灯しなくなる可能性があるので、実際にはそんなに持たないかもしれませんが。
<追伸>
ソースコードの中の EPWM_LoadDutyValue(pwmt) という部分は、実際には EPWM_LoadDutyValue(pwmt[c])です。SyntaxHighlighter を使っているのですが、半角の[c]がタグとして扱われるのか、消えてしまいます。orz