#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;
}