-
Wenn also dein Faktor als double vorliegt, etwa dFaktor, dann
ist
Code:
faktor = (uint16_t) (65536.0 / dFaktor)
, wobei für dFaktor gelten muss
0 < dFaktor < 0.99998
Ich weiß ja nicht, wie du an den Faktor kommst, aber double-Arithmetik ist recht klotzig. Wahrscheinlich geht das auch per schlanker und schneller fix-Arithmetik.
Ist zwar nicht so schön hinzuschreiben, aber es lohnt die paar Zeilen Code.
-
Sorry, für dFaktor muss :oops: natürlich gelten
dFaktor > 1.001, weil er ja das Abklingen angibt, also um welchen Faktor die neue Duty kleiner ist als sie alte.
Die obige Schleife ist natürlich nur der prinzipielle Aufbau. In vivo ist das viel zu schnell und muss noch verzögert werden.