Witam
W związku z występowaniem od czasu do czasu błędów w wysyłanych danych chciałem wprowadzić wprowadzić sprawdzenie poprawności odebranych danych przez wysłanie ostatnim bajtem wartości, którą odbiornik by porównywał wartością, którą sam obliczy z odebranych danych.
Nadajnik na Atmega328, w pętli głównej sumuje wszystkie wartości, które będą wysłane
Wykorzystałem polecenie Checksum i chyba problemu nie ma
Przykładowo
Suma: 2089 CRC: 187
Suma: 2112 CRC: 226
Gorzej z odbiorem - Atmega644P - w przerwaniu odbieram oraz wywołuje podprogram,który sumuje i robi Checksum dla odebranych wartości:
Więc tak.
Wysłana wartość z nadajnika Suma: 2154 CRC: 252
Odebrana i obliczona w odbiorniku Suma: 2154 CRC: 197
Część z bajtów branych do sumy pominąłem - były to dane dotyczące czasu i daty.
Zastanawiam się, czy nie lepiej wykorzystać MODULO, np.
Suma_obliczona = Suma_kontrolna MODULO 256
Czy ciąg, z którego jest liczony Checksum musi być typu String?
W związku z występowaniem od czasu do czasu błędów w wysyłanych danych chciałem wprowadzić wprowadzić sprawdzenie poprawności odebranych danych przez wysłanie ostatnim bajtem wartości, którą odbiornik by porównywał wartością, którą sam obliczy z odebranych danych.
Nadajnik na Atmega328, w pętli głównej sumuje wszystkie wartości, które będą wysłane
Kod: text
Wykorzystałem polecenie Checksum i chyba problemu nie ma
Przykładowo
Suma: 2089 CRC: 187
Suma: 2112 CRC: 226
Gorzej z odbiorem - Atmega644P - w przerwaniu odbieram oraz wywołuje podprogram,który sumuje i robi Checksum dla odebranych wartości:
Kod: text
Więc tak.
Wysłana wartość z nadajnika Suma: 2154 CRC: 252
Odebrana i obliczona w odbiorniku Suma: 2154 CRC: 197
Część z bajtów branych do sumy pominąłem - były to dane dotyczące czasu i daty.
Zastanawiam się, czy nie lepiej wykorzystać MODULO, np.
Suma_obliczona = Suma_kontrolna MODULO 256
Czy ciąg, z którego jest liczony Checksum musi być typu String?