hdc1080 humity 40bit serial number

OP #5253137
Lesenswert?

Ich verwende den HDC1080 von TI für Feuchte und Temperatur. Dieser hat 
seine individuelle Seriennummer auf 40 Bit verteilt. Diese lässt sich 
auslesen aber wie verarbeitet man diese mit C weiter? Also alle einzel 
Register-Bytes zu einer großen 64-bit Zahl zusammenschieben ist klar 
aber umwandeln in einen String geht doch nicht mehr, da ltoa() nur 32 
bit kann!? Oder?
Gast #5253365
Lesenswert?

> Sowas mache ich immer als Hexadezimal

ich auch
1
uint8_t* seriennummer = whatever;
2
oder:
3
uint8_t seriennummer[] = {1,2,3,4,5};
4

5
for (int i=0; i<5; i++)
6
{
7
    printf("%02x", zeiger_auf_seriennummer[i]);
8
}
9
puts();
OP #5253508
Lesenswert?

Also der Sensor wird per Atmel ATmega168PA angesteuert. Die Software ist 
in C geschrieben. Der Sensor hat 3 Register in denen jeweils 2 Byte 
stecken. Diese 6 Byte beinhalten 48 Bit von denen 40 Bit die 
Seriennummer bilden. Jetzt kann man als leichte Operation mit left hift 
eine Variable füllen, diese ist aber 64Bit dann groß. Damit rechnen muss 
man ja nicht aber einfach umwandeln in einen string, ala ltoa() geht 
aber nicht, da zu groß. Geht ja nur für 32Bit Variablen. Frage nochmal: 
Wie aus dieser immens großen Zahl einen String machen...
Gast #5253514
Lesenswert?

> Wie aus dieser immens großen Zahl einen String machen...

Ich habe Dir doch ein konkretes Code-Beispiel gegeben? Was willst du 
denn noch?

Vielleicht noch den Hinweis, dass man Variablen auch casten kann? Aber 
das ist gar nicht nötig, wenn Du dir den völlig sinnfreien Aufwand 
ersparst, diese Folge von Bytes (=Array) in eine 64Bit Integer Variable 
zu konvertieren.
OP #5253520
Lesenswert?

Stefan U. schrieb:
>> Wie aus dieser immens großen Zahl einen String machen...
>
> Ich habe Dir doch ein konkretes Code-Beispiel gegeben? Was willst du
> denn noch?
>
> Vielleicht noch den Hinweis, dass man Variablen auch casten kann? Aber
> das ist gar nicht nötig, wenn Du dir den völlig sinnfreien Aufwand
> ersparst, diese Folge von Bytes (=Array) in eine 64Bit Integer Variable
> zu konvertieren.

Das mit dem Casten habe ich nicht ganz verstanden. Was macht man da 
genau?
Gast #5253524
Lesenswert?

> Das mit dem Casten habe ich nicht ganz verstanden.

Ich glaube ein konkretes Beispiel hilft Dir hier mehr, als ein Verweis 
auf die Spezifikation der Sprache C.

Im folgenden Code wird ein Zeiger erzeugt der auf eine Folge von Bytes 
Zeigt, welche die 64bit Variable ist.
1
uint64_t seriennummer=1242352165;
2
uint8_t *zeiger=(uint8_t*) &seriennummer;
3
for (int i=0; i<8; i++)
4
{
5
    printf("%02x", zeiger[i]);
6
}

Hier wird ein Zeiger vom Typ uint64_t* auf einen uint8_t* gecastet, 
unter den Annahme, dass die 64bit Integer Variable auch als Folge von 
Bytes gelesen werden kann (was der Fall ist, denn das sind tatsächlich 
mehrere aufeinander folgende Bytes, nämlich genau 8).

Doch nach wie vor halte ich es für quatsch, die Seriennummer überhaupt 
in eine 64bit Variable abzulegen und dazu auch noch unnötige 
Bit-Schiebereien durchzuführen. Lese die Seriennummer doch einfach ein 
ein Array von bytes ein! Dann hast du sie schon in genau dem Format, 
dass diese for-Schleife zur Ausgabe benötigt.

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