Seite 1 von 1

Prüfsummen wie CRC-8 codieren und encodieren

Verfasst: Mittwoch 16. November 2011, 10:08
von DER JERRE
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?

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

Verfasst: Montag 21. November 2011, 14:50
von abacom
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

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

Verfasst: Mittwoch 23. November 2011, 11:11
von abacom
- Das Update 23.11.2011 lädt gerade hoch.
- Beispiel zur CRC: Datei->Beispiele (...)\Neue_Funktionen\CRC.PRJ

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

Verfasst: Montag 28. November 2011, 09:03
von DER JERRE
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?

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

Verfasst: Montag 5. Dezember 2011, 09:04
von DER JERRE
In meinem Fall wäre das x hoch 8 + x hoch 5 + x hoch 4 + 1

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

Verfasst: Montag 5. Dezember 2011, 09:15
von abacom
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?

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

Verfasst: Dienstag 6. Dezember 2011, 08:34
von DER JERRE
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.

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

Verfasst: Dienstag 6. Dezember 2011, 08:47
von DER JERRE
So jetzt funktionierts auch.

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

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

Verfasst: Mittwoch 7. Dezember 2011, 08:47
von abacom
Für einen Moment dachte ich schon Sie wollten das ganze ohne µ-Controller machen.
Aber so ist ja alles bestens.