Arduino Nano のTimer 機能を使ってみた [Arduino]
Arduino の PWM を調べたところ AVR のTimer 機能を理解しないと使いこなせないことが分かりました。OV7670 を動かすところから少し寄り道となってしまいますが、今回は Timer 機能を調べたいと思います。
Timer 機能の理解には下記サイトが大変参考になりました。このサイトはAVR の他の機能も易しく解説してくれているので重宝しそうです。
Timers on the ATmega168/328
https://sites.google.com/site/qeewiki/books/avr-guide/timers-on-the-atmega328
Arduino はタイマーを3つ持っています。TIMER0 と TIMER2 は 8BITタイマー。TIMER1 が16BITタイマーです。今回はTIMER1 に絞って調べてみたいと思います。
Timer の基本動作は簡単です。 内部カウンタ TCTn が設定値 OCRn に一致すると TOVn の TIFR レジスタをセットするという単純なものです。この時、割り込みも使えます。
OCRn の計算値を下記に示します。
OCRn = システムクロック / 分周率 × タイマー時間
例えば0.5秒のタイマーを TIMER1 に設定するための OCR1 値は下記になります。分周率は256 とします。
OCR1 = 16,000,000 / 256 * 0.5 = 31250
分周率はCSビットで設定します。
タイマーには "ノーマルモード" と "CTCモード" がありますが、平たく言うと "ノーマルモード" は使いものになりません。通常は "CTCモード" を使います。詳細は上記サイトを参照してください。
モード設定は WGMビットで設定します。
CSビット、WGMビットは TCCR(Timer/Counter Control Register) にセットします。TIMER1 のTCCR のレジスタ構成を示します。
設定の仕方は分かったので、Arduino のスケッチで試してみたいと思います。今回は割り込みを使いました。割り込みは TIMSK1 というレジスタで設定できます。詳しくは上記サイトを参照してください。
さて、実際の動きをみてみましょう!
0.5秒ごとに点滅を繰り返しています。うまく動きました。今回は Arduino のタイマーの基本機能を理解できました。次はカウンターの使い方を見てみたいと思います。
(^_^)/~
関連記事
Arduino Nano の Counter 機能を使ってみた
http://makers-with-myson.blog.so-net.ne.jp/2016-02-04
Arduino Nano の PWM 機能を使ってみた(FastPWM 編 その1)
http://makers-with-myson.blog.so-net.ne.jp/2016-02-12
Arduino Nano の PWM 機能を使ってみた(FastPWM 編 その2)
http://makers-with-myson.blog.so-net.ne.jp/2016-02-16
Arduino Nano の PWM 機能を使ってみた(Phased Correct PWM 編 その1)
http://makers-with-myson.blog.so-net.ne.jp/2016-02-18
Arduino Nano の PWM 機能を使ってみた(Phased Correct PWM 編 その2)
http://makers-with-myson.blog.so-net.ne.jp/2016-02-20
Timer 機能の理解には下記サイトが大変参考になりました。このサイトはAVR の他の機能も易しく解説してくれているので重宝しそうです。
Timers on the ATmega168/328
https://sites.google.com/site/qeewiki/books/avr-guide/timers-on-the-atmega328
Arduino はタイマーを3つ持っています。TIMER0 と TIMER2 は 8BITタイマー。TIMER1 が16BITタイマーです。今回はTIMER1 に絞って調べてみたいと思います。
Timer の基本動作は簡単です。 内部カウンタ TCTn が設定値 OCRn に一致すると TOVn の TIFR レジスタをセットするという単純なものです。この時、割り込みも使えます。
OCRn の計算値を下記に示します。
OCRn = システムクロック / 分周率 × タイマー時間
例えば0.5秒のタイマーを TIMER1 に設定するための OCR1 値は下記になります。分周率は256 とします。
OCR1 = 16,000,000 / 256 * 0.5 = 31250
分周率はCSビットで設定します。
タイマーには "ノーマルモード" と "CTCモード" がありますが、平たく言うと "ノーマルモード" は使いものになりません。通常は "CTCモード" を使います。詳細は上記サイトを参照してください。
モード設定は WGMビットで設定します。
CSビット、WGMビットは TCCR(Timer/Counter Control Register) にセットします。TIMER1 のTCCR のレジスタ構成を示します。
設定の仕方は分かったので、Arduino のスケッチで試してみたいと思います。今回は割り込みを使いました。割り込みは TIMSK1 というレジスタで設定できます。詳しくは上記サイトを参照してください。
#include <avr/io.h> #include <avr/interrupt.h> void setup() { pinMode(13, OUTPUT); noInterrupts(); // レジスタをクリア TCCR1A = 0; TCCR1B = 0; TCNT1 = 0; OCR1A = 31250; TCCR1B = bit(WGM12) | bit(CS12); // CTCモードで分周率256 TIMSK1 = bit(OCIE1A); // 割り込みをタイマー1に設定 interrupts(); } ISR (TIMER1_COMPA_vect) { digitalWrite(13, !digitalRead(13)); } void loop() { }
さて、実際の動きをみてみましょう!
0.5秒ごとに点滅を繰り返しています。うまく動きました。今回は Arduino のタイマーの基本機能を理解できました。次はカウンターの使い方を見てみたいと思います。
(^_^)/~
関連記事
Arduino Nano の Counter 機能を使ってみた
http://makers-with-myson.blog.so-net.ne.jp/2016-02-04
Arduino Nano の PWM 機能を使ってみた(FastPWM 編 その1)
http://makers-with-myson.blog.so-net.ne.jp/2016-02-12
Arduino Nano の PWM 機能を使ってみた(FastPWM 編 その2)
http://makers-with-myson.blog.so-net.ne.jp/2016-02-16
Arduino Nano の PWM 機能を使ってみた(Phased Correct PWM 編 その1)
http://makers-with-myson.blog.so-net.ne.jp/2016-02-18
Arduino Nano の PWM 機能を使ってみた(Phased Correct PWM 編 その2)
http://makers-with-myson.blog.so-net.ne.jp/2016-02-20
サインスマート(SainSmart) Nano 3.0 互換ボード for Arduino
- 出版社/メーカー: サインスマート(SainSmart)
- メディア: Personal Computers
ディアイワイモール (DIYmall) Pro Mini モジュール Atmega328 3.3V 8M for Arduino
- 出版社/メーカー: Flyfun
- メディア:
コメント 0