Weil ich aktuell ein Problem mit einem fürchterlich fiependen Lüfter habe, den ich per PWM in der Drehzahl regulieren möchte, habe ich nach einer Lösung gesucht. Dabei bin ich auf diese Lösung gefunden, die mit einer Funktion arbeitet. Um nur "mal eben" die Frequenz zu ändern ist das natürlich etwas "overkill", aber trotzdem vielleicht für den einen oder anderen interessant.
Wichtig ist zu wissen, dass bei einer Änderung der PWM an D5 oder D6 (Timer 0) gleichzeitig die Funktionen delay(), millis() und micros() verändert werden!
Timer 0 läuft mit 62500 Hz.
Timer 1 und Timer 2 laufen mit 31250 Hz.
Schön erklärt und mit Daten hinterlegt ist das hier.
Für den Fall, dass der Link irgendwann tot ist und für mich als Gedankenstütze:
Wer wie ich nur "mal eben" einen Timer ändern möchte, schreibt in die void setup()
TCCRnB = TCCRnB & 0b11111000 | Befehl;
Bei diesem befehl müsst ihr nur das n durch die Nummer des Timers und Befehl durch den Hex Code aus der Tabelle oben ersetzen. Für Timer1 und 31300Hz sähe es dann so aus.
TCCR1B = TCCR1B & 0b11111000 | 0x01; // Timer1 entspricht D9 und D10