「組み込み」ならではの基礎知識 ――スタートアップ・ルーチンからハードウェアまで
図7-3は低電圧検出器の動作を電池電圧との関係で表しています.検出したいのは「低電圧になった瞬間」ではなく「低電圧状態にあること」なので,検出回路出力信号の「立ち下がりエッジ」ではなく「"L"レベル」を検出します.論理回路の電源電圧は電池電圧が0.7Vになるまで保証され,検出回路が働く0.9Vでは余裕があるので,ソフトウェアは1秒間隔のポーリングでのんびり対応します.電池は負荷や環境によって電圧が変動するので,低電圧を確定するために3回連続の"L"レベル判定で電池警告を出します.
図7-4は電池抜け検出器の動作を電池電圧との関係で表しています.電池が抜けた瞬間をつかまえたいので,立ち下がりエッジを使います.さらに,即座に反応するために割り込みを使います.
電池を使った製品では,電池ホルダの中で電池ががたついてチャタリング(短い時間のON,OFFの繰り返し)を起こし,電池抜けと誤認識される可能性があります.割り込みのしくみによっては,割り込みを多重に受け付けてしまいます.これを防ぐ方法は何通りかあります.一つは,割り込みを受け付けたら割り込み許可命令を実行するまで,次の割り込みを禁止するCPUを使うことです.もう一つは,割り込み処理ルーチンの先頭に,割り込み禁止命令を書くことです.
●格言:変化点か状態か――それが問題だ
エッジ・トリガ,レベル・センスの使い分けは,何をとらえたいのか検討すればおのずと明らかになります.
「~から~になるとき」,「状態が変わるとき」をとらえたいときにはエッジ・トリガを使い,「~であるとき」,「ある状態であること」を検出したいときにはレベル・センスを使います.