Yo lo hice así y funcionó bien reguló duty y frecuencia
int duty= 50;
int _freq = 100;
void setup() {
DDRB |= (1<<DDB1);
// modo ctc
TCCR1A &=~ (1<<WGM10);
TCCR1A |= (1<<WGM11);
TCCR1B |= (1<<WGM12);
TCCR1B |= (1<<WGM13);
TCCR1A &=~ (1<<COM1A0);
TCCR1A |= (1<<COM1A1);
//1024
TCCR1B |= (1<<CS10);
TCCR1B &=~ (1<<CS11);
TCCR1B |= (1<<CS12);
}
void loop() {
ICR1 = (F_CPU/1024/_freq) - 1;
OCR1A = (((F_CPU/1024/_freq) - 1)*duty)/100;
}