2022.11.6
前へ
次へ
ホームページトップへ戻る


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第92回]



●PICUSBIO−03(41)Timer1(23)COMPAREモード(4)テストプログラム(3)

今回もプログラムを作ってCOMPEREモードのテストをします。
bit3−bit0を1010に設定します。
CCPR1の設定値とTimer1のカウント値が一致するとCCP1割込信号が出されます。
そのほかのアクションはありません。
前回までの設定のようにCCP1端子からの出力もありませんからそのままではカウント値が一致したことをPICの外部で知ることはできません。
それではテストになりませんからカウント値が一致したときにBASICプログラムでPORTCの出力を変化させるようにしました。
下の画面右側がテストプログラムです。

今までのプログラムの一部を変更しました。
10行のTRISCの設定ではビット7(RC7)のみを出力にしています。
COMPAREモードでの出力はありませんから前回までのようにビット5を出力にする必要はありません。
T13CKI端子からパルスを入力するところは今までと同じですからビット6は入力にします。
今回はBASICプログラムでPORTCの出力を行います。
使われていないビットならどこでもよいのですがわかりやすいところでビット7(RC7)を出力に設定しました。
30行でCCP1CONに$0aを設定しています(bit3−bit0を1010に設定)。
今回は前回のようにループの中でCCP1CONを再設定する必要はありませんからプログラムの先頭の部分で設定を行ないます。
そのほかで前回のプログラムと異なるのは65行です。
ここでPORTCの出力を反転させます。
出力はビット7だけですけれどそれ以外のビットはどうでもよいのでわかりやすいように$FFとのXORにしています(’1’とのXORはそのビットの値を反転させます)。
今気が付いたのですが今回のプログラムの目的は割り込み条件が起きたら(CCP1IF=1になったら)そこでPORTCの出力を反転させることです。
ということになるとPORTCの出力は65行ではなくて95行にするべきでした。
でもまあ今回のテストとしてはそれほどの違いは出ないと思いますからよいことにしましょう。

プログラムを実行しました。

上側(CH1)がT13CKI端子の入力パルスです。
下側(CH2)は前回まではCCP1端子の出力でしたが今回はRC7の出力です。
入力パルスの10個目の立上りごとに出力が反転しています。

COMPAREモードの最後のテストです。
bit3−bit0を1011にします。
CCPR1の設定値とTimer1のカウント値が一致すると内部ハード回路のための特別の信号(Special Event Trigger)が出されます。
このときTimer1はリセットされます。
CCP1端子の出力はありません。
上で行なったbit3−bit0を1010にしてのテストと同じようにCCPR1の設定値とTimer1のカウント値が一致したときにRC7の出力を反転させるようにプログラムしました。
下の画面右側がテストプログラムです。

上で実行したテストプログラムの一部を変更しました。
30行のpicout CCP1CON,$0aのところを$0bにしました(bit3−bit0を1011に設定)。
今回は割り込み条件が成立すると(CCPR1の設定値とTimer1のカウント値が一致すると)Timer1がリセットされますからTMR1レジスタに0を設定する部分(70行、80行)は削除しました。

プログラムを実行しました。

上側(CH1)がT13CKI端子の入力パルスです。
下側(CH2)はRC7の出力です。
入力パルスの10個目の立上りごとに出力が反転するはず、だったのですが。
数えてみると10個目ではなくて11個目の立上りごとに出力が反転しています。
T13CKIの入力パルスの周期は87msecです。
十分ゆっくりしたパルスですが念のためにさらにゆっくりしたパルスを入力してみました。

左側のプログラムでT0CONの値を$85にしました。
プリスケーラは1:64に設定されます。
出力パルスの周期は約700msecです([第80回]参照)。
そのようにしてもう一度プログラムを実行しました。

やっぱり同じでした。

11個目の立上りごとに出力が反転しています。

何回か繰り返してテストしてみましたがやっぱり同じです。

どうしてこういうことになるのか確認しないわけにはいきませんでしょう。
次回でもう少し深堀りしてみることにします。

PIC−USBIO using BASIC[第92回]
2022.11.6upload

前へ
次へ
ホームページトップへ戻る