Zitat Zitat von PCMan
F_CPY/Prescaler/f ist ja das gleiche wie F_CPU/(Prescaler*f)
Nö, das ist nicht das gleiche! Das Rechnen im Computer/Taschenrechner geht wegen Rundingsfehlern und Bereichsüberläufen nicht so glatt wie im Matheunterricht!

Das Produkt in Zähler ist größer als 16 Bit, daher:

Code:
   Preloader = 256- F_CPU / ((unsigned long) PRESCALER*Hz);
ist zwar lästig und tückisch, aber muss eben sein. Steht wohl irgendwo tief in der C-Spez wie das vonstatten geht. Es entstehen ja Ausdrücke wie PRESCALER*Hz, wo weder durch den Input noch dirch den Output festgelegt ist, wie groß der Typ sein soll. In C ist das der größte Typ, der an der Operation beteiligt ist, also 16 Bits. Das Prokukt pass aber nicht in diese 16 Bits rein.