電子ブロック工房

PIC12LF1552を用いたタイマー

2026年9月27日

20260926-breadboard.png

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 年使える計算)。

20260927-PIC12LF1552.png

そこで、この石を用いて、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) に繋いで、電源の接地ラインを制御する。

20260927-schematic.png

この仕組みを利用して、およそ4分ごとに Raspberry Pi Pico で ePaper に情報を表示するプロジェクトを作成し、GitHub に載せているので、そちらも参考にしていただきたい。

実際の電流消費量測定

この記事の最初に挙げた写真の回路を、ブレッドボード上に PIC12LF1552 と Raspberry Pi Pico を用いて作成し(スリープ時間は8秒の設定)、消費電流を測定してみた。動画は、x.com に挙げてある。設計通り、スリープ時の消費電流は、ほぼゼロ(0.01 mA 未満)である。仮に 0.005 mA の消費があるとしても(設計ではもっと少ない)、単三乾電池がスリープ状態では 50 年ほど持つ計算だ。乾電池の保存可能な期限などを考えると、消費電流はほぼゼロである。

コメント

コメントはありません

コメント送信