Mr Bean schrieb:
> Muss ich den vom AD-Wandler ausgegebnen Wert durch 23 teilen? Im Moment
> siehr mein Code zur Berechnug folgendermaßen aus:
>
> [c]
> uint8_t GetAnalogTemp(int16_t *temp)
> {
> int16_t analogTemp = 0;
> uint16_t current = 9950;
> uint8_t gain = 23;
>
> calcAverage(TEMPSENSOR, 8, &analogTemp);
> analogTemp = analogTemp / gain;
> analogTemp = analogTemp / current;
> analogTemp = analogTemp >> 10;
> analogTemp = analogTemp - 984;
> analogTemp = analogTemp / 4;
Für meine Begriffe gehst du hier etwas zu naiv an die Dinge ran.
Du musst dir eines merken: Rechnen auf dem Papier wie ein Mathematiker
und Rechnen in einem Computer sind 2 Paar Schuhe.
Bits die dir in einer Berechnung verloren gehen, sind verloren!
Das bedeutet:
Wenn man eine Formel implementiert, dann geht man erst her und macht
seine Hausaufgaben auf dem Papier. Und das bedeutet: Die Formel
aufschreiben und umformen.
Das Ziel: Man will die Berechnungen so umformen, dass Divisionen
möglichst zum Schluss auftauchen. Denn bei einer Division (insbesondere
einer Integer Division) gehen dir Bits verloren. Sie sind einfach nicht
mehr da.
In einer Integer Division ergibt dir 10 / 3 nun mal eine glatte 3. Die
Berechnungen 10/3*4 und 10*4/3 liefern unterschiedliche Ergebnisse!
10/3 gibt 3 und das mal 4 macht 12. 10*4 macht 40 und das durch 3
ergibt aber 13!
Und den Rechtsshift mit 10: Mach erst mal den Rest richtig und dann
kümmerst du dich um Geschwindigkeit. Ein schnell errechnetes Ergebnis
bringt dir nichts, wenn es falsch ist.
ALso: Hausaufgaben machen und die Formeln auf dem Papier rechnertauglich
zusammenfassen und umformen.
Das dann implementieren. Und zwar ohne Haken und Ösen.
Dann Testen
Und erst dann nachsehen, wie man die Operationen noch schneller machen
kann.
Und nein: Wenn man während der Programmierung darüber nachdenken muss,
in welcher Reihenfolge Dinge berechnet werden müssen, dann hat man seine
Hausaufgaben definitiv nicht gemacht. Im Idealfall hat man vorher schon
auf dem Papier mit ein paar fiktiven Messwerten die Berechnung
durchgeführt und sich davon überzeugt, dass die Formeln stimmen.