SSブログ

Arduino Nano のTimer 機能を使ってみた [Arduino]

Arduino の PWM を調べたところ AVR のTimer 機能を理解しないと使いこなせないことが分かりました。OV7670 を動かすところから少し寄り道となってしまいますが、今回は Timer 機能を調べたいと思います。


ArduinoNano.JPG


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ビットで設定します。


CSbits.png


タイマーには "ノーマルモード" と "CTCモード" がありますが、平たく言うと "ノーマルモード" は使いものになりません。通常は "CTCモード" を使います。詳細は上記サイトを参照してください。

モード設定は WGMビットで設定します。


WGMbits.png


CSビット、WGMビットは TCCR(Timer/Counter Control Register) にセットします。TIMER1 のTCCR のレジスタ構成を示します。


TCCR.png


設定の仕方は分かったので、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) Nano 3.0 互換ボード for Arduino

  • 出版社/メーカー: サインスマート(SainSmart)
  • メディア: Personal Computers






Arduinoをはじめようキット

Arduinoをはじめようキット

  • 出版社/メーカー: スイッチサイエンス
  • メディア: おもちゃ&ホビー




nice!(39)  コメント(0)  トラックバック(0) 
共通テーマ:趣味・カルチャー

nice! 39

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。