2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PIC Timer0割り込みの使用方法 (PIC16F1769)

Posted at

※ここで説明するのは,Timer0のクロック源に内部クロックを使用する場合である.
文中の INTCON = 0bxxx00x00; などのxは,これから設定するビットを表す(xのまま書き込むわけではない)

調整するレジスタ

  • OPTION_REG
  • INTCON
  • TMR0

1.OPTION_REGレジスタの設定


OPTION_REG = 0b1000xxxx

PSA:クリアでプリスケーラ割り当て(1ビット)
PS:プリスケーラ比選択ビット(3ビット).大きいほど割り込みの周期が長くなる.

※TMR0CSビットの選択のFOSC/4という表記は,PIC内部の1命令がクロック4周期で進むことに由来するものであり,INTOSC = 8MHzのときにTimer0のクロック源が8 / 4 = 2MHzになる,という意味ではない.

2.INTCONレジスタの設定


INTCON = 0bxxx00x00;

GIE:セットで全てのアクティブな割り込み有効(1ビット)
PEIE:セットで全てのアクティブな周辺モジュール割り込み有効(1ビット)
TMR0IE:セットでTimer0割り込み有効(1ビット)
TMR0IF:1 = TMR0レジスタがオーバーフローした 0 = TMR0レジスタはオーバーフローしていない

割り込みを繰り返し行うには,割り込み発生後にTMR0IFレジスタをクリアする必要がある.

3.TMR0レジスタの設定

8ビットのカウンタで,1命令サイクル毎に+1される.(プリスケーラで変更可).
最初に設定した値からカウントアップされ,255から0へオーバーフローしたときに割り込みが発生する.そのため,割り込みを繰り返し行うには,割り込み発生後にTMR0レジスタを初期化する必要がある.

4.プリスケーラ比・TMR0レジスタの初期値の検討

例:INTOSC = 8MHz,10ms毎にTimer0割り込みを発生させたい場合
Timer0のクロック源をシステムクロック(FOSC/4)に設定(TMR0CS = 0)すると,INTOSC = 8MHzであるから1命令サイクルは (1 / 8000000) * 4 = 0.5 (μs).

プリスケーラ無しの場合,割り込みが発生する 間隔は最大でも0.128 ms (0.5μs * (255+1)命令サイクル = 0.128ms) であり10msには程遠いため,プリスケーラを使用する必要がある.

プリスケーラ比を最大の1:256に設定 (PS:111) すると,割り込みが発生する間隔は最大で
約30 ms ( 0.5μs * ( (255+1) * 256 )命令サイクル = 32.76...(ms) ) となる.

これを10ms間隔に調整するには,TMR0レジスタにあらかじめ値を与えてゲタをはかせておく.これによりオーバーフローまでのカウント回数を減らし,周期を短くすることができる.
10 (ms) = 0.5 (μs) * 256 (PRS) * (255 - TMR0 +1) から
TMR0 = 256 - ( 10 (ms) / ( 0.5 (μs) * 256(PRS) ) ) ≒ 178

TMR0の初期値の設定方法のまとめ

TMR0の初期値 = 256 - 任意の割り込み発生間隔 (s) /( 1命令サイクル周期 (s) × プリスケーラ比 )
※ 1命令サイクル周期:使用クロックが8MHzなら(1/8000000) * 4 = 0.5 (μs)

Timer0で100ms等の長い割り込み発生間隔を実現するには,割り込み関数内で変数をカウントして,一定数になったら割り込み処理を行うようにするといった方法がある.

参考ページ

MICROCHIP PIC16(L)F1764/5/8/9 日本語PDFデータシート
https://akizukidenshi.com/download/ds/microchip/PIC16F1764_PIC16LF1769_j.pdf

PICで遊ぶ電子工作 TMR0割込みを使ってみる(LEDを点滅させる)
http://mitt.la.coocan.jp/pic/pic5_05.html]

まくまくいろいろノート タイマ 0 を使用する ─ PIC めもめも
https://maku77.github.io/memo/pic/asm/timer0.html

【きむ茶工房ガレージハウス】タイマー割込みを使ってLEDを点滅させます
http://zattouka.net/GarageHouse/micon/MPLAB/12F1822/TIMERtoLED/TIMERtoLED.htm

PICマイコンと電子工作 インターバルタイマと割り込み
http://picmicom.web.fc2.com/practical/tmr0.html

PIC18内蔵モジュールの使い方 タイマー0,1,2,3の使い方
http://www.picfun.com/pic18/mod1803.html

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?