pic.h
をのぞいていてSLEEP()
マクロを見つけた。
消費電力の大半はLEDだろうけど、それでもsleepさせることができれば何か役に立つこともあると思ってPIC時計に入れてみた。
入れた場所はメインループの最後のところ。
sleepから復帰した場合にsleepの次の命令を実行してから復帰する原因となった割り込み処理に入るということで、sleep
命令の次にはnop
命令を置くのが定石らしいので、以下のようにNOP()
マクロを置いた。
SLEEP(); NOP();
このまま実行するとチラチラッと時間を表示し、最後に表示した桁だけが煌煌と表示した状態でそれっきり…
データシートを調べたらタイマー1のT1SYNC
が0(=同期)だと「sleepすると一緒に止まる」、1(=非同期)だと「sleepしても動く」というので誤差が出るけど1に設定して再起動。
すると、1秒ごとにチラチラッと時間を更新するようになった。
それでも結局は最後に表示した桁だけが表示されているようなもので、誤差をチェックするのも大変。