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
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
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
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;
http://www.mikrocontroller.net/forum/read-1-7592.html nur der Link lautet jetzt: http://www.sensirion.com/en/download/humiditysensor/SHT1x_SHT7x.htm http://www.sensirion.com/en/pdf/CRC_Calculation_SHTxx_v1.03.pdf 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
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
hallo. Hast Du eine funktion geschreben für die CRC berechnung? Ich habe nämlich genau dasselbe Problem. mfg Reimund
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.