Hallo. Ich Habe an meinem AVR ein Sensor auf µC basis angeschlossen von dem ich einen wert bekomme. nachdem der wert (2 bytes) angekommen sit, muss der AVR den Wert umrechnen: Ergebniss = -40 + 0.01 * Word Nun meine Fragen: 1.) Gibt es irgendwo eine Gute beschreibung über das arbeiten mit word variablen ? 2.) Wie führe ich die Rechnung durch ? ich sollte den Wert auf 2 Nachkommastellungen ausrechnen. Wie mach ich das am besten? Ich habe schon gesehen, dass Leute Spannungen vom ADC auf einem Display angezeigt haben. Und das auf 3 Nachkommastellen. Die müssen das ja auch erst umrechnen !? Gruß
hallo, Programmieren in C (Kernighan und Ritchi) ist ein Klasse Buch. Aber müsste es nicht so gehen? float ergebnis = 0.01 * (int) word + 40; schau mal unter http://www.schellong.de/c.htm. Florian
Ich vermeide float-Zahlen möglichst und verwende lieber Integer-Zahlen (genauer und schneller). Ergebniss = -40 + 0.01 * Word Ergebnis=-4000+Word; //Je nach möglichem Wertebereich von "Word" evtl mit long-Variablen arbeiten //behält die volle Genauigkeit, den Faktor 0,01 erst bei der Ausgabe beachten
Genau Darum gehts mir. Ich will möglichst float und double zahlen vermeiden weil die GCC klasse sehr viel speicher braucht. welches der beiden bytes im speicher muss ich denn an meine float übergeben ? das erste oder das 2. ? kann ich das so machen ?: float a; a[0] = byte1; a[1] = byte2; oder kann ich das irgendwie gleich bei der zuweisung machen ?: float a; for (int i = 0;i < 16;i++) { a = a << 1; a[0] = Get_bit(i); }
;) ok, war n bissle komisch was ich geschrieben hab. Ich will möglichst gleitkommazahlen vermeiden, wenn es möglich ist es trotzdem auf 2 nachkommastellen auszurechnen (mit kommaverschiebung). Aber Wenn es nicht möglich ist, müsst ich auf float zurückgreifen. Nur wie mach ich das am besten? (siehe letzter beitrag von mir) MfG
nur mal so als stichwort: wie wäre es mit festkommazahlen, wenn du genau weisst, dass du nur 2 stellen nach dem komma brauchst
Mann da hätt ich auch selber draufkommen müssen. int i_z = Word - 4000 und dann ein komma nach der 2. stelle von rechts. Eigentlich ganz einfach. Aber ich komm immer noch nicht so ganz mit dem arbeiten mit words zurecht. Wie weise ich einem word eine zahl zu die aus 2 bytes besteht ? MfG
Was ist denn mit "word" gemeint? - Mal angenommen, das "natürliche" Wort der Architektur vorzeichenlos interpretiert, also der C-Datentyp "unsigned int"; und die 2 Bytes, die den Wert bilden, ebenfalls vorzeichenlos: unsigned wert; unsigned char lobyte, hibyte; Dann kann "wert" gesetzt werden durch: wert = (unsigned)hibyte << 8 + lobyte; Das nimmt an, dass ein Byte (Datentyp char) tatsächlich 8 Bit hat, also CHAR_BIT == 8 ist. C garantiert nur, dass CHAR_BIT >= 8. Um jeweils 8 Bit aus "lobyte" und "hibyte" zu übernehmen, müssen die höherwertigen Bits wegmaskiert werden: wert = (hibyte & 0xFFu) << 8 + (lobyte & 0xFFu); Der Cast im ersten Ausdruck verhindert, dass "hibyte" zu int erweitert wird und aus Datenbits Vorzeichen werden. Im zweiten Ausdruck ist kein Cast nötig, weil bei den Operanden von "&" unsigned (rechte Seite) gegen int oder unsigned int (linke Seite) gewinnt.
@Simon: genau das hatte ich dir um 12.20 geschrieben, deswegen auch die Rumeierei danach nicht :-)
Ups, übersehen, dass "+" stärker bindet als "<<" ...! Oben fehlen also noch Klammern: wert = ((unsigned)hibyte << 8) + lobyte; bzw. wert = ((hibyte & 0xFFu) << 8) + (lobyte & 0xFFu);
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.