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
einen wichtigen Codeausschnitt vergessen. Die Ermittlung von adc0_cal erfolgt wie folgt: adc0_cal = (float)(ADC-WERT / 127); lg Samuel
Versuch mal return = ADC-Wert / (adc0cal - adc0min);
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...
adc0_cal = (float)(ADC-WERT / 127); -> adc0_cal = (float)ADC-WERT / 127;
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
@Stefan Ernst damit gehts es. Danke! adc0_cal = (float)ADC-WERT / 127;
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.