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


PIC−USBIO using BASIC

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

[第108回]



●PICUSBIO−03(57)Timer2(6)シングルPWMモード(2)パルス出力プログラム

今回はシングルPWMモードのテストプログラムを作って実行してみます。
下は前回お見せしたPWMモードの出力波形(Active High)を示した図です。


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

Relations:のところにPeriod(パルス周期)とPulse Width(パルス幅)の計算式があります。
この式に適当な値を入れてプログラムを作ります。

まずは周期の計算です。

Period=4*Tosc*(PR2+1)*(TMR2 Prescale Value)

Toscはシステムクロック(Fosc)の周期です。
PICUSBIOボードのシステムクロックは48MHzですからその周期Toscは
Tosc=1/48(μsec)
です。
式の最後にTMR2のプリスケールの項がありますがまずは簡単なテストから始めますからプリスケールは1:1にします。
PR2の値は$77(10進数では119)にします。
PR2+1=120なので計算の結果に端数がなくなります。
式に値を入れると下のようになります。

周期=4*120/48=10(μsec)

次はパルス幅です。

Pulse Width=Tosc*(CCPR1L<7:0>:CCP1CON<5:4>)*(TMR2 Prescale Value)

と書かれていますが最初にこの式を見たときに「これは変だなあ」と思いました。
実際に試してみてこの式には 4* が落ちていることを確認しました。
下の下線部を追加したのが正しい式です。

Pulse Width=4*Tosc*(CCPR1L<7:0>:CCP1CON<5:4>)*(TMR2 Prescale Value)

この式にもTMR2のプリスケールの項があります。
ここは周期の式に合わせて1:1にします。
CCP1CON<5:4>はData Sheetではカウンタの下位2ビットだと説明されています(前回[第107回]参照)。
どういうことかよくわかりませんからとりあえずは00にしておきます。
CCPR1Lの値は$0C(10進数では12)にします。

式に値を入れると下のようになります。

パルス幅=4*12/48=1(μsec)

プログラムを作成しました。

パルスの出力はPORTCと端子を共用していますから端子の向きを出力にするために10行でTRISCに0を設定しています。
20行でT2CONに4($04)を設定しています。
ビット2にのみを1にしています。
ビット2を1にするとTMR2がONになります。
プリスケールもポストスケールも1:1です。
T2CONは[第103回]で説明をしています。
30行でCCP1CONに$0Dを設定しています。
bit7−4は0000にします。
bit3−2は11にします。
今回はbit1−0は01にします。
bit1−0が01のときP1A、P1Cはactive High、P1B、P1Dはactive Lowになります。
CCP1CONについては(前回[第107回]を参照してください)。
40行でPSTRCONに$1Fを設定しています。
P1A〜P1Dの出力を有効にする設定です。
PSTRCONについても前回[第107回]を参照してください。
50行と60行でPR2に$77をCCPR1Lに$0Cを設定しています。

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

上側(CH1)がP1Aの出力で下側(CH2)がP1Bの出力です。
周期は10μsecでこれは計算通りの値です。
パルス幅も計算通りの1μsecに見えます。

念のため水平時間軸を500μsec/divにしました。

パルス幅は計算通りの1μsecであることが確認できました。

PIC−USBIO using BASIC[第108回]
2022.11.23upload

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