Winkel über Poti und ADC. ADC stimmt, aber Winkel nicht

OP #3638043
Lesenswert?

Hey,

ich lese über einen Poti einen ADC Wert aus (0...1024), was auch ohne 
Probleme klappt. Aber sobald ich folge Formel anwende, erhalte ich nur 
widersprüchliche Ergebnisse:
1
const short POTI_MAX_ANGLE = 270;
2
short CurrentLeverAngle;
3
short angleOffset  = -135;
4
uint16_t adc;
5

6
CurrentLeverAngle = (short)(10 * (POTI_MAX_ANGLE * adc / 1024.0 + angleOffset));
Die gerechneten Winkel sind immer negativ und am einen Anschlag habe 
-121,3° und am Anderen -135°. Dazwischen geht es mal hoch auf ca. -90° 
und dann fällt es wieder.
Muss ich noch was bezüglich Typenkonvertierung beachten? Die Formel 
stimmt, hab ich getestet
Gast #3638219
Lesenswert?

Die Float-Berechnung ( /1024.0) kannst Du sparen, indem Du das 10* mit 
in die Klammer nimmst:
CurrentLeverAngle = 10L  POTI_MAX_ANGLE  adc / 1024 + angleOffset;

Das (short) brauchst Du nicht, weil es automatisch gemacht wird 
(CuLeAngle ist short).
Das (int32_t) wird durch das 10L erledigt.
Das /1024 wird durch einfaches Schieben berechnet.

Was passiert mit dem Wert danach?
Dezimalrechnung nutzt nur einen Teil des darstellbaren Wertebereiches.
Deshalb so weit es geht binär / hex weiterrechnen.
Gast #3638277
Lesenswert?

eProfi schrieb:
> CurrentLeverAngle = 10L  POTI_MAX_ANGLE  adc / 1024 + angleOffset;

der TO wollte das eigentlich so:
CurrentLeverAngle = 10L * (POTI_MAX_ANGLE * adc / 1024 + angleOffset);

ist aber etwas sinnfrei, das Ergebnis springt dann in 10er Schritten,
Ich würde die 10 in POTI_MAX_ANGLE und angleOffset reinziehen um eine 
genauere Berechnung zu erreichen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren