-         

Ergebnis 1 bis 7 von 7

Thema: runden, ich dreh round!! PIC18f...

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2010
    Beiträge
    10

    runden, ich dreh round!! PIC18f...

    Anzeige

    Servus,

    ich hab da mal n Problemchen mim C18 ...

    Ich hab mein 18f4520, messe übern Interrupt n Zeitabstand und Teile eine Zahl durch diesen Zeitabstand.
    Genauer gesagt Teile ich ein INT durch ein FLOAT und weise es einem INT zu.
    So, und jetzt hab ich festgestellt dass z.B. die Zahl 2,93 auf 2 gerundet wird.
    JA.. wenn das immer so wäre könnt ich damit leben, aber nein. Ab und an wir meine z.B. 15,51 auf 16 gerundet???
    round(FLOAT) funzt nicht ( steht aber was in der Lib-Doku ), hab math.h eingebunden aber findet "round" nicht.

    Kann ich dem noch irgendwie beibringen richtig zu runden oder gibt es ne Funktion die runden kann??

    Vieelen vielen Dank schonmal!

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Mal schnell was gebastelt:
    Code:
    float fwert = 2.56;
    float ftemp = 0;
    int    itemp = 0;
    int    iergebnis=0;
    
    itemp = (int)fwert;
    ftemp = fwert - itemp;
    
    if(ftemp >= 0.5)
         iergebnis = itemp +1;
    if(ftemp < 0.5)
         iergebnis = itemp;

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2010
    Beiträge
    10
    Dank dir!

    An sowas hatte ich auch schon gedacht, aber kann der das nicht von sich aus irgendwie richtig machen?

    Ich werte ein Sensor aus und da zählt jede ns. Das läuft zwar alles nach dem einlesen, aber ich will so schnell wie möglich wieder neue Daten einlesen können...

    vll ist auch was an meinem code falsch?? ( arbeite erst seit 2 Wochen mit dem PIC )

    Code:
    ...
    volatile unsigned int data1=0;
    volatile unsigned float tickF=0;
    ...
    data1=(data1/tickF)-12;

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Dir ist schon klar das da auch negative Werte bei rauskommen können?!
    Müsstest schon etwas mehr Code postet.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2010
    Beiträge
    10
    Moin moin,
    hier mal ein bisschen mehr code:

    Code:
    volatile unsigned char data1L=0;
    volatile unsigned char data1H=0;
    
    
    funk()
    {
    unsigned int data1=0;
    unsigned float tickF=0;
    ... 
    data1=data1H;
    data1=data1<<8;
    data1=data1+data1L;
    data1=(data1/tickF)-12; // das Ergebnis kann nicht negativ werden! bzw nur bis max. -0.49
    ...
    }
    jemand ne Idee?

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    // das Ergebnis kann nicht negativ werden! bzw nur bis max. -0.49
    Nein, es ist unsigned, kann also nicht negativ werden.
    Normalerweise dürfte da garnicht gerundet werden, sondern einfach nur das ,xxx abgeschnitten werden.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2010
    Beiträge
    10
    ok, wie bekomm ich ihn denn zum runden? wenn ich das unsigned wegmache?

Berechtigungen

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