- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 6 von 6

Thema: Spannungsmessen ergibt falschen Wert?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Hallo nochmal,

    ich bin jetzt nach langem rumprobieren und manuellem nachrechnen drauf gekommen dass es so funktioniert:

    Code:
    int readInput0()
    {
      long Ergebnis1024 = analogRead(ADC0);
      return Betriebsspannung * Ergebnis1024 / 1024;
    }

    So funktioniert es jedoch NICHT: (2,12V statt 2,54V)
    Code:
    int readInput0()
    {
      long Ergebnis1024 = analogRead(ADC0);
      long Ergebnis = Betriebsspannung / 1024 * Ergebnis1024;
      return Ergebnis;
    }
    Kann mir das jemand erkläen?!
    Geändert von Schmiddi (01.09.2012 um 15:16 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578
    Hi,

    ich selbst behersche zwar kein C (nur in Grundzügen), aber ich denke es liegt daran, dass du im zweiten Beispiel erst dividierst und dann multiplizierst, dadurch verlierst du Auflösung

    Gruß
    Chris

  3. #3
    shedepe
    Gast
    Du solltest auch noch bedenken, dass long ein ganzzahliger Datentyp ist. Und damit keine Kommazahlen aufnehmen kann. Bei der Rechenoperation die du durchführst kommt allerdings mit recht hoher Wahrscheinlichkeit meistens eine Kommazahl raus. (Die Nachkomma stelle wird abgeschnitten)

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    Da gibt es auch noch das Ding mit der Auswertung von Ausdrücken. Die beiden Varianten sind für mich uneindeutig, weil eine Klammerung fehlt, die den Zähler vom Nenner trennt, sprich: den Buchstrich erkennbar macht.
    Wenn man z.B. den Ausdruck a / b * c (mit a, b, c ganzzahlig positiv) von links mit dem Taschenrechner auszurechnen beginnt, so wird das Ergebnis mit wachsendem c ebenfalls größer. Fängt man dagegen rechts mit der Auswertung an (das ist bei Programmiersprachen bzw. deren Compilern nicht unüblich), so wird das Ergebnis mit wachsendem c immer keiner!
    Geändert von RoboHolIC (03.09.2012 um 21:53 Uhr) Grund: Denkfehler wieder getilgt

  5. #5
    @RoboHolIC: Daran hatte ich gar nicht gedacht, ich bin tatsächlich davon ausgegangen dass von links nach rechts gerechnet wird, interessanter Aspekt!

    @shedepe: Das war mir soweit schon klar, ich hatte das ganze davor auch schon mit float getestet. Da es sich hier im mV handelt habe ich die Nachkommastellen vernachlässigt.

    Ok, jetzt hab ich das ganze soweit kapiert und mein Programm funktioniert nun bestens.

    Vielen Dank für eure Antworten!

Ähnliche Themen

  1. Taster6 (K1) liefert falschen Wert
    Von ea im Forum Asuro
    Antworten: 1
    Letzter Beitrag: 22.04.2009, 12:47
  2. uint8_t[4] -> float ergibt komische Rundungen
    Von PCMan im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 10.01.2009, 10:31
  3. DCF77 Config ergibt immer HIGH-PEGEL am INPUT-PIN ??
    Von tc-maxx im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 03.01.2009, 17:55
  4. Taster gibt falschen Wert
    Von HAWK-Matze im Forum Asuro
    Antworten: 6
    Letzter Beitrag: 29.12.2007, 11:48
  5. Variable enthält falschen Wert
    Von contrero im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 14.09.2007, 08:15

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress