Huiiiii - da ist schon wieder mal jemand, der (noch) EAI kennt. Diese Teile nannte man früher Analogrechner. Na ja, meist waren sie etwas komplexer als blos ein Widerstand - aber in der Kürze liegt eben wie immer die Würze.Zitat von Sternthaler
Hallo,
was ist mit der Variante, wenn man ein externes Hardware-Rechenwerk nutzt?
Hier kann man doch auch einfach einen zusätzlichen Widerstand rechnen lassen.
Poti mit 20kOhm und einen "Rechenwiderstand" mit 5,6kOhm davor gesetzt.
Fertig.
Gruß
Sternthaler
Lieber Asuro programieren als arbeiten gehen.
Huiiiii - da ist schon wieder mal jemand, der (noch) EAI kennt. Diese Teile nannte man früher Analogrechner. Na ja, meist waren sie etwas komplexer als blos ein Widerstand - aber in der Kürze liegt eben wie immer die Würze.Zitat von Sternthaler
Ciao sagt der JoeamBerg
Den Überlauf Fehler behebt man folgendermaßen:
Aufgabe: x=(ADC/1024)*200
Lösung mit Fließkomma: x=(double) (ADC/1024)*200
Lösung ohne Fließkomma: x=(uint32_t) ADC*200/1024
Immer, wenn Du Ausdrücke in Klammer schreibst, besteht die Gefahr, dass der Compiler für das Zwischenergebnis eine zu kleine Variable verwendet. ADC ist 16bit, und 1024 passen auch in 16bit rein. Also verwendet der Compiler für den Ausdruck (ADC/1024) eine 16bit Integer Variable. Da das Ergebnis immer <1 ist, hast DU dann als Ergebnis eine Null.
Für den Ausdruck (ADC*200) verwendet der Compiler aus dem gleichen Grund eine 16bit Integer Variable. Der Wert kann bis zu 204.600 betragen, was in 16bit nicht mehr rein passt. Da werden dann die überschüssigen Bits einfach links abgeschnitten.
Durch die Angabe (double) bzw. (uint32_t) bestimmst Du, welchen Typ die Variable für das Zwischenergebnis haben soll.
Lesezeichen