pp.494-495
今50 Hzの方形波(周期20 ms)を入力している。
#define F_CPU 8000000UL #include <avr/io.h> #include <avr/interrupt.h> #include "LCDClass.h" LCDClass lcd("PD7","PD6","PD5","PD4","PD3","PD2"); // (RS,EN,D4,D5,D6,D7)の順番で指定する。 volatile uint16_t timeOld; volatile uint16_t timeNew; ISR(TIMER1_CAPT_vect){ // ICP1ピン(PB0)にキャプチャイベントが発生したら、 // 隣るrising edge同士の差を計算して表示する。 timeOld = timeNew; timeNew = ICR1; lcd.gotoRowCol(2, 1); lcd.print(timeNew - timeOld); } int main(){ lcd.init(); lcd.gotoRowCol(1, 1); lcd.print("period (us):"); // rising edgeでキャプチャ(デフォルトはfalling edge)。8分周してカウント。 // だから1カウントが1 uS。 // ICESはInput Capture Edge Select。 // CSはClock Select。 TCCR1B |= (1 << ICES1) | (1 << CS11); // インプットキャプチャ割り込みを有効化。 TIMSK1 |= (1 << ICIE1); sei(); while(1); return 0; }