目次PIC入門628ハード

PIC16F628のCCP機能

PIC16F628にはCCP機能があります。これはキャプチャ(Capture)、コンペア(Compare)、PWM(Pulse Width Modulation)の頭文字から採った名前です。PIC16F628はCCPモジュールを1つ持っています。CCP機能はPIC16F873と同様なので、以下の説明で一部のレジスタ類はPIC16F873のページを使用しています。

キャプチャ機能 外部からの信号が入力されたときにタイマー1の値を読み込む機能です。
周波数カウンターとか信号の周期時間などの計測に利用できます。
コンペア機能 CCPRxレジスタの設定値とタイマー1の値を比較する機能です。
周期的に割り込みを発生させる場合などに便利です。
PWM機能周期的なパルスを発生させる機能です。パルス幅(デューティ)を変化させて外部回路を制御するのに使用します。


キャプチャおよびコンペアはタイマー1を使用して動作し、PWMはタイマー2を使用して動作します。

CCP1用のレジスタ(CCPR1)は8ビットのCCPR1Lレジスタ(下位バイト)とCCPR1Hレジスタ(上位バイト)とで構成されています。CCP1の動作はCCP1CONレジスタで制御することができます。
コンペア(比較)モードで内容の一致が発生するとトリガ信号によりタイマー1がリセットされます。




キャプチャモード

キャプチャモードではRB3/CCP1ピン(pin9)の変化が発生したときにタイマー1の内容をCCPR1レジスタ(CCPR1HとCCPR1L)に取り込みます。RB3/CCP1ピンはTRISCレジスタにより必ず入力モードに設定する必要があります。出力モードに設定した場合、出力データの条件がキャプチャ条件になります。

変化検出には以下のようなタイプを指定することができます。これらの指定はCCP1CONレジスタのCCP1M0ビットからCCP1M3ビットまでの4ビットで指定することができます。

CCP1M3-0制御内容
0000CCPを使用しない
0100入力信号の立ち下がり毎にトリガ
0101入力信号の立ち上がり毎にトリガ
0110入力信号の4回目の立ち上がり毎にトリガ
0111入力信号の16回目の立ち上がり毎にトリガ

キャプチャが行われるとPIR1レジスタのCCP1IFビットがセットされ、割り込みが発生します。CCP1IFビットは他の割り込みと同様にソフトウェアでクリアする必要があります。CCPR1にキャプチャされたデータを読む前に次のキャプチャが行われた場合、古いデータは無くなります。

キャプチャモードを使用する場合、タイマー1は必ず同期式のタイマーモードで動作させる必要があります。非同期の場合にはキャプチャ機能は動作しません。キャプチャモードを解除するときには誤動作を防止するためにPIE1レジスタのCCP1IEビットおよびPIR1レジスタのCCP1IFビットをクリアする必要があります。




コンペアモード

コンペアモードではCCPR1レジスタの内容とタイマー1(TMR1)の内容が常に比較されます。


内容が一致するとCCP1CONレジスタのCCP1M0ビットからCCP1M3ビットの内容により以下の動作をします。

CCP1M3-0制御内容
1000 一致時にRB3/CCP1(pin9)をHレベルに設定
PIR1レジスタのCCP1IFビットが設定され、割り込みが発生
1001 一致時にRB3/CCP1(pin9)をLレベルに設定
PIR1レジスタのCCP1IFビットが設定され、割り込みが発生
1010 RB3/CCP1ピンの状態は変化しない
PIR1レジスタのCCP1IFビットが設定され、割り込みが発生
1011 特殊トリガ信号を発生させる
RB3/CCP1ピンの状態は変化しない
PIR1レジスタのCCP1IFビットが設定され、割り込みが発生

RB3/CCP1ピンはTRISCレジスタにより必ず出力モードに設定する必要があります。
コンペアモードを使用する場合、タイマー1は必ず同期式のタイマーモードで動作させる必要があります。非同期の場合にはキャプチャ機能は動作しません。




PWMモード
PWM(Pulse Width Modulation)モードではCCP1(pin9)に連続的なパルス信号を出力することができます。

PWMモードを使用するためにはCCP1CONレジスタのCCP1M3ビットおよびCCP1M2ビットを1に設定します。

CCP1M3-0制御内容
11xxPWMモード

このモードではTRISCレジスタのCCP1に該当するビットを0にして出力モードにする必要があります。
パルスの周期はPR2の設定値、発振器の発振周波数、タイマー2のプリスケーラ値により決まります。
また、パルスのデューティ(Hレベルの時間)はCCPR1LレジスタおよびCCP1CONレジスタのCCP1XビットおよびCCP1Yビット、発振器の発振周波数、タイマー2のプリスケーラ値により決まります。
CCPR1Lレジスタの内容が上位の8ビットとして使用され、CCP1Xビットが第2ビット目、CCP1Yビットが第1ビット目として使用されます。デューティ制御の最小単位は発振器の周期時間です。10MHzの時には0.1マイクロ秒になります。デューティの最大分解能力は1024です。
PWM周期よりデューティ時間を長く設定すると出力は常にHレベルになります。PWMのデューティ指定を0に設定すると出力は常にLレベルになります。

PWM周期およびPWMデューティについてはPIC16F873の項目を参照してください。