moin, hat Jemand eine Idee wie ich aus einer 64bit eindeutigen ID (1-wire) eine 8 bit ID machen könnte ? gruß
Du definierst weitere Bit-Zustände außer '0' und '1'. Die ersten Kandidaten sind 'Blank' und 'kaputt'. Sobald für 1 Bit 256 Zustände definiert sind, ist das Ziel erreicht. Bernhard
@ 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
Wieso kannst du nicht einfach 8 8-Bit IDs senden? Wäre doch viel einfacher. Ansonsten könntest du natürlich bei (sehr) kleinen Stückzahlen auch einfach die ersten paar Ziffern weglassen... Mit freundlichen Grüßen, Valentin Buck
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ß
Ohne weitere den Datenumfang einschränkende Kriterien ist das schlichtweg nicht möglich; wie willst Du beliebige 64-Bit-Werte rekonstruierbar auf 8 Bit komprimieren? Mehr als 256 verschiedene Werte sind rein prinzipbedingt nicht möglich.
ok, dachte ich mir schon. Hatte aber doch noch die Hoffnung, dass es vielleicht einen Math. Weg geben könnte.
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. ;-)
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).
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.
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.