Prüfsummen wie CRC-8 codieren und encodieren

Antworten
DER JERRE
Beiträge: 11
Registriert: Mittwoch 16. November 2011, 09:12

Prüfsummen wie CRC-8 codieren und encodieren

Beitrag von DER JERRE » Mittwoch 16. November 2011, 10:08

Ich würde gern von einer Zeichenkette die Prüfsumme im CRC-8 Code ermitteln und den Wert am Ende der Zeichenkette mit anhängen.
Umgekehrt sollte es möglich sein, eine Zeichenkette mit CRC-8 Code am Ende zu prüfen und bei falscher Summe einen "Error"-Ausgang auf High zu setzen.
Kann mir da jemand helfen?

abacom
Site Admin
Beiträge: 3415
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: Prüfsummen wie CRC-8 codieren und encodieren

Beitrag von abacom » Montag 21. November 2011, 14:50

Ich lege ins nächste Update eine Komponente, die eine CRC-1 bis CRC-32 Prüfsumme aus einem String berechnet.
Das Prüfen bzw. Anhängen kann man wohl besser selbst erledigen.
Zur Lektüre empfehle ich schon einmal...
http://zorc.breitbandkatze.de/crc.html
http://de.wikipedia.org/wiki/CRC
ABACOM support

abacom
Site Admin
Beiträge: 3415
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: Prüfsummen wie CRC-8 codieren und encodieren

Beitrag von abacom » Mittwoch 23. November 2011, 11:11

- Das Update 23.11.2011 lädt gerade hoch.
- Beispiel zur CRC: Datei->Beispiele (...)\Neue_Funktionen\CRC.PRJ
ABACOM support

DER JERRE
Beiträge: 11
Registriert: Mittwoch 16. November 2011, 09:12

Re: Prüfsummen wie CRC-8 codieren und encodieren

Beitrag von DER JERRE » Montag 28. November 2011, 09:03

Danke für die schnelle Entwicklung dieses Bausteins.

Leider habe ich erst vor kurzem erfahren, dass wir mit dem CRC-8 (Dallas/Maxim 1-Wire Bus) arbeiten müssen.
Ist das auch möglich bzw. könnte man den Baustein damit ausstatten, dass man in den Einstellungen das Polynom aus der Tabelle welche bei Wikipedia steht eintragen kann?

DER JERRE
Beiträge: 11
Registriert: Mittwoch 16. November 2011, 09:12

Re: Prüfsummen wie CRC-8 codieren und encodieren

Beitrag von DER JERRE » Montag 5. Dezember 2011, 09:04

In meinem Fall wäre das x hoch 8 + x hoch 5 + x hoch 4 + 1

abacom
Site Admin
Beiträge: 3415
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: Prüfsummen wie CRC-8 codieren und encodieren

Beitrag von abacom » Montag 5. Dezember 2011, 09:15

Der Baustein hat einen "Polynom"-Eingang.

Rechen muss man selbst:

CRC - Der Cyclic Redundancy Code
Die CRC-Pruefsumme (== Cyclic Redundancy Code) basiert darauf, dass man Bitstring (also Folgen von 0 und 1) als Polynome mit den Koeffizienten 0 und 1 interpretiert. Bei k Bits hat man also k Terme, von x^(k-1) bis x^0.
Beispiel:

Code: Alles auswählen

                         5   4   0
    110001      ->      x + x + x
Im diesem Polynomwert sind also die Bits B0, B4 und B5 gesetzt:
Polynom = 110001bin = 31 hex = 49 dez
(Der "Windows-Taschenrechner leistet hier gute Dienste.)
http://www-stud.rbi.informatik.uni-fran ... e/crc.html

"x hoch 8 + x hoch 5 + x hoch 4 + 1"
Bei CRC8 kann doch wohl maximal "X HOCH 7" vorkommen, oder?
Ausserdem: Ich kann mir keine Anwendung vorstellen,
bei der ProfiLab selbst die Prüfsumme des 1-Wire-Protokolls auswerten oder generieren müsste.
Was haben Sie vor?
ABACOM support

DER JERRE
Beiträge: 11
Registriert: Mittwoch 16. November 2011, 09:12

Re: Prüfsummen wie CRC-8 codieren und encodieren

Beitrag von DER JERRE » Dienstag 6. Dezember 2011, 08:34

Also:
Wir wollen damit mehrere in einem Ring verschaltete AVR-µC ansteuern. (Wir machen das Ansteuern alternativ auch mit einem AVR-µC.)
Mein Kollege hat für diesen Zweck ein Protokoll entwurfen, bestehend aus 18 Zeichen (10 Adress- und 8 Steuerzeichen).
Am Ende dieser Zeichenkette werden die 2 Prüfzeichen von der CRC-8 Prüfung aus den 18 Zeichen angehängt.

(Zur Zeit der Protokollentwicklung war ich leider im Krankenhaus :( )
(Soll wohl dem Zweck für mehr Übertragungssicherheit dienen)

Im Programm der AVR-µC wird für die Auswertung die Funktion aus BASCOM-AVR

Function Docrc8(s As String) As Byte

Dim j As Byte
Dim k As Byte
Dim crc8 As Byte

crc8 = 0
For m = 1 To Len(s)
x = Asc(Mid(s, m, 1))
For k = 0 To 7
j = 1 And (x Xor crc8)
crc8 = Fix(crc8 / 2) And &HFF
x = Fix(x / 2) And &HFF
If j <> 0 Then
crc8 = crc8 Xor &H8C
End If
Next k
Next
Docrc8 = crc8
End Function

genutzt.

DER JERRE
Beiträge: 11
Registriert: Mittwoch 16. November 2011, 09:12

Re: Prüfsummen wie CRC-8 codieren und encodieren

Beitrag von DER JERRE » Dienstag 6. Dezember 2011, 08:47

So jetzt funktionierts auch.

Danke nochmal für die verständliche Erklärung.

abacom
Site Admin
Beiträge: 3415
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: Prüfsummen wie CRC-8 codieren und encodieren

Beitrag von abacom » Mittwoch 7. Dezember 2011, 08:47

Für einen Moment dachte ich schon Sie wollten das ganze ohne µ-Controller machen.
Aber so ist ja alles bestens.
ABACOM support

Antworten

Zurück zu „Messwertverarbeitung“