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?
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.
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
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));
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.