#include <avr/io.h>
#include <util/delay.h>

#ifndef F_CPU
#define F_CPU 16000000UL
#endif

void init_pwm()
{
    // Set OC0A (PD6, D6 on Arduino nano) as output
    DDRD |= (1 << DDD6);
    // duty cycle (0 - 255)
    OCR0A = 0;
    // Clear OC0A (PD6, D6 on Arduino nano) on compare match, set on bottom
    // ↓ Bottom  ↓ OCR0A
    // ──────────┐         ┌──────────┐
    //           └─────────┘          └─────────
    // ↑ 0                 ↑ 255
    TCCR0A |= (1 << COM0A1);
    // Set mode to Fast PWM
    TCCR0A |= (1 << WGM01) | (1 << WGM00);
    // Set prescaler to 8
    TCCR0B |= (1 << CS01);
}

int main()
{
    init_pwm();

    // loop forever
    while (1)
    {
        OCR0A++;
        _delay_ms(10);
    }
    return 0;
}