PIC12LF1552を用いたタイマー
2026年9月27日

Microchip社のPIC12LF1552は、XLP (eXtreme Low-Power) という、低消費電力が売りの石で、DIP-8 パッケージもあるので、電子工作にもってこいだ。この石を使って、Raspberry Pi Pico などのマイクロコントローラーを定期的に起動し、一定期間スリープさせるためのファームウェアーを作成した。
PIC12LF1552 とは?
Raspberry Pi Pico などのマイクロコントローラーは、他の Raspberry Pi に比べて低消費電力で、電池駆動でも比較的長く使えるのが特徴だ。それでも最低、数 mA 程の消費があるので、単三電池などを使っている場合、最大での駆動時間は、200 時間程(1週間ぐらい)が限界。ePaper を用いれば、定期的にディスプレイを更新し、必要のないときはスリープにする、などの対処により、より長い時間駆動させることも可能だが、スリープ状態でも消費電流をゼロにすることはできないので、電池を消費してしまう。
Microchip 社は、XLP (eXtreme Low-Power) といううたい文句で、低消費電力の石をいくつか出していて、PIC12LF1552 はそのうちの一つ。データーシートによると、スリープ時の消費電流は、20 nA、今回の制作で使うウォッチドッグタイマー使用時の消費電流は、200 nA である。これだけ少ない消費電流なら、乾電池で用いる際の消費分はほぼゼロだと言える(500 年使える計算)。

そこで、この石を用いて、Raspberry Pi Pico などのマイクロコントローラーの電源をオン・オフするための仕組みを作成する事にした。ePaper を用いたプロジェクトでは、電源がオフの間でも情報が画面に表示される。定期的にマイクロコントローラーをオン・オフするようにすれば、オフの間は電池の消費を、ほぼゼロに抑えることが可能だ。
ピン割り当て
PIC12LF1552 は、電源ピン以外に6つのピンが使える。そのうち、一つは出力で電源制御、一つは入力でマイクロコントローラーからの電源オフ指令の検知に使う。残りの4つのピンの入力で、スリープ時の時間を指定できるようにした。ピン割り当てリストは、下の通り。
Pin #1 (Vdd): 3.3 V Pin #2 (RA5): output, H for operation, L for sleeping Pin #3 (RA4): input, H to continue operation, L to enter sleeping mode Pin #4 (RA3): input, sleeping duration register Pin #5 (RA2): input, sleeping duration register Pin #6 (RA1): input, sleeping duration register Pin #7 (RA0): input, sleeping duration register Pin #8 (Vss): GND
RA5 ピンは、マイクロコントローラを起動するときは H 出力、スリープ時は L 出力になる。従って、N-MOS などのトランジスターをここに繋げば、電源ラインを制御できる。RA4 ピンは、マイクロコントローラーからの指令で、使用中は H 、スリープに入りたいときは L とする。ただし、スリープに入るためには、0.5 秒以上の連続した L シグナルが必要である。 RA0-RA3 レジスターは、以下のようにスリープ時間を設定するために使う。
0b0000: 8 seconds 0b0001: 16 seconds 0b0010: 32 seconds 0b0011: 64 seconds (approximately 1 min) 0b0100: 128 seconds (approximately 2 min) 0b0101: 256 seconds (approximately 4 min) 0b0110: 512 seconds (approximately 9 min) 0b0111: 1024 seconds (approximately 17 min) 0b1000: 2048 seconds (approximately 34 min) 0b1001: 4096 seconds (approximately 1.1 hours) 0b1010: 8192 seconds (approximately 2.3 hours) 0b1011: 16384 seconds (approximately 4.6 hours) 0b1100: 32768 seconds (approximately 9.1 hours) 0b1101: 65536 seconds (approximately 18 hours) 0b1110: 131072 seconds (approximately 36 hours) 0b1111: 262144 seconds (approximately 73 hours)
最短で8秒、最長でほぼ3日のスリープ設定が可能。これらの時間の中間にしたいとき、例えばおよそ 24 時間なら、1.1 時間タイマーを 22 回使うか、4.6 時間タイマーを 5回使うかすればよい。
ソースコードとバイナリー
プログラムは、C で書いてある。ソースコードとバイナリーは、GitHub に置いた。60 行ほどの簡単なプログラムであるが、一応ライセンスは LGPL としてある。
回路例
下は、Raspberry Pi Pico を制御する例。スリープ時間は、256 秒の設定である。RA4 は、100 kΩでゆるくプルアップ。RA5 を N-MOS-FET (2N7000) に繋いで、電源の接地ラインを制御する。

この仕組みを利用して、およそ4分ごとに Raspberry Pi Pico で ePaper に情報を表示するプロジェクトを作成し、GitHub に載せているので、そちらも参考にしていただきたい。
実際の電流消費量測定
この記事の最初に挙げた写真の回路を、ブレッドボード上に PIC12LF1552 と Raspberry Pi Pico を用いて作成し(スリープ時間は8秒の設定)、消費電流を測定してみた。動画は、x.com に挙げてある。設計通り、スリープ時の消費電流は、ほぼゼロ(0.01 mA 未満)である。仮に 0.005 mA の消費があるとしても(設計ではもっと少ない)、単三乾電池がスリープ状態では 50 年ほど持つ計算だ。乾電池の保存可能な期限などを考えると、消費電流はほぼゼロである。