Jag har ett programmeringsproblem jag funderat lite på, men är lite osäker på hur jag ska gå vidare med det.
Jag har en kod där man ställer in i vilken repititionshastighet något ska hända i, tex 80 Hz.
Men detta ska konverteras till hur många "system ticks" det är och då får man avrundningsfel över tiden.
Tex säg att systick är 1000 Hz så blir tiden mellan exekveringar 1000 / 80 = 12.5 vilket blir avrundat till 12 ticks. Det är nu istället ca 83.3 Hz.
Det jag vill är kompensera för detta genom att "vid rätt tillfälle" vänta 13 ticks istället för att kompensera för detta så medelfelet över lång tid blir noll.
Hur skulle ni lösa detta? Ända kravet är att man inte får använda flyttal.
Idén jag har är typ såhär (psuedo-kod):
Kod: Markera allt
/* Hitta akumuleringserrorn som blir */
const division_error = systick_frequency % desired_frequency;
.....
/* När man kör */
static accumulation_error = 0;
/* Integrera errorn */
accumulation_error += division_error;
/* Kolla om errorn har blivit nog stor */
if (accumulation_error >= deisred_frequency)
{
accumulation_error -= desired_frequecy;
delay(time + 1);
}
else
delay(time);