Wenn du nur zB die Frequenzen von 1..150Hz hast, also 151 Werte oder so, dann kannst du die Prescale-Werte doch einfach ins Flash legen oder ins EEPROM, falls im Flash nicht mehr so viel Platz ist.
Hm, ist natürlich auch ne Idee, allerdings sind es ja immer 2 Werte, also insgesamt über 300 Werte.

Wenn du mit Integer-Zahlen rechnest, wird abgezwickt. Runden müßtest du selber.
Selber Runden wollte ich nciht und mit Integern soll es ja möglichst schnell gehen. Ich hab noch mal ein wenig drüber nachgedacht. Und das ist dabei rausgekommen:

Variablen:
IRQ-Presc. = Vorzähler in der IRQ
Timervorgabe = Timer-Füllwert in der IRQ
Takte = Takte bis zur nächsten Ausführung
HzVorgabe = Vorgabe wert in Ausführunden pro Sekunde

Takte = 16.000.000/(1024 x HzVorgabe)
IRQ-Presc. = Takte/62
Timervorgabe = 256 - (Takte/IRQ-Presc.)


Takte lässt sich einfacher berechnen, da 1024 als PRescaler bekannt ist:

IRQ-Presc. = 15625 / HzVorgabe

Also 3 mal Teilen und eine Subtraktion ergeben:

- Eine Abweichung von unter 1,4% maximal
- Eine geringere Abweichung bei höherer Taktrate
- Die IRQ erst nach 63488 oder mehr Takten aufgerufen
- Es lassen sich Werte für bis zu 252 Hz berechnen (danach wegen Rundungsfehlern Division/0)

Würde der AVR richtig runden, läge die Abweichung bei maximal 0,8%.