Bueno pues el código quedaría a sin:
int duty = 50;
int _freq = 0;
int pinPote = A0;
int pote;
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;
pote = analogRead(pinPote);
_freq = map(pote, 0, 1023, 300, 1900);
}
Lo hice para que el mínimo del potenciómetro tenga 300Hz y el máximo 1,9Khz.
Funciona pero es algo lento, cada vez que muevo un poco el potenciómetro la señal desaparece del osciloscopio y aparece a los pocos segundos con la frecuencia ya modificada.
No se si es mi osciloscopio o hice algo mal.