Hex Zahl nach Float umwandeln

Gast #4926061
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
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 #4926212
Wie er das empfängt? Schwer zu sagen...
Vielleicht über hoch-gepackte unsigned char Werte!

In meine µC-üblichen unsigned char passt nur maximal 255d.
Gast #4926244
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.