タイマー1 / インプットキャプチャ機能 / 外部パルスのパルスエッジをキャプチャする

p.494

ICP1ピン(PB0)に入力したパルスのパルスエッジが検出されたら、そのときのタイマー1のカウント値をキャプチャして表示する。
f:id:ti-nspire:20200718133937p:plain:w500

#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)の順番で指定する。

ISR(TIMER1_CAPT_vect){    // ICP1ピン(PB0)にキャプチャイベントが発生したら、
    lcd.gotoRowCol(1, 1);
    lcd.print(ICR1);      // キャプチャされたカウント値を表示する。
}

int main(){
    lcd.init(); 
    
    // rising edgeでキャプチャ(デフォルトはfalling edge)。分周せずにカウント
    // ICESはInput Capture Edge Select。
    // CSはClock Select。
    TCCR1B |= (1 << ICES1) | (1 << CS10);
    
    // インプットキャプチャ割り込みを有効化。
    TIMSK1 |= (1 << ICIE1);
    
    sei();
    while(1);    
    return 0;
}