The Man
16.05.2009, 21:04
Hallo zusammen,
ich bin dabei mir einen Tiefpass für die standart µC zu überlegen. Standart in sofern, als das z.B. der gemeine Mega8 über keine Floating Point Unit verfügt. Softwaretiefpässe basieren ja darauf, das Delta zwischen dem letzten Ausgang und dem momentanen Eingang mit einem Faktor < 1 zu versehen und den Wert dann auf den Ausgang zu addieren. Das mit dem Faktor < 1 mache ich durch rechtsshift, wovor ich allerdings die entsprechenden Bits in eine Variable rette.
Wie macht ihr das mit dem Tiefpass?
Hier mal mein Code:
delta = (gyro_roh - tiefpass_out);
safe_rest += (delta & 0b00011111);
output_b(delta);
delta >>= 5;
tiefpass_out += delta;
output_b(tiefpass_out);
Ich überlege jetzt noch, wie ich mit dem Rest besser umgehen soll. Vll. werde ich ihn über einzelne Durchläufe zwischen den Aufrufen des Passes verteilen.
mfg,
The Man
ich bin dabei mir einen Tiefpass für die standart µC zu überlegen. Standart in sofern, als das z.B. der gemeine Mega8 über keine Floating Point Unit verfügt. Softwaretiefpässe basieren ja darauf, das Delta zwischen dem letzten Ausgang und dem momentanen Eingang mit einem Faktor < 1 zu versehen und den Wert dann auf den Ausgang zu addieren. Das mit dem Faktor < 1 mache ich durch rechtsshift, wovor ich allerdings die entsprechenden Bits in eine Variable rette.
Wie macht ihr das mit dem Tiefpass?
Hier mal mein Code:
delta = (gyro_roh - tiefpass_out);
safe_rest += (delta & 0b00011111);
output_b(delta);
delta >>= 5;
tiefpass_out += delta;
output_b(tiefpass_out);
Ich überlege jetzt noch, wie ich mit dem Rest besser umgehen soll. Vll. werde ich ihn über einzelne Durchläufe zwischen den Aufrufen des Passes verteilen.
mfg,
The Man