PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第111回]
●PICUSBIO−03(60)Timer2(9)シングルPWMモード(5)パルス出力プログラム(4)CCP1CON<5:4>(2)
前回はパルス幅の式にあるCCP1CON<5:4>についてプログラムでテストをしてみた結果CCP1CON<5:4>は8bitの整数+2bitの小数のうちの小数部らしいということがわかりました。
しかしオシロの波形では小数を付加したことによるパルス幅の増加分がわずかで正確にはそうだと判定しにくい結果となりました。
なんだか歳のせいか頭が固くなっていたようです。
前回は最初にテストをした[第108回]のときのプログラムの値につい引っ張られてしまいました。
周期が10μsecでパルス幅が1μsecという値です。
パルス幅の式で元の値は10進数の12でそれを小数付きの数値の12.5に変更してテストを行ないました。
0.5/12=0.0417ですからわずか4%の増加分をオシロで確認することになります。
これではアバウトになっても仕方がありません。
整数部分を小さくしてテストをしてみればよかったのでした。
もう一度再テストです。
PR2=$05、CCPR1L=$03にしました。
比較のためまずはCCP1CON<5:4>=00として小数部なしのプログラムにしました。
周期=4*(5+1)/48=0.5(μsec)
パルス幅=4*3/48=0.25(μsec)
になるはずです。
プログラムを実行しました。
周期は500nsec(0.5μsec)です。
パルス幅は250nsec(0.25μsec)ほどに見えます。
水平時間軸を50nsec/divにしました。
パルス幅は大体250nsecです。
しかしさすがにこのくらいの値になると計算値と測定値との間に少し差が見えてきます。
CH1(P1A)のパルス幅は250nsecよりもほんのわずかですが広いようです。
逆にCH2(P1B)は少し狭いようです。
P1Bは立ち下がりに少し遅れが見えます。
そうは言ってもせいぜい数nsecのことです。
ここまで高速のパルスになるとnsecレベルの遅れは許容範囲でありましょう。
今度はプログラムに小数部をつけてみました。
CCP1CON<5:4>=10ですから小数部は0.5です。
パルス幅=4*3.5/48=0.292(μsec)
になるはずです。
小数なしのときの250nsecが今回は292nsecになりますからこれなら多分オシロで見えると思います。
プログラムを実行しました。
パルス幅はCH1が300nsec、CH2は270nsecほどです。
計算通りの値と考えてよいでしょう。
ついでですからCCP1CON<5:4>=01の場合とCCP1CON<5:4>=11の値についても確認してみました。
CCP1CON<5:4>=01にしました。
CCP1CON<5:4>=01ですから小数部は0.25です。
パルス幅=4*3.25/48=0.271(μsec)
になるはずです。
プログラムを実行しました。
CH1は275nsecぐらいです。
CH2はそれより少し狭いように見えます。
CCP1CON<5:4>=11にしました。
CCP1CON<5:4>=11ですから小数部は0.75です。
パルス幅=4*3.75/48=0.3125(μsec)
になるはずです。
プログラムを実行しました。
CH1は320nsecぐらいです。
CH2はそれより少し狭いように見えます。
前回よりは確かな結果が得られたと思います。
PIC−USBIO using BASIC[第111回]
2022.11.26upload
前へ
次へ
ホームページトップへ戻る