Wenn also dein Faktor als double vorliegt, etwa dFaktor, dann
ist
, wobei für dFaktor gelten mussCode:faktor = (uint16_t) (65536.0 / dFaktor)
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.
Disclaimer: none. Sue me.
Sorry, für dFaktor muss 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.
Disclaimer: none. Sue me.
Lesezeichen