Forum: Mikrocontroller und Digitale Elektronik Float benutzen im Mikrocontroller


von Maurin V. (Firma: Keine) (maurin)


Lesenswert?

Hey Leute

Arbeite zum erstenmal mit einem Mikrocontroller und frage mich nun auf 
was ich achten muss wenn ich floats oder doubles benutzen möchte bei 
einem stinknormalen PIC der 16er familie von Microchip. Spielt da die 
Rechenleistung oder der Speicher oder gar beides ne Rolle auf was achtet 
man da ?

von (prx) A. K. (prx)


Lesenswert?

Kostet üblicherweise deutlich Flash-Speicher, einerseits für die 
implizit aufgerufenen Berechnungsfunktionen, andererseits für 
Konvertierung bei Ausgabe wie etwa mit printf. Grad bei printf kann es 
sein, dass man irgendwas tun muss, ob dessen vollständige Version zu 
kriegen (=> Handbuch vom Compiler).

von Maurin V. (Firma: Keine) (maurin)


Lesenswert?

Vielen dank erstamls für die Antwort. Allerdings verstehe ich das mit 
dem Compiler nicht ganz es kann sein das eine light version des 
compilers für diese Funktion nicht ausreicht ? weil mein ziel ist es 
schlussendlich genau die printf funktion zu benutzen ?

von (prx) A. K. (prx)


Lesenswert?

Es kann sein, das verschiedene Libraries vorhanden sind. Und die 
einfache kompakte Standard-Version davon im printf() keine 
Fliesskommaunterstützung hat.

von klausr (Gast)


Lesenswert?

In vielen Fällen kann man meist ganz auf das rechnen mit 
Gleitkommazahlen verzichten, z.B. in dem man kleiner Einheiten wählt 
oder Fixkomma verwendet.
Ist halt oft eine Frage, wie genau ein Ergebnis sein muss. Was willst du 
denn machen? Verwendest du Gleitkomma, ist halt u.U. ruck-zuck der Flash 
voll und die Berechnungen sin oft auch sehr langsam. Gut, das kann man 
oft verschmwerzen. Bei Flash Größen bis 8k wäre ich da sehr vorsichtig. 
Grad printf mit float bzw. double ist da sehr speicherintensiv.

von Peter D. (peda)


Lesenswert?

Maurin Vögeli schrieb:
> es kann sein das eine light version des
> compilers für diese Funktion nicht ausreicht ?

Woher sollen wir wissen, welchen Compiler Du benutzt?
Schau in die Doku zu diesem Compiler, da steht sowas drin.

Falls es für Deinem MC einen GCC gibt, der sollte das können und kostet 
nix.


Peter

von Maurin V. (Firma: Keine) (maurin)


Lesenswert?

Ich verwende es zur Temperaturregelung einer Lötsation wobei die Werte 
schon eine gewisse genauigkeit aufweisen sollten. In diesem Fall wähle 
ich warscheinlich besser ein MCU mit einem Speicher oberhalb von 8k 
vielen dank.

von Peter II (Gast)


Lesenswert?

Maurin Vögeli schrieb:
> Ich verwende es zur Temperaturregelung einer Lötsation wobei die Werte
> schon eine gewisse genauigkeit aufweisen sollten.

und wo bekommst du die werte her? von einem ADC, wenn ja kommt dort aber 
ein int raus und kein float. Es gibt dafür keinen Grund erst nach float 
umzuwandeln.

speichere die Temperatur einfach als int mit 1/10 Grad wenn es denn sein 
muss.

von Vuvuzelatus (Gast)


Lesenswert?

>auf was ich achten muss wenn ich floats oder doubles benutzen möchte

Du musst darauf achten, ob Du tatsächlich echte Gleitkommaarithmetik 
brauchst, oder ob nicht auch Festkommaarithmetik reicht.

http://www.mikrocontroller.net/articles/Festkommaarithmetik

von MaWin (Gast)


Lesenswert?

> Ich verwende es zur Temperaturregelung einer Lötsation

Wozu in aller Welt braucht man dafür Gleitpunktzahlen ?

Andererseits ist es völlig wurscht, 1000 solcher Operationen schafft 
auch ein uC pro Sekunde, und das reicht sicherlich für die primitivste 
aller Steuerungen.

von Peter D. (peda)


Lesenswert?

Maurin Vögeli schrieb:
> Ich verwende es zur Temperaturregelung einer Lötsation wobei die Werte
> schon eine gewisse genauigkeit aufweisen sollten.

Du kannst Dir mit float natürlich in die eigene Tasche lügen.
Aber genauer als Dein ADC wirds nicht, 10Bit bleiben 10Bit.


Peter

von Dogbert (Gast)


Lesenswert?

Maurin Vögeli schrieb:
> Ich verwende es zur Temperaturregelung einer Lötsation wobei

Ich denke das geht nur mit einem Compiler und Microcontroller der long 
double mit 80 Bit unterstützt.
15Bit Exponent und 64 Bit Mantisse sind knapp, aber sollten reichen.

Zum Glück sind Microcontroller heutzutage schon so weit entwickelt dass 
man diese auch Bequem in solch anspruchsvollen Anwendungen verwenden 
kann was vor ein paar Jahren noch undenkbar war.

von Falk B. (falk)


Lesenswert?

@  Maurin Vögeli (Firma: Keine) (maurin)

>Ich verwende es zur Temperaturregelung einer Lötsation wobei die Werte
>schon eine gewisse genauigkeit aufweisen sollten. In diesem Fall wähle
>ich warscheinlich besser ein MCU mit einem Speicher oberhalb von 8k

Früher (tm) hätte es ei einfacher Komparator für 10 Cent, ähn 20 
Pfennige getan ;-)

von (prx) A. K. (prx)


Lesenswert?

Und dieser Komparator steckte alternativ nicht in der Basisstation, 
sondern in der Lötspitze und nutzte einen seltsamen physikalischen 
Effekt aus. ;-)

von Maurin V. (Firma: Keine) (maurin)


Lesenswert?

Jetzt bin ich neugierig was den für einen Effekt ? ja diese version 
würde nicht funktionieren da ich einen fertigen Lötspitzverwende von 
Weller ;)

von Purzel H. (hacky)


Lesenswert?

>Ich verwende es zur Temperaturregelung einer Lötsation wobei die Werte
>schon eine gewisse genauigkeit aufweisen sollten.


Fehlerfortpflanzung und so sind eher nicht bekannt schaetze ich.
32bit floar hat 5-6 signifikante Stellen, 64bit float hat etwas mehr.

von (prx) A. K. (prx)


Lesenswert?

Maurin Vögeli schrieb:

> Jetzt bin ich neugierig was den für einen Effekt ? ja diese version
> würde nicht funktionieren da ich einen fertigen Lötspitzverwende von
> Weller ;)

Genau und nur dann würde diese Version funktionieren. ;-)
Geht natürlich nicht mit jeder Spitze von Weller.

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.