#include <util/crc16.h>
byte data[] = { 0x00, 0x20, 0x30, 0x00, 0x00, 0x00 };
void setup() {
Serial.begin(9600);
Serial.println("CRC16 test started.");
}
void loop() {
unsigned int crc = 0;
for (unsigned int i = 0; i < sizeof(data); i++)
{
crc = _crc16_update(crc, data[i]);
}
Serial.print("CRC16 = ");
Serial.println(crc, HEX);
Serial.println();
delay(1000);
}
einen funktionierenden CRC16 Wert. Allerdings benötige ich einen CRC16 Modbus Wert. Nach stundenlangem erfolglosen Googeln versuche ich es hier einmal. Sämtliche Erklärungen sind entweder als Binärwert beschrieben, oder in Python oder hochmathematisch oder...
Ich werde halt nicht schlau draus.
Ich überprüfe meine Werte hier: http://www.lammertbies.nl/comm/info/crc-calculation.html
Auch deren Forum bringt mir nichts.
Wer kann helfen?
Wo ist das Problem, wenn das ganze in der Binärschreibweise beschrieben wird? Die Syntax von Python zu verstehen und das ganze in C umzusetzen, sollte nicht das Problem darstellen, in sofern gewisse Programmierkenntnisse vorhanden sind.
#Serenifly
Dieser Modbus ist ein eigenes Format. Der ist da anscheinend nicht gelistet.
Unter Wikipedia ist der CRC Code 2 stellig. Ich brauche diesen aber 4 stellig.
Siehe: http://www.lammertbies.nl/comm/info/crc-calculation.html
WO soll ich denn WELCHES Polynom einsetzen???
Das isses: FFFF
In den Herstellerunterlagen steht:
LRC=(FF-(01+03+F0+00+00+02))+1=(FF-F6)+1=09+1=0A
Was natürlich Quatsch ist, da der slave einen 4stelligen Wert benötigt.
Ich habe einfach dem CRC Wert statt 0 die FFFF zugewiesen. Das war das Ergebnis von mehreren Tagen herumexperimentieren: