Forum: Mikrocontroller und Digitale Elektronik Umwandlung von Integer auf float und dann in string


von El G. (elgrosso)


Lesenswert?

Hallo zusammen,

ich möchte Werte von A/D Wandler (ADS1118)mit Hilfe des LCD(HD4470) 
auslesen. Die Werte, die ich rauskriege, sind von Datentyp Integer aber 
ich möchte in Float und dann in string umwandeln.
das hab ich mir überlegt:

               float f1, f2;

    ADC_Wert = ADC_Read(config_msb,config_lsb); // Datentyp int
    f1 = ADC_Wert;
    f1 = f2;
    f2 = ((f1*2.048)/(float)(32767*0.005*5));
    //my_IntToString(ADC_Wert,buff,5);

    sprintf(buff,"%f",f2);

ich bekomme leider immer nur eine Fragezeichen(?) auf dem Display. wie 
kann ich das lösen!!!
Ich freue mich auf Ihre Antwort und bedanke mich im voraus.

LG
Grosso

von Norbert (Gast)


Lesenswert?

El G. schrieb:
> wie kann ich das lösen!!!

Indem du uns die wichtigsten Informationen nicht vorenthältst.
Prozessor, Compiler, Makefile...

von Stefan F. (Gast)


Lesenswert?

Printf der avr C Library kann nur dann Floats ausgeben, wenn man dazu 
eine spezielle Library einbindet.

Füge in das Makefile ein:
1
# Enable floating-point support in printf
2
LDFLAGS += -Wl,-u,vfprintf -lprintf_flt -lm

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Was ist denn mit der Zeile:
1
f1 = f2;

Wozu ist die gut?

Gruss
WK

von Dorian H. (dorianh)


Lesenswert?

Hast du einen Debugger? Breakpoint auf Zeile "f1 = f2;"
und schauen was f2 fürn Wert hat. Du überschreibst nämlich deine
Messung f1, was so nicht sein sollte.

von W. Erner (Gast)


Lesenswert?

>     f1 = ADC_Wert;
>     f1 = f2;

------^--- Wassollas

>     f2 = ((f1*2.048)/(float)(32767*0.005*5));

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

El G. schrieb:
> (32767*0.005*5)

macht den konstanten Wert 819,175.

sowie

f2 = ((f1*2.048)/(float)(32767*0.005*5));
entspricht
f2 = (f1 x Zahl1) / Zahl2
also
f2 = f1 * (Zahl1/Zahl2), hier also 2048 / 819,175 = 2,50007629627369

--> Ich hätte jetzt einfach mal deine f1 x 2.5 gerechnet. Oder was genau 
bezweckst du mit dieser "Kalkulations-Grundlast" bei jedem 
Wandler-Vorgang?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

El G. schrieb:
> sind von Datentyp Integer aber ich möchte in Float und dann in string
> umwandeln.
Wozu float?
Wieviele Nachkommastellen kann dein ADC auflösen?
Wieviele Nachkommastellen willst du anzeigen?

Mal angenommen, du willst 3 Nachkommastellen anzeigen, dann rechne doch 
einfach in Integer und in mV...

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Wegstaben V. schrieb:
> hier also 2048 / 819,175 = 2,50007629627369

wahrscheinlich soll das 2.048 sein, also ist der neue Wert

0,0025000762962737

das ändert aber nix an der Fragestellung: Warum eine wiederholende 
neu-Berechnung von konstanten werten?

von Amateur (Gast)


Lesenswert?

@El Grosso

Kann es sein, dass Du in Wirklichkeit eine Art Beschäftigungstherapie 
für deinen µP aufgebaut hast.
Eventuell für thermische Betrachtungen.

Natürlich sind Dein Rechner sowie die Entwicklungsumgebung geheim. Leute 
die Dir antworten wollen, sollen ruhig, kräftig im Nebel herumstochern.

Zu deiner Rechnung: Die ist sinnlos, falsch und unnötig aufgeblasen.

Die potentiellen Helfer sollen also ruhig noch ein wenig Raten...

von Stefan F. (Gast)


Lesenswert?

Optimiert der Compiler diese Berechnung nicht sowieso zu einer simplen 
Multiplikation?

von Amateur (Gast)


Lesenswert?

@Stefan
Zumindest wird er aus 32767*0.005*5 was vernünftiges (819.175) machen.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Amateur schrieb:
> Zumindest wird er aus 32767*0.005*5 was vernünftiges (819.175) machen.
Das macht der Compiler aus konstanten doch sowieso?

von Dorian H. (dorianh)


Lesenswert?

Stefan U. schrieb:
> Optimiert der Compiler diese Berechnung nicht sowieso zu einer simplen
> Multiplikation?
ein guter Compiler ja.
Und es "ist" meistens :) besser, den code leserlich und logisch zu 
lassen, anstatt superoptimalen code zu schreiben, den man nach ein par 
Monaten (selbst mit Kommentaren) nicht mehr genau versteht. Aber 
Ausnahmen bestätigen wie immer die Regel.

: Bearbeitet durch User
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.