Fixpoint ist ein ziemlich leidiges Thema für mich... Im Grund weiss ich ja was Fixpoint ist, aber ich tue mir mit der praktischen Umsetzung immer noch schwer. Nehmen wir an: U_ref = 5 V Nun haben wir einen Fixpoint Datentyp 8.8: Also 8 Vorkommabits und 8 Nachkomma Bits. Nun sagen wir das LSB ist 70.6 uV (mikrovolt) Nun aber zur "Praxis": 0x02EF soll der Fixpoint Wert sein. 02 = 2 als vorkommastelle... ok EF = 239 als Nachkommastelle (239/256) = 0,93359375 LSB ist ja 70.7 uV --------------------------------- Wo liegt mein Denkfehler? Bzw, wie verrechne ich den LSB von 70.7 uV --------------------------------- Mir erschliesst sich auch noch nicht, wie ich dann gewinnbringend mit so einem Fixpoint Wert im Code umgehe. Fuer mich sieht es mit dieser faktoren multiplikation / division eher nach mehr Aufwand aus, als z.B. alles mit 1mV / Bit (LSB) zu codieren... Cheers!
Fixedpoint 0x02EF = 2 + 1/2 + 1/4 + 1/8 + 1/32 + 1/64 + 1/128 + 1/256 Rechts stehen Dezimalwerte in Bruchdarstellung. Die Stellenwertigkeit der Nachkommabits ist also 2^-1, 2^-2, ... Der Gewinn des Formates ist, daß man sie wie int-Formate addieren und subtrahieren kann.
Uhu Uhuhu wrote: > Fixedpoint 0x02EF = 2 + 1/2 + 1/4 + 1/8 + 1/32 + 1/64 + 1/128 + 1/256 > > Rechts stehen Dezimalwerte in Bruchdarstellung. > > Die Stellenwertigkeit der Nachkommabits ist also 2^-1, 2^-2, ... > > Der Gewinn des Formates ist, daß man sie wie int-Formate addieren und > subtrahieren kann. 0xEF = 239 (DEZ) 239 / 256 = 0,93359375 Das ist das gleiche Ergebnis wie von Uhu. Nur einfacher ;-) Mhm. Also wenn LSB = 70.6uV ist dann sind doch 239 => 239 * 70uV = 0,01673 V => 2 + 0,01673 = 2,01673 V Wie schon von Uhu erwähnt, ist der Vorteil, dass man mit normalen Operationen rechnen kann. ZUr Einfachheit nehmen wir mal an dass das LSB 1mV/Bit ist. Zahl1: 3.598 V => 0.598 * 256 = 153,088 => 0x99 => Fehler: 0.598 -0,59765625 = 0,001475 Zahl2: 1.8603 V => 0.8603 * 256 = 220,2368 => 0xDC => Fehler: 0.8603 - 220,2368 = 0,000925 Zahl1 - Zahl2 = 0x0399 - 0x01DC = 0x01BD 0xBD = 189 / 256 = 0,73828125 Ergebnis = 1,73828125 Fehler: 1,7377 - 1,73828125 = -0,00058125 Ich hoffe das hilft zum Verständnis :) Viele Grüße und gute nacht
Sebastian B. wrote: > Uhu Uhuhu wrote: >> Fixedpoint 0x02EF = 2 + 1/2 + 1/4 + 1/8 + 1/32 + 1/64 + 1/128 + 1/256 >> >> Rechts stehen Dezimalwerte in Bruchdarstellung. >> >> Die Stellenwertigkeit der Nachkommabits ist also 2^-1, 2^-2, ... >> >> Der Gewinn des Formates ist, daß man sie wie int-Formate addieren und >> subtrahieren kann. > > 0xEF = 239 (DEZ) > > 239 / 256 = 0,93359375 > Das ist das gleiche Ergebnis wie von Uhu. Nur einfacher ;-) Kleiner Schlaui. Es ging mir nicht darum zu zeigen, wie man es ausrechnet, sondern wie man das Modell der Stellenwertigkeit so erweitert, daß auch gebrochen Werte damit behandelt werden können.
Aber die Wertigkeit deines LSB ergibt sich doch rein rechnerisch aus der Darstellung. Wenn du 8.8 hast und die Einheit Volt sein soll dann ist Dein LSB = (1/256) V = 3,90625 mV und NICHT "sagen wir mal 70,6uV". Ansonsten hast du eben deinen LSB=70.6uV, dann entspricht aber eine bei dir dargestellte 1.0 (0x0100) in der 8.8 notation nicht 1.0V sondern 1.0*(256*70,6uV)=0.0180736V was keinen Sinn macht, dann kannst Du nämlich gleich bei INT bleiben. Oder versteh ich die Problematik hier falsch. -wiebel
>Aber die Wertigkeit deines LSB ergibt sich doch rein rechnerisch aus der >Darstellung. Wenn du 8.8 hast und die Einheit Volt sein soll dann ist >Dein LSB = (1/256) V = 3,90625 mV und NICHT "sagen wir mal 70,6uV". Dieser Punkt macht mich ja auch stutzig, aber prinzipiell ist doch die Wertigkeit des LSB "beliebig" wählbar? >Ansonsten hast du eben deinen LSB=70.6uV, dann entspricht aber eine bei >dir dargestellte 1.0 (0x0100) in der 8.8 notation nicht 1.0V sondern >1.0*(256*70,6uV)=0.0180736V was keinen Sinn macht, dann kannst Du >nämlich gleich bei INT bleiben. Jetzt bin ich verwirrt. Ich dachte 8.8 heisst: Nach 8 Bits kommt ein Komma. Also: 0x01.00 -> 1.00 V ! ? >Oder versteh ich die Problematik hier falsch. -wiebel Versteh die Problematik ja selbst nicht genau ;-) Danke!
Bei maximal 5 V bietet es sich doch an, FP 3.13 zu benutzen? 3 bit vor dem Komma -> Werte bis 7,x
high-side wrote: >>Aber die Wertigkeit deines LSB ergibt sich doch rein rechnerisch aus der >>Darstellung. Wenn du 8.8 hast und die Einheit Volt sein soll dann ist >>Dein LSB = (1/256) V = 3,90625 mV und NICHT "sagen wir mal 70,6uV". > > Dieser Punkt macht mich ja auch stutzig, aber prinzipiell ist doch die > Wertigkeit des LSB "beliebig" wählbar? Ja, aber nur über die Anzahl der Bits die du gewillt bist, dafür abzustellen Du kannst ja in deinem gewohnten Zehenersystem auch nicht hergehen und einfach sagen: ich will 2 Nachkommastellen, aber die 2. Stelle nach dem Komma sollen nicht Hunderstel sein, sondern Ein-79-tel. Klar dass sich dann hint und vorne nichts mehr ausgeht.
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.