Forum: Mikrocontroller und Digitale Elektronik Float Variablen ueber UART


von Johannes (Gast)


Lesenswert?

Hallo,

arbeite mit ATMega16, programmiere in C, verwende WinAVR-Compiler.

Anfaengerfrage: wie uebertraegt man eine float Variable vom PC auf den
uC via UART? Welches ist da die Standard-Loesung?

Ich habe an folgendes gedacht: Da ich zB 1.357 uebertragen moechte
multipliziere ich diese Zahlnoch auf dem PC mit 1000, was dann 1357
ergibt, uebertrage sie in 2 bytes auf den uC, und speichere sie hier
als float wieder ab und teile sie durch 1000. Dann hab ich auf dem uC
meine 1.357.

die zu uebertragenden Zahlen sind im Bereich -3...+3, 3
Nachkommastellen sind ausreichend.

Gibt es einfachere/elegantere Loesungen? Was spricht das Forum?

mg,
Johannes

Gibt es einfachere Loesungen?

von Benedikt (Gast)


Lesenswert?

Genaueste Lösung:
Die Daten auf Binärebene auslesen (mit einer Union bzw. über die
Adresse der Variablen), die 4 Bytes übertragen und im uC wieder die
4Bytes in die Variable schreiben.

von Johannes (Gast)


Lesenswert?

danke,
das ist eine coole Idee. 4bytes lesen und uebertragen dauert dazu
warscheinlich nicht so lange wie mit 1000 multiplizieren, in bytes
zerhacken, uebertragen, wieder zusammensetzen und dann durch 1000
teilen.

hast du ein kurzes Beispiel bei der hand wie man in C 4 bytes ausliest
(hab sowas am PC noch nicht gemacht)

mg,
Johannes

von Benedikt (Gast)


Lesenswert?

Hier mal ein Beispiel (ungetestet, sollte aber stimmen):

char * adresse;
adresse=(char *) &floatwert;  //Adresse des floats auf Byteebene lesen

uart_sendbyte(*adresse);   //Bytes über UART versenden
uart_sendbyte(*(adresse+1));
uart_sendbyte(*(adresse+2));
uart_sendbyte(*(adresse+3));

von Johannes (Gast)


Lesenswert?

super! danke.
mg,
Johannes

von Marco S (Gast)


Lesenswert?

Oder übersichtlicher:

union Converter {
  float f;
  char b[4];
}

Converter conv;

conv.f = 1.357;

for (int i=0; i<4; i++)
  UART_sendeByte(conv.b[i]);

Gruß Marco

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.