Aus 64bit unique 8bit machen

#2129944
Lesenswert?

@  Oddel (Gast)

>hat Jemand eine Idee wie ich aus einer 64bit eindeutigen ID (1-wire)
>eine 8 bit ID machen könnte ?

Mit einer Tabelle und 256 Einträgen zu 64 Bit. Dort schreibst du deine 
256 gewünschten IDs rein, der Index ist dann dein neuer 8 Bit Code.

Alternativ kann man eine 8 Bit CRC berechnen.

Klar sollte sein, dass der Informationgehalt von 64 Bit nicht 
vollständig auf 8 Bit abgebildet werden kann.

MFG
Falk
Gast #2129952
Lesenswert?

Hallo Bernhard,

hört sich gut an , aber ich hab's ehrlich gesagt nicht verstanden.
Wenn ich zum Beispiel diese 64bit Zahl habe :

1100 1010 1111 0101 0110 1010 0111 0001 1111 0100 1110 0000 0101 1110 
0111 1100

ich möchte in einem Datenpaket eine eindeutige ID mitschicken, kann aber 
dafür nur 1 Byte übertragen.

gruß
#2129984
Lesenswert?

Oddel schrieb:

> dachte ich mir schon. Hatte aber doch noch die Hoffnung, dass es
> vielleicht einen Math. Weg geben könnte.

Gibt es. Für jede Kombination von maximal 256 verschiedenen bekannten 
1-Wire IDs gibt es einen mathematischen (algorithmischen) Weg, diese in 
8 Bits auszudrücken. Ob dir diese Erkenntnis hilft ist aber eine andere 
Frage, denn sobald du eines der bestehenden 1-Wire Device austauschen, 
und damit eine alte ID durch eine neue ersetzt wird, ändert sich dann 
auch dieser Weg.

NB: Das eben war Falks "Tabelle" auf mathematisch. ;-)
Gast #2129991
Lesenswert?

Hm, die Frage ist doch, musst Du wirklich den kompletten Bereich 
abdecken?

Wenn ich mich richtig erinnere, waren die Dinger fortlaufend 
durchnumeriert, und der "Zuwachs" über die Zeit war durchaus 
überschaubar; ich persönlich hätte somit nur wenig Hemmungen, einfach 
die ersten 24 oder 32 Bit abzuschneiden. Das Abgeschnittene könnte man 
dann einfach ignorieren (die Wahrscheinlichkeit, dass zwei Devices mit 
in den hinteren 32 bzw. 40 Bits identischer Seriennummer im Bus hängen, 
ist wohl vernachlässigbar) oder gegen eine Konstante prüfen (Annahme: 
Alle Devices wurden mehr oder weniger zum gleichen Zeitpunkt angeschafft 
(hergestellt)).

Alternativ könnte man darüber nachdenken, zwei Tabellen für die jeweils 
z. B. vorderen und hinteren 32 Bits zu nehmen (und meinetwegen dann noch 
eine dritte Mapping Tabelle, die beide Indizies auf einen eindeutigen 
8-Bit-Wert mappt).
#2130340
Lesenswert?

Ein paar Bytes kann man bei 1-wire IDs durchaus einsparen, wenn man 
einige Annahmen macht:

- das obere Byte ist eine Prüfsumme - die kann problemlos entfernt 
werden, wenn man annimmt dass keine Übertragungsfehler auftreten.
- das untere Byte ist der Chiptyp - hat man nur eine Art von 1-wire Chip 
kann sie auch entfernt werden
- das 2. und 3. Byte von oben sind die höchstwertigen Bits der 
Seriennummer. Bei allen Chips die mir bisher untergekommen sind waren 
sie 0. Soll das Gerät nicht noch 10 Jahre unverändert kompatibel gebaut 
werden, kann man sie wegschneiden.
- wie Patrick schon schrieb, kauft man die Chips gleichzeitig, sind die 
Seriennummern sehr dicht beieinander und die Wahrscheinlichkeit dass 
Byte 4 und 5 bei allen identisch ist, ist sehr hoch.

Unter diesen Annahmen bleiben noch 3 Byte "effektive" ID übrig. Weitere 
Komprimierung wird schwierig ohne die schon erwähnten Look-up-Tabellen.

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