mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fixpoint und es klingelt immer noch nicht.


Autor: high-side (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Sebastian B. (mircobolle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Michael Waiblinger (wiebel42)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: high-side (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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!

Autor: Marco G. (stan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei maximal 5 V bietet es sich doch an, FP 3.13 zu benutzen?
3 bit vor dem Komma -> Werte bis 7,x

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.