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


PIC−USBIO using BASIC

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

[第86回]



●PICUSBIO−03(35)Timer1(17)CAPTUREモード(8)2つ目の謎が再現する

前回は左側のプログラムでプリスケーラを1:64、1:32、1:16に設定してその出力パルスの周期を右側のプログラムでカウントして表示しました。
今回はその続きです。
プリスケーラを1:8に設定して前回と同じテストをしてみました。

T0CONに$82を設定しています。
$82を設定するとプリスケーラは1:8になります。
計算によるTimer1のオーバーフロー回数は8*2=16です。

DF0F34EE
DF1F350A 0010001C
DF2F3526 0010001C
DF3F3543 0010001D
DF4F355F 0010001C
DF5F357B 0010001C

左側の値は上の画面右側のコマンドプロンプトのBASICプログラムで表示されたカウント値をそのままコピーしたものです。
その右側に追記した値は左側のコピーしたカウント値からその上のひとつ前のカウント値を引いたものです。
それが入力したパルスの1周期をTimer1でカウントした総カウント数になります。
上位16ビットの値はそのままTimer1のオーバーフロー回数を示しています。
0010(10進数の16)です。
上に示した計算通りの値です。
下位16ビットは001C(10進数の28)か001D(10進数の29)です。
前回の最後に行なったプリスケーラ1:16のときのテストでの下位16ビットは003A(10進数の58)か003B(10進数の59)でした。
今回も先回の値の1/2です。
こちらも[第82回]で説明した通り水晶発振の誤差はカウント総数に比例しますから計算通りの結果になっています。

テストを続けます。

T0CONに$81を設定しました。
プリスケーラは1:4です。
計算によるTimer1のオーバーフロー回数は4*2=8です。

401363A0
401B63AE 0008000E
402363BC 0008000E
402B63CA 0008000E
403363D8 0008000E
403B63E6 0008000E

上位16ビットの値は0008です。
計算通りの値です。
下位16ビットは000E(10進数の14)になっていてさきほどプリスケーラを1:8に設定したときの値の1/2です。
こちらも計算通りの結果になりました。

テストを続けます。

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

907E8D6F
90868D7E 0008000F
908E8D8C 0008000E
90968D9A 0008000E
909E8DA8 0008000E
90A68DB6 0008000E

ここで異変がおきました。
上位16ビットの値は0008です。
計算では4になるはずです。
計算で求めた値の倍です。
下位16ビットは000E(10進数の14)でこちらもさきほどプリスケーラを1:4に設定したときと同じ値です。
[第81回]の「2つ目の謎」と同じ現象です。
そのときはプリスケーラを1:4に設定したとき以降に異常が発生したのですが今回は1:4では問題がなくて1:2で発生しました。
その違いはありますがとにかくそのときと同じ異常であることに間違いはありません。
そのときは異常の原因は不明だったのですがその後にいろいろテストをしていくなかで「そこか!」と異常がなぜ起こるのかというその原因に突然気が付きました。
今回のテストの結果をよく見るとその原因を知るヒントが見えています。

それについては後ほど(次回)詳しくということにして、最後のプリスケーラ無しのテストを行ないます。

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

85370E0A
853F0E18 0008000E
85470E26 0008000E
854F0E35 0008000F
85570E43 0008000E
855F0E51 0008000E

今回もおかしい値です。
上位16ビットの値は0008です。
計算では2になるはずです。
計算で求めた値のなんと4倍です。
さきほどと同じ値のままです。
下位16ビットは000E(10進数の14)でこちらもさきほどプリスケーラを1:2に設定したときから変わっていません。

次回は解決編です。

PIC−USBIO using BASIC[第86回]
2022.10.29upload

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