So-net無料ブログ作成

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