mikrocontroller.net

Forum: PC-Programmierung Zahlenkonvertierung vom µC -> PC


Autor: MT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich würde gerne ein paar Messwerte von einem µC Regelgerät mit einem 
VB.NET/C# Programm darstellen. Das Gerät sendet mir über eine serielle 
Schnittstelle die Zahlen, als Gleitkomma mit 4 Byte.
Nun versuche ich die Codierung der Zahl herauszufinden.

Hier mal ein paar Beispiele:

Bytes 0 - 3    Zahlenwert
00 00 00 00    0,0000
00 00 00 81    1,0000
00 00 00 82    2,0000
00 00 40 82    3,0000
00 00 00 83    4,0000
00 00 20 83    5,0000
00 00 40 83    6,0000
00 00 60 83    7,0000
00 00 00 84    8,0000
00 00 00 85    16,000
00 00 00 86    32,000
00 00 00 87    64,000

00 00 80 81    -1,000
00 00 80 82    -2,000
00 00 C0 82    -3,000
00 00 80 83    -4,000
00 00 A0 83    -5,000
00 00 C0 83    -6,000
00 00 E0 83    -7,000
00 00 80 84    -8,000

00 00 00 80    0,5000
00 00 00 7F    0,2500
00 00 00 7E    0,1250
00 00 00 7D    0,0625
00 00 00 7C    0,03125

00 00 20 81    1,2500
00 00 40 81    1,5000
00 00 60 81    1,7500

00 00 A0 81    -1,2500
00 00 C0 81    -1,5000
00 00 E0 81    -1,7500

Kennt einer von Euch zufällig das Format, oder kann mir dabei helfen, 
diese Bytes lesbar zu machen?

Ich komme mit meinen Kentnissen über Gleitkommazahlen und der IEEE 754 
irgendwie nicht auf die korrekt dargestellte Zahl.

Der µC-Typ ist mir nicht bekannt, ich möchte das Gehäuse nicht 
zerstören. Es scheint aber ein größerer zu sein, da er sich per Daten- 
und Adressbus erweitern lässt.

Grüße
Michael

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stell mal die vier Bytes in ihrer Reihenfolge um und sieh Dir dann 
nochmal die IEEE754 an.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Format ist folgendes:
Bit 31                                 0
     |                                 |
     EEEEEEEE VMMMMMMM MMMMMMMM MMMMMMMM

E ist der 8-Bit-Exponent, V das Vorzeichen (1 für negative Zahlen) und M
die 23-Bit-Mantisse. Folgende C-Routine wandelt die Binärdarstellung in
ein C-Double um:
double b2d(unsigned int b) {
  double d = 0.0;

  if(b)
    d = ldexp((double)(b&0x7fffff|0x800000), (int)(b>>24)-152);
  if(b & 0x800000)
    d = -d;
  return d;
}

Dabei sind denormalisierte Zahlen, Unendlich und ungültige Zahlen (NaN),
wie sie IEEE-754 vorsieht, nicht berücksichtigt, da ich nicht weiß, ob
und wie dein Mikrocontroller diese unterstützt.

Autor: MT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dank yalu!
Nach sowas bin ich suche ich ganze Zeit.
Dann werde ich jetzt mal versuchen das ganze zu verstehen...

Das mit den denormalisierten und ungültigen Zahlen kann ich nicht sagen, 
da ich den Regler nur dazu kriege Messwerte und Einstellungen zu senden.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das mit den denormalisierten und ungültigen Zahlen kann ich nicht sagen,
> da ich den Regler nur dazu kriege Messwerte und Einstellungen zu senden.

Da die Messwerte und Einstellungen sicher ganz "gewöhnliche" Zahlen
sind, die nicht in der Nähe der Grenzen des Zahlenformats liegen,
brauchst du diese Sonderfälle wahrscheinlich nicht zu berücksichtigen.

Die Sonderfälle treten bspw. dann ein, wenn eine Zahl betragsmäßig
kleiner als etwa 1.4E-39 ist oder die Software auf dem Mikrocontroller
fehlerhafterweise durch Null dividiert oder die Wurzel aus einer
negativen Zahl zieht. Aber das wird ja hoffentlich nicht passieren.

> Dann werde ich jetzt mal versuchen das ganze zu verstehen...

Auch wenn die IEEE-754-Formate etwas anders aufgebaut sind, lohnt es
sich zum Verständnis trotzdem, etwas darüber zu lesen:

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

Die Unterschiede liegen im Wesentlichen in den Bitgrößen von Mantisse
und Exponent, den Bitpositionen und dem Bias. Die Grundidee, die Zahlen
als Produkt aus Mantisse und Zweierpotenz darzustellen, ist aber bei
beiden die gleiche.

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.