Forum: Mikrocontroller und Digitale Elektronik Prüfsummenverfahren herausbekommen


von Maart (Gast)


Lesenswert?

Wie kann ich herausbekommen, mit welchem Verfahren eine Prüfsumme
erstellt wurde? Ich habe ein Funksignal (Temperatursensor) analysiert
(eher mitgeschnitten) und herausbekommen, daß insgesammt 5 Byte
übertragen werden. Das letzte Byte müßte meiner Meinung nach so etwas
wie eine Prüfsumme sein. An CRC-8 habe ich auch schon gedacht, gibt es
noch weitere "Norm"-Generatorpolynome außer '10011001' ?
Auch soll es soetwas wie "sum8" usw. geben. Wo finde ich aber den
Berechnungsalgorithmus? (ja, ich habe google schon mehrere Stunden
gequält).

Eine Übertragung war: 0xAE 0xDF 0x40 0x04 0x0C


Mit besten Grüßen, Maart

von larsen (Gast)


Lesenswert?

Also meines Wissens nach gibt es nur ein CRC8 Generatorpolynom. Ist ja
auch Sinn und Zweck einer Standardisierung;-)

Was macht dich so sicher, dass es eine Art Prüfsumme ist? Nach welchem
Protokoll werden die Daten dort übertragen? Ich würde vielleicht dort
anfangen, wo die Daten ankommen und weiterverarbeitet werden. Was auch
immer dort steht, muss ja mit den Daten umgehen können. Vielleicht
kannst du so rauskriegen, was die Daten bedeuten.

VG larsen

von Maart (Gast)


Lesenswert?

Hallo larsen!

Meine Nachforschungen haben ergeben: Das erste Byte steht für die Art
des Sensors: Temperatursensor = 0xA0, Hygrosensor = 0xAE
Das zweite Byte stellt wohl die "Seriennummer" des Sensors dar, sie
ändert sich nach jedem Batteriewechsel. Byte 3 und 4 stellen die
Temperatur/Luftfeuchte in BCD-codierter Form dar. Das letzte Byte hat
sich bei gleichgeblieben Werten der Temperatur nur verändert, wenn auch
die Sensor-ID (Byte2) verändert war. (Batterie wurde bei gleicher
Temperatur entfernt und sofort wieder eingesetzt).


Mit besten Grüßen, Maart

von larsen (Gast)


Lesenswert?

Also komplett verstehe ich das nicht. Warum soll sich die Sensor-ID
verändern, wenn man die Batterie wechselt? Hat sich das letzte Byte
komplett verändert oder nur an einer Stelle? Könnte doch auch einfach
ein Zusammengesetztes Byte sein aus EOF und z.B. Parity-Bit. Die
Parity-Prüfung gibts nämlich auch mehrdimensional.

VG larsen (der name soll tatsächlich klein geschrieben werden. Du bist
ser Erste, der das auch macht;-))

von Markus_8051 (Gast)


Lesenswert?

Wenn die "Sensor-ID" eine Adresse ist, die dynamisch vom Master
vergeben wird, wenn sich ein Gerät bei ihm anmeldet, macht das schon
Sinn, setzt aber halt eine Komunikation in beide Richtungen voraus.

Auch Üblich ist eine XOR-Verknüpfung aller Werte zur Prüfsumme, scheint
das hier aber nicht zu sein.

CRC fände ich für diese Anwendung etwas übertrieben... Außerdem ist es
immer schwierig, so etwas herauszufinden - selbst wenn das
Generatorpolynom bekannt ist: Schiebt man rechts oder links herum,
welchen Wert nimmt man für die Initialisierung, etc

Das von Dir angegebene Generatorpolynom ist spiegelsymetrisch - habe
ich bisher noch nie als Generatorpolynom gesehen. Für CRC8 kenne ich
10011 und 1101

Hast Du noch ein paar Datensätze, am besten welche, wo sich von einem
zum anderen nur ein bit ändert (abgesehen von der Prüfsumme). Das würde
das Ausprobieren vereinfachen.

Gruß,
Markus_8051

von Maart (Gast)


Lesenswert?

Die "Sensor-ID" (wie immmer man es auch nennen will) wird vom Sensor
selbst nach jedem Batteriewechsel neu vergeben, deshalb muß die
Empfangsstation auch "neu gestartet" werden. In dieser Phase werden
die möglicherweise vorhandenen Sensoren registriert.
Hier habe ich noch zwei Datensätze:

0xAE 0xEG 0x39 0x03 0x94  (bedeutet 39% Feutigkeit)

Batterie entfernt und neu eingesetzt (=Sensor-Reset):

0xAE 0xEC 0x39 0x03 0x9A (bedeutet auch 39% Feuchtigkeit, die Station
geht aber davon aus, daß es sich hier um einen zweiten Sensor
handelt).

Ich werde heute Abend noch weitere Datensätze auslesen.

Vielen Dank für die bisherige Mühe.


Mit besten Grüßen, Maart

von Hagen (Gast)


Lesenswert?

0xAE 0xEG 0x39 0x03 0x94

Das zweite Byte ist 0xE__G__   ??

Gruß Hagen

von Maart (Gast)


Lesenswert?

Hallo Hagen!

Ja,ja wenn man die eigene Klaue nicht lesen kann! Es muß natürlich
0xE"6" heißen! Habe die Binärfolgen in Hex umgewandelt und beim
Tippen nicht weiter darüber nachgedacht.

Also noch mal richtig:

0xAE 0xEG 0x39 0x03 0x94   (39%)

Sensor-Reset:

0xAE 0xEC 0x39 0x03 0x9A   (39%)



Mit besten Grüßen, Maart

von Maart (Gast)


Lesenswert?

Herrschaftszeiten! Was ist denn mit mir los? (copy & paste ist nicht
immer gut!)



0xAE 0xE6 0x39 0x03 0x94   (39%)

Sensor-Reset:

0xAE 0xEC 0x39 0x03 0x9A   (39%)



Mit besten Grüßen, Maart

von Karl H. (kbuchegg)


Lesenswert?

Wenn Du Versuche machst, dann mach auch welche,
wo sich zb. die Temperatur ein wenig aendert.
Ideal waere wenn sich jedes der anderen 3 Bytes
mal ein wenig aendern wuerde.

In obigen ist zb. schon auffaellig, dass wenn sich
die Id um 6 aendert, sich auch die Pruefsumme um 6
aendert. Das reicht aber (zumindest mir) noch nicht
um da auf irgendwas zu kommen.

von Matthias (Gast)


Lesenswert?

eine möglichkeit wäre:

letztes byte ist prüfsumme, und errechnet sich wie folgt:
byteweise!! summe der ersten 4 bytes + 0xC4

es fehlen allerdings noch mehr datenreihen, um diese behauptung zu
verifizieren.

von larsen (Gast)


Lesenswert?

Byteweise Summe?

von Markus_8051 (Gast)


Lesenswert?

Teste mal die Bytefolge, die Maart in seinem ersten Beitrag hier
angegeben hat. Ich glaube da klappt es nicht!

Markus_8051

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
Noch kein Account? Hier anmelden.