Absender: Fabian Recktenwald
Datum: Mo, 20.03.2006 11:08:47
In-reply-to:
<200603200038.37012.michail@xxxxxxxxxx>
References:
<9612803660.20060317112342@xxxxxxxxxxxxxxxxx> <200603171353.38977.tevers@xxxxxxxxxxxxx> <441C4682.9070704@xxxxxxxxxxxx> <200603200038.37012.michail@xxxxxxxxxx>
Sowas kann ich bereits anbieten. Funktioniert bei mir ganz gut. Müßte ich mal als Patch gegen die aktuelle Version erzeugen.allerdings um Längen weniger als vorher. Hast Du mal statt gleitendem Mittelwert den ungewichteten Mittelwert der letzten n Proben getestet
-------- void bot_sens_isr(void){ // Arrays mit Werten des linken/rechten Sensors static int16 SDAL[8] = {0,0,0,0,0,0,0,0}; static int16 SDAR[8] = {0,0,0,0,0,0,0,0}; // // Position im Array static int8 SDAp = 0; // Summe der Arrays static int16 SDAsumL = 0; static int16 SDAsumR = 0; . . . //Aktualisiere Distanz-Sensoren// Die Distanzsensoren sind im Normalfall an, da sie 50 ms zum booten brauchen
// sensDistL= adc_read(SENS_ABST_L); // sensDistR= adc_read(SENS_ABST_R); // Array Position hochsetzen) if (++SDAp == 8) SDAp = 0; // alten Wert abziehen SDAsumL -= SDAL[SDAp]; SDAsumR -= SDAR[SDAp]; // neuen Wert speichern SDAL[SDAp] = adc_read(SENS_ABST_L); SDAR[SDAp] = adc_read(SENS_ABST_R); // aufaddieren SDAsumL += SDAL[SDAp]; SDAsumR += SDAR[SDAp]; // Sensorwert ermitteln (Division durch 8) sensDistL= sensor_abstand(SDAsumL >> 3); sensDistR= sensor_abstand(SDAsumR >> 3);