- LiFePO4 Speicher Test         
Ergebnis 1 bis 3 von 3

Thema: Ergebnis der AD-Wandlung mit Kommata angeben!

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    17.05.2010
    Ort
    unna
    Alter
    36
    Beiträge
    5

    Ergebnis der AD-Wandlung mit Kommata angeben!

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Wie kann ich mein Ergebnis der AD-Wandlung mit 3 Stellen hinter dem Komma über den datentyp integer ausgeben?

    das ist jetzt für den c515c von infineon, aber das prinzip ist ja ungefähr dasselbe wie beim atmel.

    Die Vorkommastelle hab ich schon hinbekommen:

    Teil aus der deklaration
    Code:
    #define V_REF 5
    #define V_SCALE (1024/V_REF)
    Teil aus der main
    Code:
    volt = (ADDATH << 2) | ADDATL;	 
    printf("AIN0  = %u Volt \n", (int) ((volt)/V_SCALE));
    schonmal vielen dank im vorraus

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.04.2010
    Beiträge
    170
    Bei drei Stellen nach dem Komma multiplizierst Du die Stellen vor dem Komma mit 1000 und ziehst das Ergebniss vom Ausgangswert ab.

    Beispiel:

    Gesammt: 123456
    Vorkomma: 123
    123 x 1000 = 123000
    123456 - 123000 = 456
    Nachkomma: 456

    MfG JoeBlack

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Im Prinzip stimmt das was JoeBlack schreibt.
    In C muss Du da allerdings ein wenig ausfpassen.
    Die Berechnungen als INT müssen immer ohne Dezimalbrüche gemacht werden, weil die bei der Berechnung einfach abgeschnitten werden.

    Also 9/10 ergibt 0 anstatt 0,9!

    Die Werte müssen in Deinem Fall also 1000 mal größer sein ( 3 Nachkommastellen ) als das Ergebnis.

    Die Reste können auch durch Eingabe eines "%" berechnet werden.

    vorkomma=123456/1000; //Ergebnis 123;
    nachkomma=123456%1000; //Ergebnis 456;

    Setzt man das Ergebnis wieder zusammen gibt es noch ein Problem mit den ASCII Wandlungen, weil führende Nullen der Dezimalbrüche nicht eingetragen werden. Ob es da eine Möglichkeit für Deinen Compiler gibt die Leerstellenunterdrückung aufzuheben müsstest Du im Manual des Compilers nachlesen.
    Wenn es die Möglichkeit nicht gibt, kann man es so machen:
    Beispiel führende 0 en Einfügen
    itoa(vorkomma,string);
    strcpy(ausgabe,string);
    strcatf(ausgabe,",");
    itoa(nachkomma,string);
    if(nachkomma<10){strcatf(ausgabe,"0");}
    if(nachkomma<100){strcatf(ausgabe,"0");}
    strcat(ausgabe,string);

    Wenn Du mit signed Variablen arbeitest wird auch beim Teiler % das Minuszeichen mit übertragen und muß durch Multiplikation mit -1 wieder entfernt werden.
    if(nachkomma<0){nachkomma*=-1;};
    Sonst bekommst Du als Ergebnis -123,-456

    Im klaren solltest Du Dir auch über die Wertebereiche von 16Bit (Integers) und 32 Bit (Long Intergers) sein.

    Im übrigen sind 3 Nachkommastellen für einen 10Bit A/D Wandler ohnehin Luxus. Wirklich stimmen eigentlich nur 1 bis 2 Stellen nach dem Komma.

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress