Veo un pequeño error:
_frec nunca puede valer 0 porque te daría error en las divisiones.
F_CPU / 1024 / _freq
arrojaría un resultado indeterminado.
SI bien en este caso particular no te genera problemas porque map() le altera el valor antes de las divisiones, siempre ten presente estos detalles que se pueden volver un quebradero de cabeza.
Me parece que sería mejor que hagas cambios en los registros únicamente si has modificado la posición del potenciómetro
Prueba así
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){
_freq = map(pote, 0, 1023, 300, 1900);
ICR1 = (F_CPU / 1024 / _freq) - 1;
OCR1A = (((F_CPU / 1024 / _freq) - 1) * duty) / 100;
poteAnt = pote;
}
}
a ver si deja de hacer esa "pausa" que nos comentas.
El valor de poteAnt lo fijé en 1024 porque es un valor que nunca podría alcanzar pote (así me aseguro que se cumple la primer comparación)
Saludos
PD: Me refiero a la primer comparación recién iniciado el arduino.
Me di cuenta que no te dije dónde veia el error, lo digo por ésto
int _freq = 0;
Si bien, como ya dije, en tu caso no molesta, es buena práctica no asignar valores iniciales que podrían traer problemas en otra situación.