Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo, > > ich nutze die CCII Station mit I2C 1-Wire Bridge8 HS (DS2482-800) > und mehreren Sensoren an verschiedenen Ports. > > Um die Funktionssicherheit zu erhöhen und Fehler sauber zu erkennen, wollte ich eine > CRC-Prüfung implementieren. Dazu habe ich eine kleine Funktion abgewandelt, welche > ich an anderer Stelle gefunden habe. Sie funktioniert einwandfrei. > test unter: <a href="http://www.datastat.com/sysadminjournal/maximcrc.cgi" target="_blank">Erics CRC-Generator</a> > Es werden alle 9 Bytes des Scratchpad mit einer for-Schleife ausgelesen. > Problem: > Nur das letzte Byte (CRC) ist falsch. Es ist um genau 1 zu hoch. > Die anderen übertragenen Bytes sind augenscheinlich korrekt. > > Ich finde hier keinen Fehler. Könnte es ein Problem mit > der I2C-Umsetzung sein? > Hier mal die Sensordaten zum Nachrechnen: > T ist die ber. Temp.; den ersten Sensor habe ich rausgezogen, hier müsste das letzte Byte > eigentlich ebenfalls FF sein. Daher vermute ich eine Prob mit der Bridge... > > 12:38:21 E: CRC fail 0 1 > 12:38:21 D: Bytes FF FF FF FF FF FF FF FF 00 > 12:38:22 T -0.1 0 0 > 12:38:22 E: CRC fail 1 1 > 12:38:23 D: Bytes B6 00 4B 46 7F FF 0A 10 A0 > 12:38:23 T 11.4 1 0 > 12:38:23 E: CRC fail 2 1 > 12:38:24 D: Bytes 1A 02 4B 46 7F FF 06 10 AE > 12:38:24 T 33.6 2 0 > 12:38:24 E: CRC fail 3 1 > 12:38:25 D: Bytes 4E 02 4B 46 7F FF 02 10 9F > 12:38:25 T 36.9 3 0 > 12:38:26 E: CRC fail 4 1 > 12:38:26 D: Bytes 0E 00 4B 46 7F FF 02 10 AE > 12:38:26 T 0.9 4 0 > 12:38:27 E: CRC fail 5 1 > 12:38:27 D: Bytes F5 00 4B 46 7F FF 0B 10 D8 > 12:38:27 T 15.3 5 0 > > > <ot> > Ich poste die CRC-Funktion hier, falls jemand anderes sie brauchen kann. > Mit den oft genutzten Lookuptables bläht sich das ganz schön auf, diese hier > gefällt mir besser. > <code> > // bytes als array, Arraygröße als len > function crc8( byte addr[], byte len) returns byte > { > byte crc; > byte i,j,l; > crc = 0; > l = len-1; > for i=0...l > { > byte inbyte; > inbyte = addr[i]; > for j=0...7 > { > byte mix; > mix = (crc ^inbyte) & 0x01; > crc = crc shr 1; > if (mix) > crc = crc ^ 0x8C; > inbyte = inbyte shr 1; > } > } > return crc; > } > </code> > </ot>