Hex Zahl nach Float umwandeln

Gast #4926061
Lesenswert?
• ▲
▼
Hallo,

ich empfange über I2C Stromwerte von einem Atiny44A, die ich dann mit 
anderen float Werten (z.B. 5.5 oder 3.5) in Atmega8 vergleichen muss.
Ich empfange die Werte in HEX und muss Sie nun aufarbeiten wie z.B.
HEX 125 -> Decimal 293 -> den Stromwert von 29.3A
HEX 22 -> Decimal 34 -> den Stromwert von 3.4A

So nun die Frage darf ich den Wert so umwandeln?
1
unsigned char   hexCurrent; //current measurement
2
float   decCurrent; //current measurement 
3

4
decCurrent = hexCurrent * 0.1;  
5

6
if (decCurrent > 3.5)
7
{
8
    tue etwas
9
}

Gruß
Stefan
Moderator (Firma: Titel) Persönliche Seite #4926068
Lesenswert?
• ▲
▼
Stefan schrieb:
> Ich empfange die Werte in HEX und muss Sie nun aufarbeiten wie z.B.
> HEX 125
Wieviele Bytes empfängst du (von woher) für HEX 125?
Drei Zeichen (eine '1', eine '2' und eine '5')?

Ich bin mir nicht ganz hunterprozentig sicher, ob du weißt, dass eine 
Hex-Zahl und eine Binärzahl und eine Dezimalzahl prinzipiell erst mal 
das selbe Bitmuster sind, nur eben auf andere Art interpretiert...
Gast #4926244
Lesenswert?
• ▲
▼
Stefan schrieb:
> mit
> anderen float Werten (z.B. 5.5 oder 3.5) in Atmega8 vergleichen

Float - Werte zu vergleichen ist immer wieder ein Spaß mit unerwarteten 
Wendungen. Denn meist kann die Zahl nicht haargenau so abgespeichert 
werden, wie Du sie hingetippt hast oder wie sie ausgegeben wird.
Der Tipp, Deine Fließkommakonstanten in Festkomma umzuwandeln und die 
dann zu vergleichen bringt also nicht nur Geschwindigkeitsgewinn.
Übrigens willst Du wohl eine Zeichenkette erstmal in eine Zahl wandeln.
> unsigned char   hexCurrent; //current measurement
wäre aber nur ein einziges Zeichen.
1
unsigned char   hexCurrent[42]; //current measurement
oder
1
unsigned char   *hexCurrent; //current measurement
Wäre eher eine Eingangsvariable für Deine Funktiom für den Fall, dass es 
eine Zeichenkette ist.

Es sei denn Du bekommst nur ein Byte mit dem Strom in dA (zehntel 
Ampere). Dann wäre ohne Offset ein Wert von 0 bis 25,5 A möglich.

Bei zwei Byte ohne Vorzeichen wären so bis zu 6553,5 A drinne.

Also erforsche nochmal genau, wie Dein Wert vorliegt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren