PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Weg umrechnung...



linuxer7
04.04.2013, 10:53
Hallo Leute.

Ich habe ein kleines Mathematisches Problem und ich hoffe Ihr könnt mir dabei helfen, und ich kann das einigermaßen darstellen.

Ich lese meinen Rc-Empfänger mit Bascom aus. Momentan läuft alles auf einem Test-Board mit einem Atmega16.
Die Erkennung funktioniert ohne Probleme, aber der Weg des "Steuerknüppels" von Anschlag zu Anschlag ist zu gering.
Ich messe mit Pulsin die Knüppelstellung des Senders. Anderst geht es nicht weil ich nur noch 2 Leitungen vom Atmega an meinem Robbi frei habe.
Also kein Interrupt. Aber das macht auch nichts, so wie es aussieht geht es ja auch mit Pulsin.

Also der Wert den ich messe ist von ..
MIN = 100
Mitte = 140
MAX = 180.

Ich brauche aber ..
MIN = 0
Mitte = 120 - 130
MAX = 250.

Wie rechne ich es das bei ..
Min 100 = 0
Mitte 140 = 125
Max 180 = 250

.. die Werte korrigiert werden.
Die korrigierten Werte werden dann direkt an die Motorsteuerung gegeben.
Ich rechne jetzt schon seit einer Stunde, aber es passt hinten und vorne nicht.

Irgendwer ne Idee?

Gruß
Thomas

Kampi
04.04.2013, 11:36
Hey,

probier es mal mit einer If, elsif, else Abfrage:

If Wert <= 100 then
Wert = 0
elsif Wert = 140 (oder z.B. ein Bereich Wert >= 130 AND Wert <= 150) then
Wert = 125
else Wert >= 180 then
Wert = 250
End if

Das spart rum rechnen ;)

Sauerbruch
04.04.2013, 11:40
Na ja, ich würde da den Dreisatz favorisieren:

Deine Ausgangs-Variable beginnt bei 100 und überstreicht einen Bereich von 80, und die Resultierende soll bei 0 beginnen und einen Bereich von 250 überstreichen.

Du müsstest also von der Ausgangsvariablen 100 abziehen und die Differenz mit 250/80 (=3,125) multiplizieren - fertich.

Der Haken ist natürlich der, dass Du eine exakte Multiplikation mit Fließkomma-Zahlen nur mit Single-Variablen durchführen kannst. Aber das wäre ja kein Problem:

Dim A as Byte (Ausgangs-Variable)
Dim B as Single
Dim C as Byte (Resultierende Variable)

B = A - 100
B = B * 3,125
C = B

Wenn es für die resultierende Variable aber auch okay wäre wenn sie von 0 - 240 geht statt bis 250, müsstest Du die Differenz nur mit 3 multiplizieren, was den Umweg über die Single-Variable erspart:

C = A - 100
C = C * 3

HeXPloreR
04.04.2013, 11:52
Ich würde es so machen wir Sauerbruch vorgeschlagen hat... allerdings würde ich die Abfragen die Kampi vorgeschlagen hat mitnehmen um die Mittelstellung auch im Programm zu definieren. Also beides gemischt - sollte sauber funktionieren. Hab ich auch so in einem Programm gemacht.

Allerdings musst Du bei Kampis weg aufpassen , denn damit allein verlierst du die Proportionalität der Hebelstellung.

linuxer7
04.04.2013, 14:01
Hallo Leute,

der Dreisatz war's. Vielen Dank.

Genau danach habe ich gesucht. Passt nun prima.
Manchmal sieht man den Wald vor lauter Bäumen nicht.

So wie Kampi habe ich es gemacht, aber war mir zu ungenau.
Alles was < unter 100 oder > 180 ist verliere ich weil ich dann den Rest überspringe.

Gruß
Thomas