// https://onlinedocs.microchip.com/pr/GUID-93DE33AC-A8E1-4DD9-BDA3-C76C7CB80969-en-US-2/index.html?GUID-02F9F4F0-0467-4D39-8374-F896EB1E6C87
// Vh: Output Voltage high level
// Vl: Output Voltage low level
// Vav: Average Output Voltage level
// x: Duty cycle high level
// y: Duty cycle low level
// Vav = (Vh*x + Vl*y) / (x + y)
// where,
// x= OCR2A * 2
// y= (MaxVal - OCR2A) * 2
//
// Vav = (Vh*OCR2A + Vl*(MaxVal - OCR2A)) / MaxVal
//
// On the Arduino board, digital pins are also used
// for the analog output (software PWM). Analog input
// pins are a separate set.
// ATMEL ATMEGA8 & 168 / ARDUINO
//
// +-\/-+
// PC6 1| |28 PC5 (AI 5)
// (D 0) PD0 2| |27 PC4 (AI 4)
// (D 1) PD1 3| |26 PC3 (AI 3)
// (D 2) PD2 4| |25 PC2 (AI 2)
// PWM+ (D 3) PD3 5| |24 PC1 (AI 1)
// (D 4) PD4 6| |23 PC0 (AI 0)
// VCC 7| |22 GND
// GND 8| |21 AREF
// PB6 9| |20 AVCC
// PB7 10| |19 PB5 (D 13)
// PWM+ (D 5) PD5 11| |18 PB4 (D 12)
// PWM+ (D 6) PD6 12| |17 PB3 (D 11) PWM
// (D 7) PD7 13| |16 PB2 (D 10) PWM
// (D 8) PB0 14| |15 PB1 (D 9) PWM
// +----+
//
// (PWM+ indicates the additional PWM pins on the ATmega168.)
#define USER_LED DDB5
#define FREQ(freq)(16000000/(freq*1024) - 1)
#define COUNT(count) (count * 2)
const uint16_t frequency = 2; //8 Hz
void setup() {
Serial.begin(115200);
DDRB |= (1 << USER_LED);
init_Timer1InputCaptureInterrupt();
}
void loop() {
}
void init_Timer1InputCaptureInterrupt(void)
{
/* Timer clock = I/O clock / 64 */
TCCR1B = (1<<CS11)|(1<<CS10);
/* Clear ICF1. Clear pending interrupts */
TIFR1 = 1<<ICF1;
/* Enable Timer 1 Capture Event Interrupt */
TIMSK1 = 1<<ICIE1;
}
ISR (TIMER1_CAPT_vect)
{
Serial.println("d");
/* Toggle a pin after input capture */
PORTB ^= (1 << USER_LED);
/* Clear counter to restart counting */
TCNT1 = 0;
}