PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第95回]
●PICUSBIO−03(44)Timer3(2)TMR3HをPORTCから出力
Timer3を普通のTimer/Counterとして見るとその機能はTimer0によく似ています。
Timer0が8bitカウンタとして、あるいは16bitカウンタとして、そのどちらとしてでも使うことができるのに対してTimer3は16bitカウンタとしてのみ使うことができます。
またTimer0は8ビットのプリスケーラが使えて1:256〜1:1までの幅広い分周比で入力周波数を分周することができます。
これに対してTimer3にはわずか2bitのプリスケーラしかないため1:8〜1:1の分周しか行なえません。
Timer3がTimer0と大きく異なるのはその2点です。
それ以外はTimer3はTimer0と基本的に同じ機能なのでTimer0について行なった動作テストはそのままTimer3でも使えそうです。
Timer0で最初に行なった動作テストは[第65回]のテストです。
Timer0の値(上位バイトの値)を読んでそれをPORTCから出力するプログラムを実行してPORTCの値をオシロで観測しました。
それと同じことをTimer3でもやってみます(Timer1では[第71回]で同じテストを行ないました)。
下がプログラムリストです。
[第71回]で使ったTimer1用のテストプログラム(tmr1t1.txt)をもとにしてTimer3用に書き換えました。
といっても簡単なことでT1CON→T3CON、TMR1L→TMR3L、TMR1H→TMR3H、に書き換えただけです。
T3CONの値$B1は以下の意味になります。
bit7=1 Time0と同じ16bitレジスタREAD/WRITEモードに設定
bit6は使いません
bit5=1、bit4=1 プリスケーラを1:8に設定
bit3=0は使いません
bit2はbit1=0のときは無視されます
bit1=0 入力クロックはシステムクロック(48MHz)/4=12MHz
bit0=1 カウンタ動作スタート
T3CONの各ビットの詳細は前回([第94回])を参照してください。
プログラムを実行しました。
下はPORTCのビット7(RC7)とビット6(RC6)の出力パルスをオシロで観測した画像です。
上側(CH1)がRC7で下側(CH2)がRC6です。
16ビットカウンタの最上位ビットがRC7から出力されています。
プリスケーラを経由したカウンタの入力周波数は12MHz/8=1.5MHzです。
カウンタの最上位ビットの値が出力されているRC7の周波数は1500000/65536≒23Hz(周期は約44msec)です。
上の画像の波形は計算値からかなりずれています。
2波分を合わせると80msecほどでなんとか計算値(44X2=88)に近くなります。
その下位のRC6の波形は計算値(周期22msec)から全くずれてしまっています。
このことについては[第65回]で説明をしています。
USB通信(HID方式)は遅いのでpicout、picinでPICのレジスタにアクセスするのに時間がかかります。
[第65回]のテストではプリスケーラが1:32ぐらいなら大体計算値通りの波形が得られています。
1:16では少しずれが目立ちます。
今回のTimer3のプリスケーラは最大でも1:8までしか使えませんからTimer0と同じテストはできません。
プリスケーラ1:8では相当ずれが目立ちます。
でもまあ動作していることは一応確認できます。
PIC−USBIO using BASIC[第95回]
2022.11.10upload
前へ
次へ
ホームページトップへ戻る