Forum: Mikrocontroller und Digitale Elektronik floatzahl in ein assemblerkompatibles Format umwandeln


von König Artus (Gast)


Lesenswert?

Hallo zusammen,

eine Sensorelektronik liefert eine Floatzahl welche Werte von -200,0 bis 
+850,0 beschreibt.
Diese Floatzahl ist zwar mit 'C' auszuwerten aber ich suche eine 
Möglichkeit diese in ein assemblerkompatibles Zahlenformat umzuwandeln.

Gibt es da eine Lösung?

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


Lesenswert?

König Artus schrieb:
> eine Sensorelektronik liefert eine Floatzahl welche Werte von -200,0 bis
> +850,0 beschreibt.
Worüber (Schnittstelle, ADC) wird diese Zahl geliefert?

> Möglichkeit diese in ein assemblerkompatibles Zahlenformat umzuwandeln.
Wozu? In welchem Assembler?

> eine Floatzahl welche Werte von -200,0 bis +850,0 beschreibt.
Diese Zahl liesse sich z.B. in einer Festpunktzahl super abbilden.
Du definierst einfach: Zahlenbereich -2000...8500 und schwuppdiwupp 
passt das locker in eine 16-Bit Zahl...

von tobi (Gast)


Lesenswert?

König Artus schrieb:
> Diese Floatzahl ist zwar mit 'C' auszuwerten aber ich suche eine
> Möglichkeit diese in ein assemblerkompatibles Zahlenformat umzuwandeln.

Wenn Du Dir wirklich selber Schmerzen zufügen willst:

http://de.wikipedia.org/wiki/IEEE_754

von König Artus (Gast)


Lesenswert?

Danke für eure Antworten!

Lothar Millers Idee mit der 16-Bitzahl ist schon mal einleuchtend.


Der Hintergrund:(Hätte ich sofort schreiben sollen)

Die Sensorelektronik gibt über SPI(Slave) eine floatzahl aus(4 Byte).
Die Empfängerplatine übernimmt mit SPI(Master) diesen Wert. Wie tobi 
schrieb, ist es wohl maso-mässig diese floatzahl im Assemblerprogramm 
des Empfängers weiter zuverarbeiten.
Da sind 16-Bit doch handlicher, auch wenn die Übertragung viermal 
solange dauert.

Besten Dank!

von Serieller (Gast)


Lesenswert?

> Da sind 16-Bit doch handlicher, auch wenn die Übertragung viermal
> solange dauert.

Halb so lange...

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


Lesenswert?

König Artus schrieb:
> Die Sensorelektronik gibt über SPI(Slave) eine floatzahl aus(4 Byte).
Das macht nur Sinn, wenn die Dynamik des Signals es erfordert. Das ist 
hier augenscheinlich nicht nötig...

Was ist das für eine "Sensorelektronik"?

Serieller schrieb:
>> Da sind 16-Bit doch handlicher, auch wenn die Übertragung viermal
>> solange dauert.
> Halb so lange...
Hätte ich auch getippt: 32 Bit (float) vs 16Bit (short)...

von König Artus (Gast)


Lesenswert?

> Da sind 16-Bit doch handlicher, auch wenn die Übertragung viermal
> solange dauert.

Halb so lange...

Ähm..
"Bedecket mein Haupt nun, es muss erst gereinigt sein"(Aus "Die 
Zauberflöte")


Lothar Miller schrieb:
> Du definierst einfach: Zahlenbereich -2000...8500 und schwuppdiwupp
> passt das locker in eine 16-Bit Zahl...

So, zwischen "schwuppdi" und "wupp" hakt es jetzt. ;-)

Nachdem was ich mir erlesen habe kommt da ein 16-Bit 2er-komplement in 
Frage. Wie konvertiere ich eine float in das 2er-komplement?

Ich hab mal folgendes gemacht:

float a;
signed int b;

b = a;

In b steht zwar das 2er-komplement von der Ganzzahl von float a, aber 
eine Auf/Abrundung der ersten Nachkommastelle von float a wird nicht 
berücksichtigt.

Gibt es da vielleicht Bibliotheksroutinen?

Vor lauter Bäumen seh ich den Wald nicht mehr.

von Helmut L. (helmi1)


Lesenswert?

König Artus schrieb:
> float a;
> signed int b;
>
> b = a;

b = 10.0 * a + 0.5;

Du willst ja eine Nachkommastelle haben.

Also von 2000 .. 8500

von Detlev T. (detlevt)


Lesenswert?

Was willst du damit machen? Vergleichen größer/kleiner geht auch ohne 
Umwandlung indem man die Zahl als int32 behandelt.

von König Artus (Gast)


Lesenswert?

Helmut Lenzen schrieb:
> Du willst ja eine Nachkommastelle haben.
>
> Also von 2000 .. 8500

Ja, von -2000 bis +8500.

Das Geheimniss mit der +0.5 war mir neu. Ich hab jetzt folgendes 
gemacht:

float a;
signed int b;

if(a < 0)
    b = 10 * a - 0.5; // -2000 bis <0
    else
        b = 10 a + 0.5; // 0 bis 8500


Besten Dank für deine Hilfe!

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


Lesenswert?

Da bleibt noch die Frage, die ich schonmal stellte:
Lothar Miller schrieb:
> Was ist das für eine "Sensorelektronik"?
Und: in welchem Format (welche Bayte- und Bitordnung) werden die Daten 
von dort übertragen?

von Helmut L. (helmi1)


Lesenswert?

@Lothar

Du weist doch das ist wieder so eine geheime Area51 Kiste :=)

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.