конец приема в UART через Таймер

izolenta1801
izolenta1801 аватар
Offline
Зарегистрирован: 17.04.2020

Здраствуйте, возможно ли отслеживать конец приема сообщения через таймер? т.е настроить таймер на 1мс и сбрасывать пока приходят байты. Как только байты перестают поступать - таймер вызывает прерывание... Например если скорость 9600, то сброс значения таймера будет происходить каждую 0.1мс (приблизительно).

rkit
Offline
Зарегистрирован: 23.11.2016

возможно

b707
Offline
Зарегистрирован: 26.05.2017

izolenta1801 пишет:

если скорость 9600, то сброс значения таймера будет происходить каждую 0.1мс (приблизительно).

что-то у вас плохо с математикой. ошиблись почти на порядок

izolenta1801
izolenta1801 аватар
Offline
Зарегистрирован: 17.04.2020

а как правильно сбрасывать значение? Просто в RX прерывании UARTa написать TCNT = 0? 

izolenta1801
izolenta1801 аватар
Offline
Зарегистрирован: 17.04.2020

b707 пишет:

izolenta1801 пишет:

если скорость 9600, то сброс значения таймера будет происходить каждую 0.1мс (приблизительно).

что-то у вас плохо с математикой. ошиблись почти на порядок

я просто разделил 1 на 9600 и получилось 0.1041мс

b707
Offline
Зарегистрирован: 26.05.2017

izolenta1801 пишет:

я просто разделил 1 на 9600 и получилось 0.1041мс

9600 - это боды

izolenta1801
izolenta1801 аватар
Offline
Зарегистрирован: 17.04.2020

b707 пишет:

9600 - это боды

надо еще на 8 бит помножить? ну еще стоп биты и четность, если есть

т.е 9600 8-1-N = 0.9375мс так?

nik182
Offline
Зарегистрирован: 04.05.2015

Скачайте Freemodbus 1.5 . Там есть примеры. Пример RTU для AVR как раз Ваш случай. Принцип RTU - как только в линии тишина больше чем 2.5 символа - значит пакет пришёл. Поэтому по приходу каждого символа перезаряжают таймер. Если таймер сработал - то пакет готов к обработке. Путь в архиве freemodbus-v1.5.0.zip\freemodbus-v1.5.0\demo\AVR\port\porttimer.c и около него.   

izolenta1801
izolenta1801 аватар
Offline
Зарегистрирован: 17.04.2020

Спасибо