Hi Sternst,
danke für den Input. Dass alle Variable uint32_t sind war reine Faulheit. Ich habe vorher, wie du geschrieben hast, alle Variablen auf die nötigen Größen reduziert gehabt. Allerdings hat die Rechnung dann Müll produziert und der Fehler schien durch die stupide Erweiterung aller Variablen auf 32 gelöst. Ich weiß, wahrscheinlich hat das das Problem nicht gelöst, sondern nur verschoben.

Gegenfragen:
Wenn ich die Integerdivision durchführe bekomme ich durchaus keine ganzzahligen Ergebnisse. Das ganze wird dann durch die Zuweisung an einen int ganzzahling gemacht. Da aber immer die Nachkommas dabei abgeschnitten werden wollte ich das mit round genauer machen. Wieso sollte das nix bringen?

in dem if-statement, welchen Vorzug bringt:
if (nenner >= (F_CPU/256))
gegenüber
if (F_CPU/nenner) <= 256
?

Kannst du mir bitte erklären, wie du auf diese Zeile kommst:
Code:
*ocr = ((F_CPU+(nenner/2)) / nenner) - 1;
Ich dachte lt. Datenblatt ist OCR = (F_CPU / (2 * Prescaler * Frequenz)) - 1

Wozu brauche ich bei dem prescaler index noch +1 und wozu das static?

Danke,
Simon