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


PIC−USBIO using BASIC

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

[第94回]



●PICUSBIO−03(43)Timer3

PIC18F13K50/PIC18F14K50には内蔵タイマ/カウンタが4個あります。
Timer0〜Timer3です。
前回までのところでTimer0とTimer1について説明をしてきました。
順序としては次はTimer2にしたいところですがTimer2はTimer0ともTimer1ともかなり異なっています。
そこでTimer2は後回しにして先にTimer3を片付けることにします。
PIC18F13K50のData Sheetをざっと読んだ限りではTimer3はTimer1ととてもよく似ています。
しかし細部についてよくよく見比べてみますとTimer1と異なっているところもあるようです。
Timer1については[第70回]から前回までちょうど1ヶ月かけて書いてきました。
Timer3についての記事はおそらくTimer1とほとんど同じになってしまうと思いますが、私自身の復習も兼ねて書いていきたいと思います。

Timer0はタイマ/カウンタに特化したシンプルな機能です。
それに対してTimer1〜Timer3はTimer0と同じように独立したタイマ/カウンタとしても使えますがどちらかというと別の機能(シリアル通信とかADコンバータとかパルス制御などの機能)のためのクロック/タイマ/カウンタとして用意されているもののようです。

下はPIC18F13K50 Data SheetのTimer3の最初のページです。

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

Timer0は8ビット/16ビットのTimer/Counterです。
Timer3もTimer0に構造は似ていますが8ビットの機能はなくて16ビットオンリーのTimer/Counterです。
16ビットですがTimer0と同じように値をREAD/WRITEするときは8ビットレジスタTMR3L(下位8ビット)、TMR3H(上位8ビット)に分けてアクセスします。
Timer3専用の2ビットプリスケーラ(1:8〜1:1)が使えます。
内部クロック(システムクロック/4)か外部入力(RC6端子入力)を選択できます。
PICUSBIO−03のPIC18F13K50のシステムクロックは48MHzなのでその1/4は12MHzになります。
オーバーフロー割り込みを発生させることができます。

T3CONはTimer3の特殊レジスタです(以下普通にレジスタと表記します)。
PICOUT命令、PICIN関数でWRITE/READできます。
bit7=1のときはTimer0と同じ16ビットREAD/WRITEモード(TMR3HをTMR3Lのアクセスに同期してREAD/WRITEする機能)になります。
bit7=0のときはPIC16F以前の16ビットカウンタをREAD/WRITEする場合と同じアクセス方法が必要になります。
bit6はありません(ここはTimer1のT1CONと異なっています)。
bit5、bit4はプリスケーラの分周比です。
11=1:8
10=1:4
01=1:2
00=1:1
bit3もT1CONとは異なっています。
bit3=1のときCCP1のTimerとしてTimer3が割り当てられます。
bit3=0のときCCP1のTimerとしてTimer1が割り当てられます。
[bit1=1のとき]
 bit2=1のときは外部入力クロックをシステムクロックに同期せずにカウントします。
 bit2=0のときは外部入力クロックをシステムクロックに同期してカウントします。
[bit1=0のとき]
 bit2は無視されます。
bit1=1のときは外部入力クロックをカウントします(立ち上がりエッジでカウント)[*注記]
bit1=0のときはシステムクロック/4(12MHz)を入力カウントします
bit0=1のときカウントスタート、=0のときカウントストップします。

[*注記]
外部入力クロックはT1CONのbit3の設定に従って外部水晶発振回路からの入力クロックかpin8からの入力クロックになります。
pin8はRC6と端子を共用していてTimer1でも外部入力クロックとして使われます。
その端子名がT13CKIとなっていることが当初は奇妙に感じられたのですがこれはおそらくT1(Timer1)とT3(Timer3)の兼用クロック入力端子であるところから来たネーミングだと思います。

Data Sheetの続きです。


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

FIGURE13−1はTimer3のブロック図です。
FIGURE13−2は16bit READ/WRITE MODEのときのブロック図です。
Timer0のところで説明したのと同じアクセス方法についての説明図です。
以下はT3CONのbit7=1のときの説明です。
TMR3HはTimer3の上位バイトですがカウンタ本体ではなくて上位バイトのバッファです。
カウンタ本体の上位バイトは直接Read/Writeできません。
TMR3Hにはカウンタの下位バイト(TMR3L)をReadしたときにカウンタ上位バイトの値が入ります。
下位バイトと上位バイトを読み出すタイミングによって間違った値を読み出してしまわないようにするためです。
同じことはTMR3Hの値が16bitカウンタの上位バイトにWriteされるときにもあてはまります。
TMR3Hに値をWriteしただけでは直接Timer3に影響を与えません。
TMR3LにWriteを実行したときにTimer3の上位バイトにTMR3Hの値が書き込まれます。

PIC−USBIO using BASIC[第94回]
2022.11.9upload

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