コンテンツにスキップ

カウンタとは

カウンタとは、合図が一つ届くたびに、覚えている値を一つ進める順序回路です。 数える働きは値を覚える力と一つ進める力の組み合わせなので、カウンタはレジスタと同じフリップフロップからつくられます。カウンタの価値は、数える仕事をCPUから引き取ることにあります。

フリップフロップを数段つなぐと、各段から入力の数分の一の周波数が取れる

Section titled “フリップフロップを数段つなぐと、各段から入力の数分の一の周波数が取れる”

順序回路は、いまの入力だけでなくそれまでの入力にも出力が左右される論理回路で、状態を覚えるために最も広く使われている素子がフリップフロップです1。そのうちT-FFは、入力T=1で状態が変化します。1が届くたびに反転する素子がそろえば、数を数える回路の骨格がそろいます。Dフリップフロップを多段に重ねても、シフトレジスタや分周回路になります2。

4ビット・バイナリ・カウンタの出力
CLKQ0Q1Q2Q3÷2÷4÷8÷16
CLKのパルスが一つ入るたびにQ3〜Q0の4ビットの値が一つ進み、各段の出力からは入力の2分の1、4分の1、8分の1、16分の1の周波数が取れます。

汎用ICではこの形がそのまま部品になっています。Texas InstrumentsのSN74HC393は、フリップフロップ8個と追加のゲートで、独立した4ビットのカウンタ二つを一つのパッケージに収めています3。それぞれのカウンタはクリア入力CLRとクロック入力CLKを持ち、つなげば256分周まで作れるとしています3。4ビットを二つつないだ8ビットに当てはめると、2の8乗で256です。

各段の出力が並列に取り出せるので、入力の数え上げ周波数の何分の一でも、システムのタイミング信号に使えます3。数える回路は、そのまま周波数を割る回路でもあります。

入力の形には条件があります。同社は、電源電圧VCC=2 Vで入力の遷移時間ttが1000 nsのとき、素子は壊れないものの、数え上げなどの動作中のCLK入力は保証しないとしています3。

ソフトウェアで時間を数えると、CPUが数えることに掛かりきりになる

Section titled “ソフトウェアで時間を数えると、CPUが数えることに掛かりきりになる”

周辺機能のタイマを使わず、ソフトウェアで時間を計ることもできます4。例えばループ部分に1マイクロ秒かかるなら、1000回の繰り返しで1ミリ秒、100万回で1秒を数えられます4。

CPUの時間の使い方
ソフトウェアで数えるCPU時間を数えるタイマで数えるタイマ数えるCPU別の仕事割り込み
ソフトウェアで数えると、その間のCPUの時間はすべて数えることに使われます。タイマに任せれば、CPUは割り込みが届くまで別の仕事へ回れます。

ただしこの数え方では、CPUが時間を数えることに集中してしまい、ほかの仕事へ回れません4。刻み幅も一つしか作れませんが、現実のマイコンは0.1秒や1024分の1秒といったさまざまな刻み幅の時間に応じる必要があります。さらに、100MHz駆動のCPUを50MHz駆動へ変えると、ループ1回分の所要時間が2倍になり、時間を計るソフトウェアの修正が要ります4。こうした手間とミスの起きやすさから、ルネサス エレクトロニクスはソフトウェアで時間を計ることを極力避けているとしています。

数え切ったら、割り込みでCPUへ知らせる

Section titled “数え切ったら、割り込みでCPUへ知らせる”

マイコンの周辺機能にあるさまざまなタイマは、指定時間の経過時や動作の完了時に割り込み信号をCPUへ送ります4。CPUは割り込みが届くまで別の仕事へ回れるため、作業効率が高まります。台所のタイマに時間をセットしてから他の家事へ移るのと同じ形で、カウンタが数える係を引き受け、CPUは待つ役から解放されます。

刻む時間は、コンペア値と分周比の二つで広く変えられます。RL78/G23の32ビット・インターバル・タイマを8ビット・カウンタ・モードで使う例では5、チャネルごとのコンペア値をITLCMP000=3FH、ITLCMP001=7FH、ITLCMP012=BFH、ITLCMP013=FFHに設定します。タイマ割り込みの発生時にコンペア一致検出フラグを見て、割り込みが2000回起きるごとにLED表示を反転させます。

スイッチを押すと各チャネルの分周比が切り替わり、fITL0からfITL0を128で割った値まで、2倍刻みの8段階でLEDの点灯周期が変わります。これらの値は、RL78/G23と専用のプロトタイピングボードを用い、高速オンチップ・オシレータ・クロック32MHz、電源5.0Vで動作を確かめたサンプルコードのものです。

ウォッチドッグタイマは、減らす向きに数えて暴走を見張る

Section titled “ウォッチドッグタイマは、減らす向きに数えて暴走を見張る”

ウォッチドッグタイマ(WDT)は、タイマの中でも異色の存在で、プログラムの暴走を見張る番犬にたとえられます4。見張られるプログラムは、起動のときにあらかじめ決めた値をWDTへ書き込みます。WDTはその値を一定時間ごとに減らし、プログラムが正常に動いていれば、処理が完了する直前にWDTがクリアされます4。

ウォッチドッグタイマの値
WDTの値0書き込んだ値クリア正常な処理アンダーフロー割り込み暴走した処理
正常な処理では、処理が完了する直前にWDTがクリアされます。暴走した処理ではクリアが来ないまま値が0を下回り、アンダーフローの割り込みでCPUへ異常が伝わります。

プログラムが暴走して、WDTに書き込まれた値が0を下回るアンダーフローに至ると、割り込みでプログラムの異常がCPUへ伝わります4。数える向きが下りになると、カウンタは時計から見張り役へ変わります。

プログラムカウンタは、次に取りに行く命令の番地を数える

Section titled “プログラムカウンタは、次に取りに行く命令の番地を数える”

プログラムカウンタ(PC)は、CPUが次にどこの命令を取りに行くかを示す番地を保存しているレジスタです6。0000番地の命令を実行すると値がひとりでに1つ増えて0001番地になるように、命令が一つ済むごとに番地が1つずつ繰り上がり、次の命令が入っている場所を指し直します。

プロセッサの構造の用語では命令アドレスレジスタと呼ばれ7、命令カウンター、プログラムカウンター、逐次制御カウンターが別名です。時間を数えるカウンタも、命令の場所を数えるカウンタも、値を一つ進めて覚え直す動きは共通しています。

カウンタとは何ですか?

合図が一つ届くたびに、覚えている値を一つ進める順序回路です。順序回路は、いまの入力だけでなくそれまでの入力にも出力が左右される論理回路で、状態を覚える素子として最も広く使われているのがフリップフロップです。

どんな部品でできていますか?

フリップフロップです。T-FFは入力T=1で状態が変化する素子で、Dフリップフロップを多段に重ねるとシフトレジスタや分周回路になります。汎用ICのSN74HC393は、フリップフロップ8個と追加のゲートで4ビットのカウンタを二つ作っています。

ソフトウェアのループで数えるのと、どちらがよいのですか?

回路で数える方です。ソフトウェアで時間を計るとCPUが数えることに掛かりきりになり、刻み幅も一つしか作れず、CPUのクロック周波数を100MHzから50MHzへ変えるとループ1回の所要時間が2倍になってソフトウェアの修正が要ります。ルネサス エレクトロニクスは、ソフトウェアで時間を計ることを極力避けているとしています。

数え切ったことは、どう伝わりますか?

割り込みで伝わります。マイコンの周辺機能にあるタイマは、指定時間の経過時や完了時に割り込み信号をCPUへ送り、CPUは割り込みが届くまで別の仕事へ回れるため作業効率が高まります。

実際の製品では、どんな設定になりますか?

RL78/G23の例では、32ビット・インターバル・タイマを8ビット・カウンタ・モードで使い、コンペア値をITLCMP000=3FH、ITLCMP001=7FH、ITLCMP012=BFH、ITLCMP013=FFHに設定して、タイマ割り込みが2000回起きるごとにLED表示を反転させます。動作は高速オンチップ・オシレータ32MHz、電源5.0Vで確かめられています。

ウォッチドッグタイマもカウンタですか?

減らす向きに数えるカウンタです。あらかじめ書き込まれた値を一定時間ごとに減らし、プログラムの暴走で値が0より小さくなるアンダーフローが起きると、割り込みで異常をCPUへ知らせます。

プログラムカウンタとは何ですか?

次に取りに行く命令の番地を持つレジスタです。0000番地の命令を実行すると値がひとりでに1つ増えて0001番地になるように、命令が一つ済むごとに番地が1つずつ繰り上がります。別名に命令カウンター、逐次制御カウンターがあり、命令アドレスレジスタとも呼ばれます。

7件を表示
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7