エンベデッドシステムスペシャリスト 2009年 午後1 問01
電池で動作するガスメータに関する次の記述を読んで、設問1~3に答えよ。
ガスメータの概観を図1に示す。

〔ガスメータの機能〕
ガスメータは、ガスの使用量(以下、ガス量という)を計測し、それまでに流れたガス量の累積値(以下、ガス量累積値という)をLCD表示器に表示する。また、単位時間当たりに流れるガス量が一定量を超える状態を検出した場合には、ガス漏れと判断してガスを遮断し、LEDを点灯する。
〔ガスメータの構成〕
ガスメータのブロック図を図2に示す。

〔タイマとカウンタの動作〕
(1) タイマ0は常に動作しており、カウントアップして設定値に達すると、割込み要求を出力し、0からカウントアップする。
(2) タイマ1は、カウントアップして最大値に達すると、最大値のまま停止する。MPUからリスタートコマンドを受けると、0からカウントアップを再開する。
(3) カウンタの構造を図3に示す。カウンタの16ビットカウンタの値と16ビットレジスタの値とが一致すると、割込み要求信号を出力する。このとき、モードレジスタのbit7に1が設定されているとカウンタをクリアする。このカウンタの割込みの優先度を最も高くしている。カウンタの入力端子には、流量センサの出力が接続されており、ガスが流れ出すと流量センサからパルスが入力される。
〔MPUの状態とMPUの状態遷移〕
MPUの状態と動作電流を表1に、その状態遷移図を図4に示す。
なお、MPUの状態にかかわらず、タイマ0とタイマ1は、同じ周波数のクロックで動作しており、カウンタは常に動作している。

〔ガスメータのソフトウェア動作〕
電源投入後の初期化の処理を行った後、MPUを待機状態にする。カウンタの割込み処理プログラムでガス量の計測やガス漏れの検出を行い、タイマ0の割込み処理プログラムでガス量累積値の表示とガスの遮断及び遮断の解除を行う。その詳細な動作を次に示す。
(1) カウンタの割込み処理プログラム及び割込みから復帰後の動作
割込み要求を受け付けると、ガス量累積値をインクリメントする。さらに、タイマ1によってカウンタの割込み要求間隔を見て、ガス漏れと判断したときは、ガス漏れを示すフラグ(以下、ガス漏れフラグという)をセットした後に割込みから復帰し、MPUを待機状態にする。
なお、この割込み処理プログラムの実行時間は、割込み要求の間隔よりも十分に短い。
(2) タイマ0の割込み処理プログラム及び割込みから復帰後の動作
割込み要求を受け付けると、通常動作命令を実行して通常状態になった後、次の処理をする。
① ガス量累積値を、LCD表示器に表示する。
② ガス漏れフラグがセットされている場合は、割込み禁止状態にした後、ガスを遮断してLEDを点灯する。次に、省電力動作命令を実行して省電力状態になった後、復帰ボタンの入力を待つ。復帰ボタンが押されると、ガスの遮断を解除し、LEDを消灯する。ガス漏れフラグをクリアした後、割込み許可状態にして割込みから復帰し、MPUを待機状態にする。
③ ガス漏れフラグがセットされていない場合は、割込みから復帰し、MPUを待機状態にする。
なお、ガス漏れフラグがセットされていない場合は、この割込み処理プログラムの実行時間は割込み要求の間隔よりも十分に短い。
設問1:ガスメータの動作について検討する。
設問1(1)
問題文を見るガスメータは、ガス量の計測やガス漏れの検出などの処理を、メインプログラムで行うのではなく、カウンタとタイマ0の割込み処理プログラムで行っているが、その理由は何か。15字以内で述べよ。
模範解答
消費電力を低減するため
解説
解答の導き方
この設問は、ガス量の計測やガス漏れの検出をメインプログラムで常時行うのではなく、割込み処理で行う理由を問うています。
まず、タイマやカウンタはMPUの状態にかかわらず動作します。本文には「カウンタは常に動作している」とあり、ガスの流れによるパルスやタイマの割込み要求を、MPUが待機している間も検出できます。
次に、本文では割込み処理の後にMPUを待機状態にすると説明されています。表1によると、待機状態の動作電流は通常状態より小さいため、MPUが処理の必要なときだけ割込みで動作し、それ以外の時間を待機状態で過ごせば、消費電力を抑えられます。
一方、メインプログラムでガスの流れなどを常に確認する方法では、MPUが継続して処理を行う必要があり、待機状態で過ごす時間が減ります。そのため、この構成の目的は消費電力を低減することです。
誤りやすいポイント
- 割込み処理を使う理由を、処理速度の向上だけで説明しないようにします。この設問では、MPUが待機状態になることと動作電流の違いが根拠です。
- タイマやカウンタまで停止すると考えないようにします。MPUの状態にかかわらず、これらは動作します。
- 「待機状態」はMPUの動作電流が小さい状態であり、タイマやカウンタも含めて装置全体の動作が止まるという意味ではありません。
FAQ
Q: 割込み処理では、どのようなときにMPUが動作しますか?
A: カウンタやタイマが割込み要求を出したときに処理し、処理後は待機状態に戻ります。
A: カウンタやタイマが割込み要求を出したときに処理し、処理後は待機状態に戻ります。
Q: メインプログラムで常に確認する方法との違いは何ですか?
A: 常に確認する方法ではMPUが継続して処理する必要があります。割込みを使えば、処理が必要なとき以外はMPUを待機状態にできます。
A: 常に確認する方法ではMPUが継続して処理する必要があります。割込みを使えば、処理が必要なとき以外はMPUを待機状態にできます。
Q: 待機中にガスの流れを検出できるのはなぜですか?
A: カウンタはMPUの状態にかかわらず動作し、流量センサからのパルスを受け付けるためです。
A: カウンタはMPUの状態にかかわらず動作し、流量センサからのパルスを受け付けるためです。
関連キーワード: 割込み処理、イベント駆動処理、ポーリング、待機状態、低消費電力設計
設問1(2)
問題文を見る1時間当たりのMPUの各状態の累積動作時間例を表2に示す。このときの、1時間当たりの平均消費電力(ミリW)を求めよ。答えは小数第3位を四捨五入して、小数第2位まで求めよ。ここで、MPUの動作電圧は5Vとし、MPUの状態の切替え時間や切替え時の動作電流、及びMPU以外の動作電流は無視するものとする。


模範解答
0.09
解説
解答の導き方
求めるのは、1時間の間にMPUが各状態で動作した時間を考慮した平均消費電力です。各状態の動作電流は表1に示されており、累積動作時間は表2に示されています。
まず、表2で「残りの時間」とされている待機状態の時間を求めます。1時間は3,600秒なので、
です。
次に、各状態の動作電流をそろえます。通常状態は2ミリアA、省電力状態は100マイクロAなので0.1ミリアA、待機状態は10マイクロAなので0.01ミリアAです。
各状態の電流と動作時間を掛け合わせて合計し、3,600秒で割ると、平均電流が求められます。
=\frac{64}{3,600}
\approx0.01778\text{ミリアA}$$
動作電圧は5Vです。電力は電圧と電流の積で求められ、VとミリアAを掛けるとミリWになるため、
$$5\times0.01778\approx0.08889\text{ミリW}$$
となります。小数第3位を四捨五入して小数第2位まで表すと、0.09ミリWです。
#### 誤りやすいポイント
- 3つの状態の電流を単純に平均してはいけません。各状態の動作時間が異なるため、電流に動作時間を掛けた加重平均を求めます。
- 省電力状態の100マイクロAを100ミリアAと読み違えないようにします。100マイクロAは0.1ミリアAです。
- 待機状態の時間は0秒ではなく、1時間から通常状態と省電力状態の時間を引いた3,500秒です。
- 平均電流の単位をミリアAで求めた場合、5Vを掛けた結果の単位はミリWになります。
#### FAQ
Q: 待機状態の時間を求めるのはなぜですか?
A: 1時間全体の平均を求めるため、表2に時間が明記されていない待機状態についても、残りの時間を算出する必要があります。
Q: 各状態の電流を単純平均できないのはなぜですか?
A: 各状態で動作する時間が異なるためです。動作時間が長い状態ほど、平均消費電力への影響が大きくなります。
Q: 電流をミリアAで計算すると、電力の単位がミリWになるのはなぜですか?
A: 電力は電圧と電流の積です。VとミリアAの積はミリWで表せます。
---
**関連キーワード:** 加重平均、平均電力、電流、動作時間、単位換算設問2:
問題文を見る図3のカウンタを使用して、ガス量の計測について検討する。
流量センサは、ガスが0.1ミリリットル流れるとパルスを1個出力するものとする。1,000ミリリットルのガスが流れるごとに、カウンタ割込み要求を出力するようにしたい。このとき、カウンタのモードレジスタと16ビットレジスタに設定する値を答えよ。ここで、モードレジスタの値は16進数で、16ビットレジスタの値は10進数で答えよ。
模範解答
モードレジスタ:81
16ビットレジスタ:10000
解説
解答の導き方
求めるのは、カウンタに流量センサのパルスを数えさせ、ガスが1,000ミリリットル流れるごとに割込み要求を出すための設定値です。
まず、流量センサは「ガスが0.1ミリリットル流れるとパルスを1個出力」します。したがって、1,000ミリリットルに対応するパルス数は、
です。図3では、16ビットカウンタの値と16ビットレジスタの値が一致すると割込み要求信号が出力されます。そのため、16ビットレジスタには、パルス数に合わせて10進数で10000を設定します。
次に、モードレジスタを決めます。図3では、bit 0がカウント信号の選択であり、1にすると入力端子が選ばれます。今回は流量センサからのパルスを数えるため、bit 0を1にします。
また、bit 7はカウンタのクリア信号の有効・無効を指定します。割込み要求が出るたびにカウンタをクリアし、次の1,000ミリリットル分のパルスを数え始める必要があるため、bit 7も1にします。bit 1からbit 6には常に0を設定するので、モードレジスタのビット列は2進数で10000001です。これを16進数で表すと81です。
誤りやすいポイント
- ガス量をそのままレジスタに設定しないようにします。レジスタに設定するのはガス量ではなく、そのガス量に対応するパルス数です。
- bit 0は内部クロックと入力端子の選択です。流量センサのパルスを数える場合は、入力端子を選ぶ1にします。
- bit 7を1にすると、比較一致時にカウンタをクリアする設定になります。bit 7とbit 0の両方を設定し、bit 1からbit 6を0にすると、モードレジスタの値は16進数で81です。
FAQ
Q: 0.1ミリリットルごとに1パルスなら、1,000ミリリットルで何パルスですか?
A: なので、10000パルスです。
A: なので、10000パルスです。
Q: bit 7を1にするのはなぜですか?
A: 比較一致時にカウンタをクリアし、次の1,000ミリリットル分のパルスを数えられるようにするためです。
A: 比較一致時にカウンタをクリアし、次の1,000ミリリットル分のパルスを数えられるようにするためです。
Q: bit 1からbit 6も設定する必要がありますか?
A: ありません。図3の設定では、bit 1からbit 6には常に0を設定します。
A: ありません。図3の設定では、bit 1からbit 6には常に0を設定します。
関連キーワード: パルス計数、カウンタ、比較器、割込み、レジスタ設定
設問3:ガス量を計測するカウンタの割込み処理の流れ図を図5に示す。

設問3(1)
問題文を見る読み込んだタイマ1の内容が定められた値より小さいときにガス漏れと判断し、ガス漏れフラグをセットしているが、なぜ、定められた値より小さいときにガス漏れと判断しているのか。50字以内で述べよ。
模範解答
一定量のガスが流れるとカウンタの割込みが入り、ガス漏れ時はこの割込み間隔が短くなるから
解説
解答の導き方
図5では、カウンタの割込み処理のたびにタイマ1の内容を読み込み、その後タイマ1をリスタートしています。つまり、読み込んだ値は、前回のカウンタ割込みから今回の割込みまでに経過した時間を表します。タイマ1はカウントアップするので、経過時間が短いほど読み込んだ値は小さくなります。
一方、本文では、カウンタの割込み要求間隔をタイマ1で確認し、ガス漏れを判断するとあります。また、カウンタには流量センサからパルスが入力され、一定量のガスが流れるごとに割込みが発生します。したがって、一定量のガスが流れる間隔が短くなると、単位時間当たりに流れるガス量は多くなります。
このため、タイマ1の値が定められた値より小さい場合は、一定量のガスが流れる時間が短く、流量が大きい状態だと判断できます。その状態をガス漏れとみなすため、定められた値より小さいときにガス漏れフラグをセットします。
誤りやすいポイント
- タイマ1の値が小さいことを、流量が少ないことと取り違えないようにします。ここでは、一定量のガスが流れるまでの時間が短いことを示します。
- タイマ1が測っているのは、ガス量そのものではなく、カウンタ割込み間の時間です。
- カウンタ割込みが発生するたびにタイマ1をリスタートするため、読み込んだ値は前回の割込みからの経過時間になります。
FAQ
Q: なぜカウンタ割込みの間隔から流量を判断できるのですか?
A: 1回の割込みが発生するまでに流れるガス量が一定だからです。その量が短時間で流れるほど、単位時間当たりの流量は大きくなります。
A: 1回の割込みが発生するまでに流れるガス量が一定だからです。その量が短時間で流れるほど、単位時間当たりの流量は大きくなります。
Q: タイマ1の値が定められた値より大きい場合は、なぜガス漏れと判断しないのですか?
A: 一定量のガスが流れるのに時間がかかっていることを表し、流量が大きくなっている状態ではないためです。
A: 一定量のガスが流れるのに時間がかかっていることを表し、流量が大きくなっている状態ではないためです。
Q: タイマ1をリスタートするのはなぜですか?
A: 次のカウンタ割込みまでの時間を、前回の割込みからの経過時間として測るためです。
A: 次のカウンタ割込みまでの時間を、前回の割込みからの経過時間として測るためです。
関連キーワード: 割込み処理、流量検出、時間計測、しきい値判定、カウンタ
設問3(2)
問題文を見るカウンタの割込みの優先度を最も高くしている理由は何か。40字以内で述べよ。
模範解答
タイマ1の読取りが遅れ、ガス漏れの判断を間違える可能性があるから
解説
解答の導き方
カウンタの割込み処理では、「タイマ1によってカウンタの割込み要求間隔を見て」ガス漏れを判断します。そのため、割込み要求が発生してからタイマ1の値を読み取るまでに時間がかかると、その遅れもタイマ1の値に含まれ、実際の割込み要求間隔より大きな値を読み取る可能性があります。
ガス漏れの判断は、読み込んだタイマ1の内容が定められた値より小さいかどうかで行います。読取りが遅れて値が大きくなると、実際にはガスが短時間で一定量流れていても、ガス漏れではないと誤判定するおそれがあります。
そこで、カウンタの割込みを最も高い優先度にし、ほかの割込み処理による遅れをできるだけ小さくして、タイマ1を適切なタイミングで読み取れるようにしています。
誤りやすいポイント
- カウンタ割込みの優先度を高くする目的を、流量センサのパルスを取りこぼさないためだけだと考えないようにします。ここでの要点は、タイマ1の読取りが遅れることで、ガス漏れの判断に使う時間が不正確になることです。
- 割込みの優先度を上げても、タイマ1のカウント速度が速くなるわけではありません。優先度が関係するのは、割込み処理を始めるまでの遅れです。
- 読取りの遅れはタイマ1の値を大きくする方向に働きます。その結果、短い時間で一定量のガスが流れた場合に、ガス漏れを見逃す可能性があります。
FAQ
Q: タイマ1は、カウンタの割込み要求があるたびに自動でリセットされますか?
A: いいえ。割込み処理でタイマ1の内容を読み込んだ後、リスタートします。
A: いいえ。割込み処理でタイマ1の内容を読み込んだ後、リスタートします。
Q: 割込み優先度を高くすると、カウンタが流量センサのパルスを数える速度も変わりますか?
A: 変わりません。パルスの計数はカウンタが行い、割込み優先度は割込み処理の開始順序に関係します。
A: 変わりません。パルスの計数はカウンタが行い、割込み優先度は割込み処理の開始順序に関係します。
Q: タイマ1の読取りが遅れると、なぜガス漏れを見逃すことがあるのですか?
A: 読み取った値が実際の間隔より大きくなり、ガス漏れと判断するための基準値を下回らなくなる可能性があるからです。
A: 読み取った値が実際の間隔より大きくなり、ガス漏れと判断するための基準値を下回らなくなる可能性があるからです。
関連キーワード: 割込み優先度、割込み遅延、タイマ、カウンタ、ガス漏れ検出




