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?
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...
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
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!
> Da sind 16-Bit doch handlicher, auch wenn die Übertragung viermal > solange dauert. Halb so lange...
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)...
> 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.
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
Was willst du damit machen? Vergleichen größer/kleiner geht auch ohne Umwandlung indem man die Zahl als int32 behandelt.
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!
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?
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.