Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

CRC-Fehler beim Auslesen DS18B20 Kategorie: Sensoren (von Fabian - 14.02.2012 12:46)
Ich nutze:
C-Control II Station, OSOPT V3.1
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: Erics CRC-Generator
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



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.

// 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;
}



    Antwort schreiben


Antworten:

Re: CRC-Fehler beim Auslesen DS18B20 (von Fabian - 22.02.2012 10:25)
    Re: CRC-Fehler beim Auslesen DS18B20 (von Fabian - 19.12.2012 15:27)