Hallo Carsten,
also eigentlich ganz einfach: Das Prinzip mit dem Timer hast du soweit
schon richtig erkannt und verstanden.
Um die Timerwerte zu berechnen mußt du nur wissen, mit welchem Takt
dein Timer betrieben wird, also die Frequenz des Mikrocontrollers und
den Prescaler (Vorteiler, welcher den Takt des MCs in einem definierten
Verhältnis teilt und damit den Timer versorgt). Dieser Takt mit dem der
Timer betrieben wird, bestimmt die Zeit (auch Periodendauer) eines
Zählschrittes, also z.B. von 1 zu 2 (Periodendauer = 1 / Frequenz).
Wenn der Zählbereich des Timers nicht ausreicht, also du eine
"relativ" kleine Frequenz erzeugen willst, dann erhöhe den
Prescalerwert um in einen Bereich zu gelangen, in dem du die Frequenz
abbilden kannst.
Dein Beispiel weitergeführt:
Frequenz des Mikrocontrollers: f_mc = 8Mhz
Frequenz des Ausgangssignales: f_out = 35 kHz
Timergröße: 8 Bit
Die Frage, welche sich jetzt stellt, aller wieviel µs mußt du den Pin
umschalten:
T_out = 1 / f_out = 1 / 35 kHz = 28.57... µs
Um sehr genau an diesen Wert heranzukommen, ist es wichtig, den
kleinstmöglichen Wert für den Prescaler zuverwenden.
T_mc = 1 / f_mc = 0,125 µs
die Anzahl der Zählschritte ergibt sich dann aus
(T_out / 2) / T_mc = 114,285...
T_out / 2 deswegen, da du immer nur bis zu dem Zeitpunkt zählen mußt,
an dem du das Ausgangssignal invertierst, also je nur eine halbe
Periodenlänge.
Da du nur ganze Zahlen als Werte für den Timer verwenden kannst,
verwendest du 114 (liegt ja zwischen 0 und 255, dem Wertebereich des
Timers) und du brauchst keinen Prescaler verwenden.
Zur Kontrolle noch mal die Frequenz ausrechenen, die am Ende wirklich
erzeugt wird:
f_out_real = 1 / T_out_real = 1 / (2 T_mc 114) = 35,088 kHz
ergibt ne Anweichung von 0,25%
Viel Spaß beim toggeln...