Willa
04.07.2009, 19:16
Hallo!
Ich werte mit nem mega32 einen RC-Empfänger aus. Bei einigen Stickkombinationen und wildem Rumgerühre springt einer der ausgelesenen Werte manchmal. Ich denke, dass ich an der Auswertung selber nichts verbessern kann, deswegen würde ich gerne die ausgelesenen Werte auf ihre Richtigkeit hin überprüfen und falsche Werte rausschmeissen.
Das Ganze sollte natürlich möglichst wenig Rechenzeit in Anspruch nehmen. Einfach einen starken Tiefpass einprogrammieren kann ich auch nicht, dann wird die Reaktion auf die Knüppel zu langsam.
Bisher mache ich es so:
sempf(i) ist das Signal aus dem Empfänger für die 4 Kanäle, das Signal geht von -37 bis +37
'wenn neues signal mehr als 50 vom alten signal abweicht, dann altes signal halten.
For I = 1 To 4
If Sempf(i) > Aempfh(i) Or Sempf(i) < Aempfl(i) Then 'wenn ausserhalb der Grenzen
Sempf(i) = Aempf(i) 'neuer Wert = alter wert
End If
Aempf(i) = Sempf(i) 'alter wert = neuer Wert
Aempfh(i) = Sempf(i) + 50 'obere Grenze
Aempfl(i) = Sempf(i) - 50 'untere Grenze
Next
Mit dem Code wird also überprüft, ob der neue Wert sich um mehr als "50" vom alten Wert unterscheidet. Falls das so ist wird der alte Wert weiterverwendet.
Dadurch ergeben sich einige Probleme. Wenn ich die Sticks ganz schnell bewege, dann werden die neuen Werte nicht mehr akzeptiert. Und zwar werden die so lange nicht akzeptiert, bis ich den Stick wieder da hin bewegt habe wo die schnelle Bewegung gestartet wurde.
Gibt es elegantere Methoden um "Ausreisser" zu detektieren und auszusortieren? Zur Not muss ich doch einen Tiefpass nehmen.......
Vielen Dank für eure Tipps!
Ich werte mit nem mega32 einen RC-Empfänger aus. Bei einigen Stickkombinationen und wildem Rumgerühre springt einer der ausgelesenen Werte manchmal. Ich denke, dass ich an der Auswertung selber nichts verbessern kann, deswegen würde ich gerne die ausgelesenen Werte auf ihre Richtigkeit hin überprüfen und falsche Werte rausschmeissen.
Das Ganze sollte natürlich möglichst wenig Rechenzeit in Anspruch nehmen. Einfach einen starken Tiefpass einprogrammieren kann ich auch nicht, dann wird die Reaktion auf die Knüppel zu langsam.
Bisher mache ich es so:
sempf(i) ist das Signal aus dem Empfänger für die 4 Kanäle, das Signal geht von -37 bis +37
'wenn neues signal mehr als 50 vom alten signal abweicht, dann altes signal halten.
For I = 1 To 4
If Sempf(i) > Aempfh(i) Or Sempf(i) < Aempfl(i) Then 'wenn ausserhalb der Grenzen
Sempf(i) = Aempf(i) 'neuer Wert = alter wert
End If
Aempf(i) = Sempf(i) 'alter wert = neuer Wert
Aempfh(i) = Sempf(i) + 50 'obere Grenze
Aempfl(i) = Sempf(i) - 50 'untere Grenze
Next
Mit dem Code wird also überprüft, ob der neue Wert sich um mehr als "50" vom alten Wert unterscheidet. Falls das so ist wird der alte Wert weiterverwendet.
Dadurch ergeben sich einige Probleme. Wenn ich die Sticks ganz schnell bewege, dann werden die neuen Werte nicht mehr akzeptiert. Und zwar werden die so lange nicht akzeptiert, bis ich den Stick wieder da hin bewegt habe wo die schnelle Bewegung gestartet wurde.
Gibt es elegantere Methoden um "Ausreisser" zu detektieren und auszusortieren? Zur Not muss ich doch einen Tiefpass nehmen.......
Vielen Dank für eure Tipps!