MCC(MPLAB Code Configurator)を操作して見る(Timer編)
〔導入編〕
〔操作編〕
〔CLC〕
〔Memory〕
〔MPLAB X の使い方に戻る〕
前前ページの〔導入編〕でMCCのインストールの行い方を記述しました。
前ページの〔操作編〕でMCCの基本モジュール[System Module][Pin Module][Interrupt Module]の
操作方法を記述しました、なので基本操作は読んでいる者として以下は記述します。
このページでは〔Timer編〕としてTMR0/TMR1/TMR2の操作方法です。
操作例は、PIC16F18313で記述します、尚、[Generate]しないで設定されたデータを参照する方法です。
※ タイマーモジュールの操作前に必ず[System Module]ウインドウ画面でシステムクロックを
設定して下さい。(このページではFOSC=8MHzで記述しています)
Timerモジュール設定ウインドウの開き方
IDE左側まんなかのウインドウの[Device Resources]画面で操作を行います。
(TMR0での説明です)
1. Timerの文字をダブルクリックするか左横の▼をクリックします。
2. 左図の様になるので、TMR0をダブルクリックします。
(この後、少し時間が掛かります)
3. TIMR0の文字が消え、設定ウインドウが展開されます。
《TMR0》
”タイマー0モジュール(TMR0)”画面の設定方法です。

Clock prescaler
TMR0カウンタの前段に追加される分周器(プリスケーラ)でカウンタ値を増やす事が可能です。
設定値は1:1〜1:32678
レジスターはT0CON1のTOCKPS[3:0]ビットに設定されます。
Postscaler
TMR0カウンタの後段に追加されたカウンタ(ポストスケーラ)で、これもカウンタ値を増やす事が可能。
設定値は1:1〜1:16
レジスターはT0CON0のTOOUTPS[3:0]ビットに設定されます。
Timer mode
タイマーカウンタモードで8/16ビットの選択を行います。
レジスターはT0CON0のTO16BIT[4]ビットに設定されます。
Clock Source
タイマーのクロックソース源を選択します。
レジスターはT0CON1のTOCST[7:5]ビットに設定されます。
External Freuency
外部ピン(T0CKI_PIN)から入力時のクロックを設定します。
この設定は「Timer Period」の計算用でレジスター設定はない。
Enable Synchronisation
タイマー入力をFosc/4に同期させるかのチェックを行います。
レジスターはT0CON1のTOASYNC[4]ビットに設定されます。
Enable Timer Interrupt
TMR0で割り込みを行う場合にチェックを行います。
ここで有効にした場合は、下の「Software Settings」が設定可能になり、ここに「Timer Period」を
何回数えるか設定する事になり、[Generate]した場合に割り込み関数が生成されるでしょう。
割り込み時間1秒を設定して見る

@ Clock Source:でタイマーのクロックソース源を選択、例ではFosc/4です。
Fosc=8MHzとします、8MHz/4がタイマーのクロックとなりますね。
A Requested Period:に"1s"を入力します。
プリスケーラ(Clock prescaler)が"1:1"なので
((1/システムクロック周波数) x 4) x プリスケーラ設定値
((1 / 8MHz) x 4) x 1 = 500ns で 8ビットだから 256 x 500ns = 128us
どう見ても128usまでしか出来ないのでプリスケーラをふやします。
※ 本当はここで"1s"を設定した時にパラメータを設定して欲しいぞぉ、Microchipさん!。
なので自分で[Clock prescaler][Postscaler]を色々設定し試行錯誤する事になります。

@ Clock prescaler:最大の"1:256"にします。
((1 / 8MHz) x 4) x 256 = 128ns で 8ビットだから 256 x 128ns = 32.768ms
Fosc=8MHzでプリスケーラが"1:256"では最高32.768msまでが1回当たりの割り込みとなります。
A そこで割込みを何回かカウントする事になるので、"Enable Timer Interrupt"にチェックを入れると
「Software Settings」が入力可になるので数値を入力します。
"31"を入れると、"1.015808s"になり1秒に近いから採用します、って事は割込みを31回カウント
する事になります。
PIC16F18313の場合は?
実はぁ、上の操作は今までの12F1822/16F1827等の場合で、16F18313はTMR0機能が増えています。
[Clock prescaler]は"1:32768"までで、[Postscaler]機能が追加され、8ビット以外に16ビットも
増えています、なんてアンビリバボーなんでしょう。
なので、8MHz/4で最高17179.60704s(約286分)まで作成可能です。 Σ( ゚Д゚) スッ、スゲー!!

16ビットモードでプリスケーラを"1:128"にするだけで"1秒"ぴったりが作れてしまうのですよぉ。

後は、レジスタ設定画面に切り替えて、TMR0H/TMR0Lの設定値を得るだけですね。
TMR0H=0xC2 TMR0L=0xF7 なので"0xC2F7(49911)"
49911から65536(16bit)までカウントアップするの で65536 - 49911 = 15625カウント
((1 / 8MHz) x 4) x 128 = 64us なので 15625 * 64 = 1000000us(1s)
TIMER0の詳しい話はこちらを参考にして下さい。
(16F18313での話となりますがサンプルプログラムも有ります)
《TMR1》
”タイマー1モジュール(TMR1)”画面の設定方法です。
16ビットタイマーです。

説明はタイマー0と同じ感じなので説明省きます。
タイマー1にはゲート機能が有るので使用する人は「Enable Gate」のチェックを付けて設定しましょう。
割り込み時間1秒を設定して見る

プリスケーラは"1:8"が最大値です。
って事は、8MHz/4での最大作成可能時間は262.144msまでですね。
なのでぇ、下のウインドウ「Software Settings」で"4"を入れると1.048576sとなり
割り込みを4回カウントする。

上記設定では1秒に若干誤差(1.048576s)が有るのでぇ、
プリスケーラは"1:8"での最大時間は262.144msまで設定可能なのでぇ、
「Timer Period」に"1s"でなく、"250ms"で入力すれば丁度1秒です。
でぇ、TMR1H/TMR1Lには、"0x0BDC"を設定する事になります。
TIMER1の詳しい話はこちらを参考にして下さい。
(16F18313での話となりますがサンプルプログラムも有ります)
《TMR2》
”タイマー2モジュール(TMR2)”画面の設定方法です。
8ビットタイマーで、タイマーのクロックソースはFosc/4のみです。

これもぉ、説明は省いて良いですね。
ポストスケーラは"1:1〜1:16"の設定値でプリスケーラは"1:1/1:4/1:16/1:64"となります。
割り込み時間1秒を設定して見る

Postscaler:を"1:10"に設定し、prescaler:は"1:16"にします。
で、「Timer Period」に"20ms"を入れて、割り込み時間を50回カウントすれば丁度1秒です。
でぇ、PR2レジスタに"0xF9(249)"を設定する事になります。
TIMER2の詳しい話は16F1827での記事ですが、こちらを参考にして下さい。
TIMER2のサンプルプログラム(16F18313用)はこちらからダウンロードして下さい。
《その他》
ほん〜とぉ、欲しい時間や周波数を入力すれば一発設定して欲しいわぁほんまにぃ。
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.