PWM 2Khz con Timer1 en modo CTC, no lo consigo

Hagamos otra prueba enmascarando las interrupciones del timer antes de variar la frecuencia

int duty = 50;
int _freq = 1;
int pinPote = A0;
int pote;
int poteAnt = 1024; 

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() {
  pote = analogRead(pinPote);
  if(pote != poteAnt){
    TIMSK1 &= ~(1 << OCIE1A); // deshabilitar interrupciones del timer1
    _freq = map(pote, 0, 1023, 300, 1900);
    ICR1 = (F_CPU / 1024 / _freq) - 1;
    OCR1A = (((F_CPU / 1024 / _freq) - 1) * duty) / 100;
    poteAnt = pote;
    TIMSK1 |= (1 << OCIE1A); // rehabilitar interrupciones del timer1
  }
}

Ya le vamos a encontrar la vuelta, no desesperes...


Yo entiendo que quieres implementar lo aprendido pero evidentemente estamos (me incluyo) obviando algo por eso no funciona como esperamos.

Mientras tanto, ¿por qué no intentas hacerlo usando la librería TimerOne a ver si da mejor resultado?
Si funciona bien, es cuestión de estudiar la librería a ver que pasos nos estamos "comiendo".

Saludos