www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CRC-8 berechnen


Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hat zufällig einer ein Pascal oder Basic Beispiel zum Berechnen einer
CRC-8 Checksumme. In google findet man zwar jede Menge dadrüber aber
nichts was für einen normalen Menschen halbwegs verständlich wäre.

MfG Lars

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es um die CRC des 1-Wire geht, hier ist was in C:

uchar crc8 (uchar crc, uchar n)
{
  n ^= crc;
  crc = 0;
  if( n & 0x01 ) crc  = 0x5E;
  if( n & 0x02 ) crc ^= 0xBC;
  if( n & 0x04 ) crc ^= 0x61;
  if( n & 0x08 ) crc ^= 0xC2;
  if( n & 0x10 ) crc ^= 0x9D;
  if( n & 0x20 ) crc ^= 0x23;
  if( n & 0x40 ) crc ^= 0x46;
  if( n & 0x80 ) crc ^= 0x8C;
  return crc;
}



Peter

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ne ich hab ne Funkübertragung die etwa 8Bytes Datenüberträgt und möchte
dabei CRC8 nutzen um übertragunsfehler zu erkenne.
Bei C Beispielen kommt dazu dass ich zwar Pascal und Basic kann aber
leider C/ASM überhaupt nicht verstehe.

MfG Lars

Autor: RDp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
habe da mal was in Delphi geschieben.
Hier ein Ausschnitt, was du evt. gebrauchen kanst.
Gruß


function crc(h1:longint;var h2:longint):longint;
//Prüfbitkontrolle Colortronic
const poly=33800;
var i:integer;
begin
for i:=1 to 8 do begin
                 if ((h2 and 1) <>(h1  and 1)) then h2:=(h2 shr 1) xor
poly
                                               else h2:=(h2 shr 1) ;
                 h1:=h1 shr 1;
                 end;
crc:=h2;
end;

procedure erstelle_bbc_crc(suebergabe:string;var crc_L,crc_H:integer);
//Erstellen des Prüfbit für Colortronic
var         schleife:integer;
       laenge_string:integer;
           crc_value:longint;
begin
laenge_string:=length(suebergabe);
crc_value:=0;
for schleife:=1 to laenge_string do
            if ord(suebergabe[schleife])<>144
                 then crc(ord(suebergabe[schleife]),crc_value);

crc_h:=crc_value div 256;
crc_L:=trunc(((crc_value/256)-crc_h)*256);
end;

Autor: Direx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/forum/read-1-7592.html
nur der Link lautet jetzt:
http://www.sensirion.com/en/download/humiditysenso...
http://www.sensirion.com/en/pdf/CRC_Calculation_SH...

Im Anhang noch 2 Programme, eines bitweise und das andere wie oben
beschrieben mit einer Lookup-Table.

Lies auch die AppliNote27 app27 von Dallas-Maxim.

Bitte antworte, ob Dir das was bringt.

Direx

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich denke schon dass es mir hilft, muss es nachher mal in Ruhe
durchschauen, vor allem das Bitweise wird für mich Interessant sein, da
das ganze auf einem at90s2313 realisiert werden soll und der
Arbeitsspeicher für eine Lookup-Table nicht ausreicht.

MfG Lars

Autor: Reimund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo.

Hast Du eine funktion geschreben für die CRC berechnung?
Ich habe nämlich genau dasselbe Problem.


mfg Reimund

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.