Forum: Mikrocontroller und Digitale Elektronik convert uint16_t to float


von rene (Gast)


Lesenswert?

Hallo
 für eine umfangreiche Berechnung habe ich als Funktionsparameter 
uint16_t. der Rückgabewert ist float.

Kann mir jemand beim convert helfen??

Danke im Voraus.

von W.A. (Gast)


Lesenswert?

rene schrieb:
> Kann mir jemand beim convert helfen??

Wenn du beschreibst, wo das Problem liegt ...

von rene (Gast)


Lesenswert?

die Konvertierung an sich ;-)

AVR verwendet 32 bit meine ich für float
ich muss also meinen 16bit-breiten Funktionsparameter casten... nur wie?

von rene (Gast)


Lesenswert?

1
float calcTemp(uint16_t adcval)
2
{
3
  float retValue;             // Description: der Rückgabewert ist die gemessene Temperatur in °C
4
5
  float fl_Uref = 4.4;          // Description: Referenzspannung
6
  float fl_resolutionAdc = 1023;      // Description: Auflösung des ADC
7
  float fl_rSerie = 2500;          // Description: Reihenwiderstand zum pt1000 in Ohm
8
  float fl_Rpt1000_valueA = 0.0039083;
9
  float fl_Rpt1000_valueB = -0.0000005775;
10
11
  retValue = (sqrt(10)*sqrt(((float)250 * pow(fl_Rpt1000_valueA, 2)) + fl_Rpt1000_valueB*(((-fl_rSerie)*adcval/fl_resolutionAdc)/(adcval/fl_resolutionAdc-1))-(float)(1000*fl_Rpt1000_valueB))-(float)(50*fl_Rpt1000_valueA))/((float)100*fl_Rpt1000_valueB);
12
}


Das ergebmis soll mit dem Parameter 319 34°C sein... noch funktioniert 
es nicht :-(

von rene (Gast)


Lesenswert?

Die Formel ist definitiv korrekt (habe es mit excel nachgerechnet --> da 
funktioniert es)

von nachtschicht (Gast)


Lesenswert?

Deine Funktion calcTemp hat keinen Rückgabewert.
Mach mal ein "return retValue;" am Ende der Funktion.

Ansonsten funktionierts bei mir schon unter Visual Studio.

Bei Eingabe von 319 kommt als Ergebnis 34.154675

von rene (Gast)


Lesenswert?

Man... das ist ist echt peinlich... Danke dir

Dennoch ist das Ergebnis nicht richtig... :-(

erledigt:

1
float calcTemp(uint16_t adcval)
2
{
3
  float retValue;             // Description: der Rückgabewert ist die gemessene Temperatur in °C
4
5
  float fl_Uref = 4.4;          // Description: Referenzspannung
6
  float fl_resolutionAdc = 1023;      // Description: Auflösung des ADC
7
  float fl_rSerie = 2500;          // Description: Reihenwiderstand zum pt1000 in Ohm
8
  float fl_Rpt1000_valueA = 0.0039083;
9
  float fl_Rpt1000_valueB = -0.0000005775;
10
11
12
  retValue = (sqrt(10)*sqrt(((float)250 * pow(fl_Rpt1000_valueA, 2)) + fl_Rpt1000_valueB*(((-fl_rSerie)*adcval/fl_resolutionAdc)/(adcval/fl_resolutionAdc-1))-(float)(1000*fl_Rpt1000_valueB))-(float)(50*fl_Rpt1000_valueA))/((float)100*fl_Rpt1000_valueB);
13
  
14
       return retValue;
15
}

Aufruf der Funktion:
1
float flTemp = calcTemp(319);
2
printf("temp: %f\n",  flTemp);

Ausgabe:

"temp: ?"

von Karl H. (kbuchegg)


Lesenswert?


von rene (Gast)


Lesenswert?

vielen vielen Dank...

das hat mir wirklich weitergeholfen


1 A dieses Forum

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.