PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第102回]
●PICUSBIO−03(51)Timer3(9)COMPAREモード
COMPAREモードは[第89回]で説明をしました。
Timer1を使ったCOMPAREモードのテストプログラムは[第90回]〜[第93回]で作成してテストを行ないました。
CAPTUREモードと同様COMPAREモードもTimerとしてTimer1かTimer3のどちらを使うかという違いがあるだけで動作としてはTimer1を使った場合でもTimer3を使った場合でも同じです。
ということなのでTimer3については[第90回]で作ったプログラムをTimer3用に書き直してそれでテストをして終わりにしたいと思います。
プログラムを変更する前に念のために再実行して確かめておこうとしましたら。
どういうわけか本来出力される波形が正しく出力されません。
それで気が付きました。
この画面はその前に別のプログラムのテストを行なったあとの画面でした。
そのテストではTimer1、CCP1の割り込みを使っていました。
その割り込みプログラムがまだ働いていました。
そのことに気が付きましたのでpicout INTCON,0をダイレクトモードで実行して割り込みを禁止したところやっとまともな出力波形になりました。
PICUSBIOボードをリセットしないでそのまま続いて別のプログラムを実行したりするとプログラムによってはそういうことが起きる可能性があります(一旦USBケーブルを外すとリセットされます)。
そのことを忘れないために備忘録として残します。
下がTimer3用に一部を書き直したCOMPAREモードのプログラムです。
比較し易いように先にTimer1用のプログラムをLOADしました。
その次にLOADしたのがTimer3を使ったCOMPAREプログラムです。
10行でTRISCに$DFを設定しています。
CCP1端子はPORTCのRC5端子と多重化されています。
CCP1端子から信号を出力するためにはTRISCのビット5を0にしなければなりません。
20行でT3CONに$8Bを設定するとともにT1CONに0を設定しています。
さきほどTimer1を使ってCOMPAREモードのプログラムを実行した直後なので念のためTimer1を停止させるためです。
クロックを外部入力端子(T13CKI)から入力するように設定しています(T3CONのbit1=1)。
T3CONのbit1を1にすることでT13CKI端子から入力されるクロックの立ち上がりでTimer3がカウントアップします。
T3CONのbit3=1でCCP1のTimerとしてTimer3が選択されます。
T3CONは[第94回]で説明しています。
30行でCCP1CONに2を設定しています(bit3−bit0を0010に設定)。
CCP1CONは[第89回]で説明しています。
40行、50行でCCPR1に$000Aを設定しています。
Timer3が入力パルスを10回カウントしたところでCCPR1と一致します。
60行〜80行でPIR1を0にする(CCP1IFをクリアする)とともにTMR3レジスタをクリアします。
オシロでの観察を容易にするためにプログラムを繰り返し実行するようにしました(100行)。
そのあたりの動作については[第90回]で説明をしていますので参照してください。
プログラムを実行しました。
上側(CH1)がT13CKI端子の入力パルスです。
下側(CH2)がCCP1端子の出力です。
入力パルスの立上りに同期して出力が変化しています。
その直後にTimer3がクリアされますからTimer3はまた0からカウントを始めます。
次の入力パルスの立上りから数えて10個目の立上りで出力が反転しています。
水平同期周波数を200msecにしました。
CH2の波形が一周期分見えるようになりました。
PIC−USBIO using BASIC[第102回]
2022.11.17upload
前へ
次へ
ホームページトップへ戻る