PIC のタイマはどんなもの 5 PIC のタイマは どんなもの 分でわかるタイマ 神崎 康宏 マイコンには周辺モジュールがたくさん搭載されています. みんなが使うのがタイマです. 1 タイマ 0 の構成 PIC には最低「タイマ 0」の 8 ビット・タイマ た後,そのままカウント・アップの動作を続けて が内蔵されています.よく利用される PIC の多く います. は,それに加えてタイマ 1 (16 ビット) ,タイマ 2 (8 ● タイマ 0 で時間待ちする ビット)の合計三つを内蔵していることもありま タイマ 0 を使用したシンプルな時間待ちのプロ す. グラムは,次のような設定をします. タイマ 0 のカウンタのしくみの部分を図 1 に示 ① OPTION レジスタのカウンタのクロックに, します. 「システム・クロック」もしくは「外部 3 3 3 のクロック・パルス」を数えるという動作をしま 内部のシステム・クロックを選択 ② タイマ 0 レジスタにカウント・アップする初 す.カウンタに初期値を書き込むと,その値から 期値を W レジスタにセットする 255 まで CPU の動作とは別にカウント・アップ ③ オーバフロー・ビットをクリアする し,256 でオーバフロー・ビットを ON (=1)にし ④ W レジスタにセットした値をタイマ 0 レジス て,カウンタはゼロ・クリア (0 に戻る) されます. したがって,タイマのカウントは,初期値の書き 込みからオーバフロー・ビットが ON になるまで タにセット ⑤ INTCON レ ジ ス タ の タ イ マ 0 の オ ー バ フ ロ ー・ビットをチェックし,フラグが ON にな ると計数が完了する が「設定時間」になります.カウンタは 0 に戻っ パルスが一つ入力するごとに カウンタの値が一つ増す 0 1 P I Cのシステム・ クロックを,カ ウンタの入力ク ロックとする INTCONレジスタのT0IFビットが, ‘1’ のとき…オーバフローあり ‘0’ のとき…オーバフローなし 2 3 255 システム・クロック 1 の のパルスが入力 4 される 外部からの パルス 255+1でオーバフローのビットが ONになり,カウンタは0になる 付加 回路 どちらか選択できる マイコンの外からのパルスを カウンタへの入力パルスとし て利用できることができる TMR0 255からカウントしたい値を 引いた値をTMR0にセットし, カウントを開始する これはOPTIONレジスタのT0CSビットの値で選定する. T0CS… ‘0’ …内部クロック T0CS… ‘1’ …外部クロック 図 1 タイマ 0 (TMR0) のカウンタのしくみ 33 5 分でわかるタイマ タイマ0の設定は,基本的に はリセット後のデフォルト の設定値を使用する 8MHzのシステム・ クロックの場合, (1/8MHz) ×4 ×4 = (0.125μs) =0.5μsのパルス 入力となる この期間が計測時間 リスト 1 タイマ0の処理 プログラム bcf OPTION_REG,T0CS movlw bcf movwf btfss goto repl D'256'-D'100' INTCON,T0IF TMR0 INTCON,T0IF rep1 ② D'256'-D'100'は10 進数で256-100 の引き 算を示す.カウントアッ プする数を引く数にセッ トする ④ ⑤ ③ INTCON割り込みレジス タのオーバフロー・フラ グをクリア 100カウントしているので,50μs の待ち時間が設定できる 以上の処理を行うプログラムをリスト 1 に示し タイマの使い方,わかりましたか? タイマは,マ イコンのプログラムとは無関係に,クロック・パル スを数えるという動作をしています.しかし,これ では,あっという間にオーバフローをしてしまって, 長い時間を測れないですね. ます.このプログラムを計時が必要な場所に配置 し,初期値を書き込み,オーバフロー・ビットが ON になるまでが計測時間ということになります. 2 ① システム・クロックを 使用するためにクリア プリスケーラを使用すると,より広い範囲の対応ができる タイマ 0 は図 2 に示すように,8 ビットのプリ プリスケーラは電源が入ったときやリセット直後 スケーラが内蔵されています.このプリスケーラ のデフォルトの設定値では,ウォッチドッグ・タ は,分周器とも呼ばれ,入力のパルスに対して割 イマ(WDT)で利用されています.そのためプリ り算をします. スケーラを利用するためには,OPTION レジス タの PSA ビットを‘0’,そして PS2,PS1,PS0 タイマ 0 の場合,これらタイマ 0 の使い方を決 める設定は OPTION レジスタで行います.この 内部クロックとしてはシステ ム・クロック/4のクロックがこ こに加わる デバイスによっ て割り当てられ るピン番号が異 なる タイマ0 111 WDT 1:2 1:1 1:4 1:2 1:256 1:128 0 8ビットの読み 書き可能なレジ スタ.計数結果 が示される 1 T0CKI ピン 8ビット 1 プログラマブル・ プリスケーラ 内部クロックと 同期を取る 0 T0SE T0CS 図 2 PIC のタイマ 0 の内部ブロック図 PS2, PS1, PS0 PSA OPTION_REG レジスタの制御 ビット TMR0 PSout (2サイクル遅延) 3 入力クロックのエッジ選択. ‘1’:入力が“H” から “L” でインクリメント ‘0’:入力が“L” から “H” でインクリメント 34 PS2, PS1, PS0 000 001 データ・バス FOSC /4 外部クロック は,この端子 より入力 T0CS ソース・クロックの選択 回路.OPTION_REGレ ジスタのT0CSが ‘0 ’ の内 部クロック, ‘1 ’ の外部ク ロック ∼ P I C12F683の場合. 5番ピン (GP2/AN2/ T0CK I / I NT∼) の 3 ビットでプリスケーラの分周比を決めます. プリスケーラ 出力 PSAプリスケーラ割り当てビット ‘1’ :WDTに割り当て ‘ 0’ :タイマ0に割り当て リセット後のデフォルト値 レジスタ値がFFから00 にオーバフローするとき に割り込みを発生する. I N T C O N レジスタの T0IFビットをチェック することで,オーバフロ ーを検出できる
© Copyright 2024 Paperzz