Arduino Nano の Counter 機能を使ってみた [Arduino]
前回 Arduino Nano のTimer機能を確認しました。今回はCounter 機能です。Counter機能とは外部信号のON/OFF回数をカウントする機能です。今回はボタンを押した回数でLEDをON/OFFする機能にチャレンジしたいと思います。
Arduino Nano が信号をカウントできるピンは限られています。COUNTER0 (8bit) は D4。COUNTER1 (16bit) は D5 になります。COUNTER2 (8bit) はどうやら使用には適さないようです。詳細は下記サイトを参考にしてください。
COUNTERS ON THE ATmega168/328
https://sites.google.com/site/qeewiki/books/avr-guide/counter-atmega328
カウンタの設定はタイマーと同様に CSビット と WGMビットでコントロールします。今回も16bit のCOUNTER1 を例に内容を見てみたいと思います。
CSビットは、信号の立下りでカウントするか、立ち上がりでカウントするかを設定します。今回は立ち上がりでカウントしてみます。
WGMビットは、上限の有り無しを設定します。無しの場合は0xFFFFが上限値になります。今回はCTCモードで上限値を設定するようにしたいと思います。
CSビット、WGMビットは TCCR のレジスタで設定します。
回路は押しボタンを使って組んでみました。極めてシンプルなものです。
タイマーと同じように割り込みを使ったスケッチにしてみました。ボタンを5回押すとLEDをON/OFFするようになっています。チャタリングをチェックするために定期的にカウント値(TCNT1)をシリアル出力するようにしました。
実際の動作をみてみましょう。
ちょっと不正確ですね。シリアルでカウント値を確認すると飛び飛びの値になっていました。どうやらチャタリングのせいのようです。スケッチが間違っているわけではなさそうです。
今回はカウンタについてチェックしてみました。これは色々と応用できそうです。次はいよいよ PWM について確認したいと思います。
(^_^)/~
関連記事
Arduino Nano のTimer 機能を使ってみた
http://makers-with-myson.blog.so-net.ne.jp/2016-01-29
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
Arduino Nano が信号をカウントできるピンは限られています。COUNTER0 (8bit) は D4。COUNTER1 (16bit) は D5 になります。COUNTER2 (8bit) はどうやら使用には適さないようです。詳細は下記サイトを参考にしてください。
COUNTERS ON THE ATmega168/328
https://sites.google.com/site/qeewiki/books/avr-guide/counter-atmega328
カウンタの設定はタイマーと同様に CSビット と WGMビットでコントロールします。今回も16bit のCOUNTER1 を例に内容を見てみたいと思います。
CSビットは、信号の立下りでカウントするか、立ち上がりでカウントするかを設定します。今回は立ち上がりでカウントしてみます。
WGMビットは、上限の有り無しを設定します。無しの場合は0xFFFFが上限値になります。今回はCTCモードで上限値を設定するようにしたいと思います。
CSビット、WGMビットは TCCR のレジスタで設定します。
回路は押しボタンを使って組んでみました。極めてシンプルなものです。
タイマーと同じように割り込みを使ったスケッチにしてみました。ボタンを5回押すとLEDをON/OFFするようになっています。チャタリングをチェックするために定期的にカウント値(TCNT1)をシリアル出力するようにしました。
#include <avr/io.h> #include <avr/interrupt.h> void setup() { Serial.begin(115200); pinMode(5, INPUT_PULLUP); pinMode(13, OUTPUT); noInterrupts(); TCCR1A = 0; TCCR1B = 0; TCNT1 = 0; OCR1A = 4; TCCR1B = bit(WGM12) | bit(CS12) | bit(CS11) | bit(CS10); TIMSK1 = bit(OCIE1A); interrupts(); } ISR (TIMER1_COMPA_vect) { Serial.println("INT!"); digitalWrite(13, !digitalRead(13)); } void loop() { delay(100); Serial.print(TCNT1); }
実際の動作をみてみましょう。
ちょっと不正確ですね。シリアルでカウント値を確認すると飛び飛びの値になっていました。どうやらチャタリングのせいのようです。スケッチが間違っているわけではなさそうです。
今回はカウンタについてチェックしてみました。これは色々と応用できそうです。次はいよいよ PWM について確認したいと思います。
(^_^)/~
関連記事
Arduino Nano のTimer 機能を使ってみた
http://makers-with-myson.blog.so-net.ne.jp/2016-01-29
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
SODIAL(R)V3.0 AVR 328 P-20AUモジュール基板ブラックブルーとUSBケーブル
- 出版社/メーカー: SODIAL(R)
- メディア: エレクトロニクス
コメント 0