Forum: Mikrocontroller und Digitale Elektronik Hexadezimal Rechnung (checksum) nachvollziehen


von hexabini (Gast)


Lesenswert?

Hallo Leute,

könntet ihr mir bitte helfen, eine kleine Rechnung nachzuvollziehen?

In diesem http://www.crustcrawler.com/motors/RX64/docs/RX-64_Manual.pdf 
Datenblatt steht auf s.18, wie man die Checksumme ausrechnet (alle 
gesendeten bytes addieren und anschließend die NOT operation darauf 
anwenden), dabei gibt es eine Besonderheit, wenn sie 0xFF überschreitet.
Dann soll man nämlich nur das untere byte nehmen und die NOT Operation 
darauf anwenden.

Das Beispiel sieht folgendermaßen aus:
Check Sum = ~ ( ID + Length + Instruction + Parameter1 + … Parameter 3 )
= ~ [ 0x01 + 0x05 + 0x03 + 0x0C + 0x64 + 0xAA ]
= ~ [ 0x123 ] // Only the lower byte 0x23 executes the Not operation.
= 0xDD


Meiner Rechnung nach ist ~0x23 aber 0xDC...
Soll ich jetzt die 1 zu 0xDC addieren oder wie? Davon steht aber nix im 
Datenblatt...

von Marius W. (mw1987)


Lesenswert?

Meint vielleicht der "~"-Operator das Bilden des 2er-Komplements? Das 
wäre nämlich dein 0xDD... Also bitweise negieren und 1 addieren.

MfG
Marius

EDIT: 2er-Komplement würde Sinn machen, da man so zum prüfen alle Bytes 
einfach addieren kann und es sollte 0 rauskommen...

von Achim M. (minifloat)


Lesenswert?

hexabini schrieb:
> dabei gibt es eine Besonderheit, wenn sie 0xFF überschreitet.
> Dann soll man nämlich nur das untere byte nehmen und die NOT Operation
> darauf anwenden.

Naja. Ich würde des ganze auf eine 8bit-Variable addieren und diese dann 
negieren(erspart das "abschneiden, wenn" usw.).

Mit dem (~0x23 == 0xDC) hast du natürlich recht.

Sie meinen nicht die Negation, sondern das Zweierkomplement. Das 
Zweierkomplement von 0x23 ist 0xDD. Dann wäre die Tilde "~" falsch und 
es müsste ein Minus “-“ da stehen.

Ich schau mir mal kurz das pdf an.
mfg mf

von Achim M. (minifloat)


Lesenswert?

Also die Beispiele auf den Seiten 33, 34, 36 und 37 bestätigen die 
Vermutung mit dem Zweierkomplement.
Einfach alles in eine 8bit-Variable rein Addieren, minus davor und als 
letztes Byte "raus pusten".
mfg mf

PS: Auf Seite 19 steht was von einem Error-Bit in einer zurückgesendeten 
Statusnachricht. Das soll gesetzt sein, wenn was mit der Checksumme 
nicht hingehauen hat. Kannst das ja damit mal testweise "debuggen" und 
sehen, welche Rechenvorschrift jetzt richtig ist.
Die Checksumme der Rückantwort muss dich ja zunächst nicht 
interessieren, da man im Betrieb im Labor von einer sicheren Übertragung 
ausgehen kann.

von hexabini (Gast)


Lesenswert?

Jo, das wirds wohl sein.

Danke für die schnelle Antwort

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.