Gast
#934540
Moin Moin! Ich sitze hier an einem kleinen Problem. Vielleicht könnt ihr mir ja helfen. Für ein serielles proprietäres Protokoll muss ich eine CRC16 Checksumme berechnen. Dazu werden alle ASCII Zeichen zwischen dem Start und Ende Zeichen in die Berechnung mit einbezogen. Wenn ich nun eine kurze Meldung schicken will klappt die Berechnung auch wunderbar. Kurz bedeutet zwei Zeichen für Ziel, zwei Zeichen für Quelle und ein Zeichen als positive Quitierung. Wenn ich nun aber eine längere Meldung schicken will (z.B. beim Hochfahren zum Statusabgleich anfordern) dann bleibt die Checksumme Null. Es werden also 4 Bytes mit je 0x00 gesendet. Dies ist natürlich nicht richtig. Nach der klasse Webseite http://www.zorc.breitbandkatze.de/crc.html müsste die Checksumme "61CB" sein wenn ich das Datum "b2400000000000001" senden will. Nun meine Frage - habt ihr eine Idee wieso bei diesem Datum bei mir als Checksumme "0" rauskommt? Eingesetzt wird der ATmega128 von ATMEL mit dem CodeVisonAVR Compiler in der Version 1.25.7a. Das Board ist ein Entwicklungsboard der FTZ Leipzig. Zu finden unter http://www.easytoweb.net. Ich habe mal eine gekürzte Version meines Sourcecodes angehängt. In der Funktion minimax_quitierung() wird eine Checksumme berechnet die auch richtig ist. In der Funktion minimax_statusabgleich() wird auch eine CRC berechnet die aber den oben beschriebenen Fehler aufweist. Vielen Dank schonmal für eure Mühe. Gruß Björn Niethammer