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


PIC−USBIO using BASIC

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

[第96回]



●PICUSBIO−03(45)Timer3(3)Timer0とつなぐ/PIC18F13K50端子配置図

前回はTimer0と同じテストをTimer3でもやってみました。
Timer3はプリスケーラが1:8までしか使えないため16bitカウンタの最上位bitからの出力パルスの周波数がTimer0での値よりも高い周波数になってしまいます。
その波形をオシロで観測してみると計算した値からずれてしまっています。
Timer1でも同じテストをして同じ結果になっています([第71回])。
もう少し出力周波数を下げたいのですがTimer3の機能としてはこれが限界です。
[第72回]ではシステムクロックをカウントするのではなくて外部からパルスを入力することを思いついてTimer0からの出力パルスをTimer1に入力しました。
それと同じことをTimer3でもやってみます。
[第69回]でTimer0のオーバフロー割り込みを使いました。
そこではTimer0を8bitカウンタに設定しプリスケーラを使わない設定でオーバーフロー割り込みを使いRC4から周期が42.6μsecのパルスを出力しました。
これをTimer3に入力してカウントします。
Timer3の外部入力端子はpin8(T13CKI/RC6)です。

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

そこでRC4とRC6を接続しておいて前回のプログラムと[第69回]のTimer0の割り込みプログラムを合体させたプログラムを作って実行してみることにしました(実際の作業では[第72回]で作成したプログラムの一部をTimer3用に書き換えました)。

下がTimer3用に作成したプログラムです。

10行〜30行は[第69回]のTimer0の割り込みプログラムです。
ただし10行のTRISCの設定はRC4のみが出力でそのほかのビットは入力にしています。
RC4はTimer0のオーバーフロー割り込みによってパルスを出力しますから向きは出力に設定します。
今回はTimer3の外部入力がRC6ですからビット6は入力に設定することになります。
そのほかのビットは入力でも出力でもよいのですがここではRC4以外のビットは全て入力に設定しました。
40行から後ろはTimer3のプログラムです。
40行ではPORTBを出力に設定しています。
前回はTimer3のカウンタの値をPORTCに出力しましたが今回はTimer0のパルス出力と競合してしまうためPORTCが使えません。
それで代わりにPORTBを使うことにしました。
PIC18F13K50ではPORTBはRB7〜RB4の上位4ビットしかありません。
そこにTimer3レジスタの8ビットデータを出力します。
幸いにして今回はカウンタの最上位ビットの値を観測しますからRB7さえ有効なら問題はありません。
50行でTimer3の設定をしています。
T3CONに設定する値は$33です。
前回はプリスケーラを1:8にしてTMR3Hの値をPORTCに出力しました。
そのときのTimer3の入力パルスは12MHzでした。
今回はそれよりもずっと低い周波数を入力しますからプリスケーラは1:8のまま使いますが、Timer3の値は上位8ビットではなくて下位8ビット(TMR3L)の値を読みます。
そういうことなのでT3CONのbit7を1にしてあえて16bit READ/WRITEモードにする必要はありません。
そこでbit7=0にしました。
bit6は使いません。
プリスケーラは1:8のまま使いますからbit5=1、bit4=1です。
外部端子からクロックを入力しますからbit1=1です。
上に書きましたように今回はTimer3の下位8ビット(TMR1L)の値を読んでその値をPORTBに出力します。
PORTBはRB7〜RB4の4ビットですからTMR3Lの上位4ビットがPORTBから出力されることになります(60行、70行)。

プログラムを実行した結果です。

上側(CH1)はRB7の出力波形です。
下側(CH2)はRC4/RC6の波形です。
CH2(RC4/RC6)は[第69回]の計算で12000KHz/256/2=23.4375KHzです。
周波数が高いので水平同期=20msでは波形は正しく表示されません。
CH1は23.4375KHzのクロックをプリスケーラで1/8にして入力した8ビットカウンタの最上位ビットの出力波形です。
それを計算すると23437.5/8/256=11.444(Hz)になります。
周期に換算すると1/11.444≒0.087444(87.4msec)です。
今回は計算通りの出力波形になりました。

PIC−USBIO using BASIC[第96回]
2022.11.11upload

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