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


PIC−USBIO using BASIC

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

[第88回]



●PICUSBIO−03(37)Timer1(19)CAPTUREモード(10)CCP1のプリスケーラ

前回はPICへのアクセスに時間がかかるために入力信号の周期が短いとCAPTUREモードで取得するデータの取りこぼしが起きることがわかりました。
そういうことはどんなシステムでもあることで仕方がないことです。
しかしその限界が40msecというのはいかにも遅い値です。
もう少しなんとかならないかという気持ちになります。
それであらためて考えてみたところもう少しなんとかできることがわかりました。
Timer0やTimer1にはプリスケーラがありますがCCP1(CAPTUREモード)にもプリスケーラの機能があります。
それを使うことを思いつきました。
CCP1のコントロールレジスタCCP1CONについては[第78回]でお見せしましたが下に再掲します。

[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet

bit3−bit0を0110にすると入力パルスの4回目の立ち上がりごとにそのときのTimer1のカウント値がラッチされます。
bit3−bit0を0111にすると入力パルスの16回目の立ち上がりごとにそのときのTimer1のカウント値がラッチされます。
いわゆるプリスケーラとはちょっとニュアンスが違うのですがCAPUTUREモードの機能としてはプリスケーラとして働きます。
これを利用してみます。
CCP1CONのbit3−0を0111にしました。

40行でCCP1CONに7を出力しています。
そのように設定したうえでプログラムを実行しました。
左側のパルス出力プログラムではT0CONに$80を設定しました。
プリスケーラは1:2です。
右側のプログラムのTimer1のオーバーフロー回数を計算で求めると2*2=4になります。
前回は計算通りの結果にはならずに倍の8回になってしまいました。

今までと同じように表示されたCCPR1の値の差を求めて右側に追記しました。
0AE04257
0B2042D0 00400079
0B604349 00400079
0BA043C2 00400079
0BE0443A 00400078
0C2044B3 00400079

追記した値の上位16ビットがTimer1のオーバーフロー回数を示しています。
0040(10進数の64)です。
これは入力パルスの16回目の立ち上がりごとにラッチしたTimer1のオーバーフロー回数ですから1回のパルス周期の間にオーバーフローした回数はその値の1/16になります。
64/16=4です。
今回は計算通りの値になりました。
下位16ビットは0079(10進数の121)か0078(10進数の120)ですが本来は0000であるべき値です。
これは水晶発振の誤差と考えられます([第82回]参照)。
この値も16回に1回ラッチされた値なので1/16にします。
120/16=7.5です。
プリスケーラが1:4のときは14でした([第86回])。
その約1/2になっていることが確認できました。

プリスケーラなしの出力パルスのときの値も求めてみました。

T0CONに$88を設定しました。
プリスケーラ無しの設定です。
計算によるTimer1のオーバーフロー回数は2回です。

6517AC16
6537AC52 0020003C
6557AC8F 0020003D
6577ACCB 0020003C
6597AD08 0020003D
65B7AD44 0020003C

追記した値の上位16ビットの値は0020(10進数の32)です。
その1/16が入力パルスの1周期にTimer1がオーバーフローする回数です。
32/16=2です。
計算通りの値になりました。
下位16ビットは003D(10進数の61)か003C(10進数の60)です。
この値も16回に1回ラッチされた値なので1/16にします。
60/16=3.75です。
さきほどのプリスケーラが1:2のときの値は7.5ですからその1/2になっていることが確認できました。

今回の機能を使うことで計算上は40/16=2.5(msec)ぐらいまでの周期の入力パルスに対応できるようになりました。

PIC−USBIO using BASIC[第88回]
2022.10.31upload

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