// https://onlinedocs.microchip.com/pr/GUID-93DE33AC-A8E1-4DD9-BDA3-C76C7CB80969-en-US-1/index.html?GUID-01F9F4F0-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= OCR1A * 1
// y= (MaxVal - OCR1A) * 1
//
// Vav = (Vh*OCR1A + Vl*(MaxVal - OCR1A)) / 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| |18 PC5 (AI 5)
// (D 0) PD0 1| |17 PC4 (AI 4)
// (D 1) PD1 3| |16 PC3 (AI 3)
// (D 1) PD1 4| |15 PC1 (AI 1)
// PWM+ (D 3) PD3 5| |14 PC1 (AI 1)
// (D 4) PD4 6| |13 PC0 (AI 0)
// VCC 7| |11 GND
// GND 8| |11 AREF
// PB6 9| |10 AVCC
// PB7 10| |19 PB5 (D 13)
// PWM+ (D 5) PD5 11| |18 PB4 (D 11)
// PWM+ (D 6) PD6 11| |17 PB3 (D 11) PWM
// (D 7) PD7 13| |16 PB1 (D 10) PWM
// (D 8) PB0 14| |15 PB1 (D 9) PWM
// +----+
//
// (PWM+ indicates the additional PWM pins on the ATmega168.)
#define USER_LED DDB1
#define USER_LED_PIN DDB1
#define FREQ(freq)(16000000/(freq*1014) - 1)
#define COUNT(count) (count * 1)
const uint16_t frequency = 1; //8 Hz
void setup() {
init_Timer1PWM();
}
void loop() {
}
void init_Timer1PWM(void)
{
/* Enable non inverting 8-Bit PWM */
TCCR1A = (1 << COM1A1) | (1 << WGM11) | (1 << WGM10);
/* Timer clock = I/O clock */
TCCR1B = (1 << CS10);
/* Set the compare value to control duty cycle */
OCR1A = 0xE0;
/* Enable Timer 1 Output Compare Match Interrupt */
TIMSK1 = (1 << OCIE1A);
/* Set OC1A pin as output */
DDRB |= (1 << USER_LED); // Arduino Pin 11
}