AD beim AVR mit verschiedenen Potis - Probleme mit FLOAT

Gast #1218576
Lesenswert?
• ▲
▼
Hallo zusammen,

ich möchte am ADC verschiedene Potis anschließen können.
Den Wert, den ich verarbeiten möchte soll 0 - 127 sein.
Daher muss ich ja bei jedem Wechsel des angeschlossenen Potis das ganze 
neu "kalibrieren".

Folgender Ansatz:
ich stelle einmal den Minimal und dann den Maximalwert des Potis ein.
Ich speichere bei der Kalibrierung:
1. "adc0min": den Minimalwert (falls das Poti einfach nicht auf 0 kommt)
2. "adc0cal": ich teile den Maximalwert durch 127

Die variablentypen:
float adc0cal;
int adc0min;

folgendes Codebeispiel für die Berechnung:
return = ADC-Wert  / adc0cal - adc0min;

Mein Problem ist dabei nun, das der scheinbar adc0cal nicht als Float 
behandelt sondern als integer mit berechnet. Somit stimmt return nicht 
und ich bekomme Werte deutlich über 127 zurück. Muss ich irgendetwas 
beachten, damit der AVR das verünftig berechnet?

Vielen Dank für die Hilfe,
Samuel
Gast #1218589
Lesenswert?
• ▲
▼
momentan habe ich adc0_min komplett rausgelöscht.

Gerade habe ich versucht:
in adc0_max (vom Typ uint16_t) den maximalen Wert den das Poti erreicht 
speichern und dann:

(int)(ceil(ADC-WERT / (float)( adc0_max / 127)))


mit dem selben Ergebnis...
Gast #1218595
Lesenswert?
• ▲
▼
neuer Versuch:
ich habe den Wert für adc0_cal manuell berechnet und hart in den Code 
eingetragen. Das funktioniert wie gewünscht:

return = (ceil(ADC-WERT / 7.3149606)));

warum geht meine Float Variable adc0_cal nicht, bzw. wo läuft es falsch.
Schon beim Ermitteln von adc0_cal, beim Speichern, beim weiterberechnen.
Ich habe ja inzwischen versucht alles zu casten, ohne Erfolg.

Sammy

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