プログラマブル・カウンタ

プログラマブル・カウンタ（）とは電子回路の一つで、任意の回数の入力信号変化を計数することができるカウンタ。

プログラマブル・カウンタは、通常2つのレジスタから構成される。1つは入力パルスがある度に1ずつ増加する回路を持つもので、もう1つは前者をクリアする値を保持しておくものである。CPUがこれらのレジスタの値を読み書きできるようになっていることが多い。

また、これらのレジスタの値を比較して、一致した場合にカウント値をゼロクリアする信号を生成する回路も持っている。このクリア信号はたいてい外部に取り出せるようになっており、CPUに対して割り込みをかける用途に用いられたり、他のカウンタ回路の入力に用いられたりする。

カウンタをクリアするカウント値としてNを設定した場合、クリア信号は入力Nパルス毎に発生することとなる。つまり、入力に定期的に繰り返すパルス信号を与えた場合には、その周波数を1/Nにしたパルス信号を出力する。この観点から、プログラマブル・カウンタは「1/N分周器」と呼ばれることがある。また、この場合の設定値Nを分周比と呼ぶ。

例えばシリアル通信における通信速度（ボーレート）を様々に変化させたい（様々な通信速度に対応できる機器を作りたい）場合、分周比をCPUから自由に変えることができるプログラマブル・カウンタが必要になる。

プログラマブル・カウンタには、入力パルスをカウントする回路の前段に、別のカウンタが併設されていることが多い。この前段のカウンタはプリスケーラと呼ばれる。プリスケーラは回路の簡素化のために、2、4、16など2の冪乗の回数をカウントする毎に出力パルスが出るものであることが多い。

CPUから設定する値が、カウンタをゼロクリアする値ではなく、カウンタがオーバーフロー（最大値を過ぎるまでカウントアップ）した時にリセットする初期値であるように設計されたプログラマブル・カウンタも多い。この場合、設定するのは分周比そのものではなく、[カウンタが計数することのできる最大値-N+1]（2の補数表現として見れば-N）を設定することにより1/N分周器となる。例えば、カウンタ部が8bitで構成されていた場合、(255-10+1)=246を設定すると入力周波数を1/10にする分周器になる。プログラマブル・カウンタをそのような機構にすると、回路が若干簡単になる。

かつてはプログラマブル・カウンタはそれだけで1つのICとして用いられていたが、近年はCPUの付属周辺回路としてCPUチップの中に入ってしまっていたり、CPUの周辺処理を一手に引き受けるチップセットLSIの中の1回路として組み込まれていることのほうが多い。

組み込み機器向けに設計されたCPUの場合、プログラマブル・カウンタに様々な付加機能を与える回路が付いていることが多い。例えば、カウンタをクリアする値の他に、出力値をOFFからONに切り替えるカウンタ値をセットできるレジスタを持っている場合、2つのレジスタの設定をうまく調整すると、ONである時間とOFFである時間を独立に調整しデューティ比を自在に設定した出力波形を作ることができる。このような、パルス幅を制御する技術はPWMと呼ばれ、発光体の明るさの調整や音の音色の調整など様々な用途で用いられている。

また、カウントアップのための入力信号とは別の入力信号と連動し、信号がONである間だけカウントを行ない、信号が途切れた時にカウント値を別のレジスタに転送するという機能を持つものもある。この場合、信号がONであった時間を精密に測定することができる。さらに、カウント値をデジタルアナログ変換する回路と、その出力電圧と外部入力電圧を比較して一致しているかどうかを検出する回路（アナログ・コンパレータ）をつけることにより、簡易型のアナログデジタル変換器を構成することができる。このように構成したアナログデジタル変換器は、変換時間が長くかかるという欠点を持つものの、ごく簡単な回路で作成することができ、IC上への集積も容易であるため、多く用いられている。

これらのように、多機能化したプログラマブル・カウンタは、ICU ()やITU ()などと呼ばれることがある。

デジタル回路