- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 13 von 13

Thema: ADC Auflösung umrechnen - Divisionsproblem

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Anzeige

    Powerstation Test
    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.

  2. #12
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.686
    Zitat Zitat von Sternthaler
    ... Variante ... ein externes Hardware-Rechenwerk ...
    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.
    Ciao sagt der JoeamBerg

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.03.2010
    Beiträge
    161
    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.

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress