2014年01月07日

[Tips] Arduinoで割り込みを使って高速なループをまわす。

Arduinoで割り込みを使って高速なループをまわしてみました。

下記のようなかんじ。


ループの速度はTCCR2BとOCR2Aで調整する。
TCCR2Bはプレスケーラの値で、クロックを何分割するかを決める。
参考:http://awawa.hariko.com/chira-ura/atmega168-chapter17-jp.html#table17-9
OCR2Aは比較レジスタ。1クロックで1インクリメントされるカウンタが、このレジスタに登録されている値と等しくなった時にISR(TIMER2_COMPA_vect)の中に記載されている処理が呼び出される。

例の場合、プリスケーラを1024に設定。Arduino Nanoの場合16000KHzで動いており、
0から1023までインクリメントされるとイベントが発生する。
16000kHz/1024=15.6kHz1。
カウンタは256カウントでオーバーフローし、割り込みが発生する。
256/15.6 = 16.4ms。
つまり、16.4ごとに関数が呼び出される。
プリスケーラや比較レジスタの値を小さくすることで、より頻度の高い関数呼び出しが可能になる。

posted by コパン at 00:01| Comment(0) | Make | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。