PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : runden, ich dreh round!! PIC18f...



PicNewbie
28.04.2010, 15:50
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!

TobiKa
28.04.2010, 16:08
Mal schnell was gebastelt:


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;

PicNewbie
28.04.2010, 16:31
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 )



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

TobiKa
28.04.2010, 16:33
Dir ist schon klar das da auch negative Werte bei rauskommen können?!
Müsstest schon etwas mehr Code postet.

PicNewbie
29.04.2010, 09:29
Moin moin,
hier mal ein bisschen mehr 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?

TobiKa
29.04.2010, 14:49
// 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.

PicNewbie
29.04.2010, 15:28
ok, wie bekomm ich ihn denn zum runden? wenn ich das unsigned wegmache?