Witam uprzejmie,
Tworzę bibliotekę Modbus/RTU w języku C, łącze szeregowe, slave, która będzie działać na mikrokontrolerze ATmega. Korzystam ze sprzętowego USART-a w ATmega. Zgodnie ze standardem Modbus dla łącza szeregowego, odstęp między znakami w pojedynczej paczce nie może być większy niż 1,5 * czas_przesyłania_pojedynczego_znaku. Natomiast odstęp między paczkami powinien być większy niż 3,5 * czas_przesyłania_pojedynczego_znaku. Jest to pokazane na stronie nr 13 tego dokumentu:
formatting link
Żeby dokonywać pomiarów zgodnie z tym, jako pokazano to w standardzie, powinienem wiedzieć, kiedy kończy się transmisja znaku i kiedy zaczyna się transmisja kolejnego znaku. Ponieważ korzystam ze sprzętowego USART-a i przerwania SIG_UART_RECV, to wiem tylko, kiedy kończy się transmisja znaku. Wstępnie postanowiłem korzystać z SIG_UART_RECV (informacja w momencie zakończenia przesyłania znaku) i mierzyć czas między znakami jako 2,5
* czas_przesyłania_pojedynczego_znaku oraz czas między paczkami jako 4,5 * czas_przesyłania_pojedynczego_znaku. Chciałem zapytać, czy takie podejście do tematu będzie prawidłowe?
Przygotowałem ilustrację graficzną:
formatting link
Pozdrawiam, Robbo