Forum: Mikrocontroller und Digitale Elektronik Float senden


von Flite (Gast)


Lesenswert?

Hallo!

Ich möchte eine Floatvariable per RS232 (später RS485) senden.

Ein Floatvariable enthält 4 Bytes Information.
Wie kann ich (aus Codevision) auf diese einzelnen Bytes zugreifen, bzw.
diese versenden.
Als Asciizeichen will ich sie nicht senden, da ich hier mehr Speicher
benötige.

Kennt jemand ne Site, wie die Gleitkommazahl sich zusammensetzt (auf
Bitebe) - also wie man es zurück rechnen kann?

Danke Flite

von Matthias (Gast)


Lesenswert?

Hi

sowas macht man über eine union (es teilen sich dabei zwei Variablen
den selben Speicher)

union f_and_c
{
    float f;
    unsigned char bytes_of_float[4];
};

f_and_c tst;

tst.f=1.114;
rs232_putc(tst.bytes_of_float[0]);
rs232_putc(tst.bytes_of_float[1]);
rs232_putc(tst.bytes_of_float[2]);
rs232_putc(tst.bytes_of_float[3]);

Matthias

von Fritz Ganter (Gast)


Lesenswert?

Du kannst auch in ASCII senden:
sprintf(buffer,"%f",f);

und mit
sscanf(buffer,"%f",&f);
wieder lesen.
Dauert halt länger. Dafür kannst mit mit einem Terminalprogramm
mitschauen.

von Flite (Gast)


Lesenswert?

Danke für die Antworten!

Mit der Union funktioniert es einwandfrei. Da noch mehr 'Traffic' auf
den Bus kommt will ich möglichst unnötige Daten verwenden.

Deshalb werde ich die 4 Bytes einzeln senden.

Noch eine kleine Frage bezüglich des RX Interrupts in Codevision.
Wie kann ich hier ein Byte empfangen? Ich finde in der Codevision hilfe
nicht viel dazu ...

Ich möchte nur ein Byte auslesen sofern eines verfügbar ist. Falls also
noch nichts angekommen ist, soll er mit dem Hauptprogramm weitermachen
- und nicht wie getchar warten, bis eines kommt ...

Grüße
Flite

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.