Witam,
w ramach eksperymentu oraz wstępu do dalszych projektów, nagrałem kilka minut ruchu w sieci CAN podczas jazdy samochodem.
Nagrałem to modułem na STM32 po SocketCAN.
Teraz próbuję to nagranie przechwycić modułem na Atmega328 (16MHz) z MCP2515. Używam do tego bibliotek Arduino z https://github.com/coryjfowler/MCP_CAN_lib
Wgrałem standardowy przykład CAN_receive.ino w Arduino IDE:
Teraz z STM32 odtwarzam plik który zawiera 53328 ramek a na Atmega na serial monitorze dostaję tylko ok 35000. Wszystkie ramki to standard ID.
Sieć jest ustawiona na 125kbps i w pliku jest ok 250 ramek na sekundę. Wg moich obliczeń, zakładając, że każda ramka ma 8 bajtów, choć w rzeczywistości niektóre mają 8 a niektóre 2 itd. wychodzi, że:
11(ID) + 64(8x8) x 250(ramek na s) = 16011, czyli 16kbps więc daleko do 125.
Moduły są połączone przewodami o długości ok 5cm, ten sam wynik uzyskuję z terminacją 120ohm jak i bez terminacji.
Czy to jest zbyt wiele dla Atmega328 czy to wina kodu?
Wiem, że sam kod który podałem wyżej, dałoby się uprościć używając Port Register zamiast DigitalRead, ale nie do końca wiem, jak to napisać dla DigitalRead (bardziej to rozumiem dla DigitalWrite).
Wiem też, że bezpieczniej byłoby się bawić w CAN z STM32 zamiast Atmega ale nie mam pojęcia o programowaniu STM, a brak czasu nie pozwala na naukę.
Pozdrawiam
w ramach eksperymentu oraz wstępu do dalszych projektów, nagrałem kilka minut ruchu w sieci CAN podczas jazdy samochodem.
Nagrałem to modułem na STM32 po SocketCAN.
Teraz próbuję to nagranie przechwycić modułem na Atmega328 (16MHz) z MCP2515. Używam do tego bibliotek Arduino z https://github.com/coryjfowler/MCP_CAN_lib
Wgrałem standardowy przykład CAN_receive.ino w Arduino IDE:
Kod: C / C++
Teraz z STM32 odtwarzam plik który zawiera 53328 ramek a na Atmega na serial monitorze dostaję tylko ok 35000. Wszystkie ramki to standard ID.
Sieć jest ustawiona na 125kbps i w pliku jest ok 250 ramek na sekundę. Wg moich obliczeń, zakładając, że każda ramka ma 8 bajtów, choć w rzeczywistości niektóre mają 8 a niektóre 2 itd. wychodzi, że:
11(ID) + 64(8x8) x 250(ramek na s) = 16011, czyli 16kbps więc daleko do 125.
Moduły są połączone przewodami o długości ok 5cm, ten sam wynik uzyskuję z terminacją 120ohm jak i bez terminacji.
Czy to jest zbyt wiele dla Atmega328 czy to wina kodu?
Wiem, że sam kod który podałem wyżej, dałoby się uprościć używając Port Register zamiast DigitalRead, ale nie do końca wiem, jak to napisać dla DigitalRead (bardziej to rozumiem dla DigitalWrite).
Wiem też, że bezpieczniej byłoby się bawić w CAN z STM32 zamiast Atmega ale nie mam pojęcia o programowaniu STM, a brak czasu nie pozwala na naukę.
Pozdrawiam
