Интервал между приемом посылок по UART

CotDaVinchi
Offline
Зарегистрирован: 12.05.2016

Не могу найти вразумтельного ответа на вопрос - какое время (тайм-аут) необходим при посылке данных на Ардуино-Мега по UARTу? С какой частотой необходимо передавать посылки , что бы порт не захлебывался на скорости 57600 Бод?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

CotDaVinchi пишет:

С какой частотой необходимо передавать посылки , что бы порт не захлебывался на скорости 57600 Бод?

Чтобы порт не захлёбывался на скорости 57600, нужно передавать на скорости 57600.

А вот чтобы не захлёбывалась Ваша программа приёма - это зависит от неё, что она у Вас там делает, как принимает, чем ещё занимается - этого никто, кроме Вас, не знает.

CotDaVinchi
Offline
Зарегистрирован: 12.05.2016

Угу. Программа только и делает, что передает по УАРТу байты и принимает. 

Достаточно ли будет минимальной задержки (одного стопового бита) между посылками(10 бит)? 

Logik
Offline
Зарегистрирован: 05.08.2014

Есть бассейн. По одной трубе вливается пиво, по другой отпивается. Что делать чтоб бассейн не переполнился? Пить не мендленее чем вливают. Так и с сириалом, извлекайте данные не медленей чем они поступают и будет нормас. Если 57600 скорость, то при одном стоповом скорость вливания 5760 байт/сек. И извлекать надо не медленей чем с такой соростю.

CotDaVinchi
Offline
Зарегистрирован: 12.05.2016

Угу. Там ещё буфер приемный есть, в бассейне. Ладно, разберемся.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Приемный буфер - это и есть бассейн.

И передающий, кстати, - тоже.

 

Другими словами: при передаче нужно следить за тем, чтобы не заполнять буфер быстрее, чем осуществляется передача, а при приеме - наоборот, опустошать буфер надо не медленнее, чем приходят данные.

CotDaVinchi
Offline
Зарегистрирован: 12.05.2016

Так и есть! Емкость буфера по умолчанию - 64 байта. И этого вполне достаточно для серии приходящих 12 байт, друг за другом. Оконечное устройство может "выпуливать" их с защитным интервалом в 1-1,5 стопового бита. Вопрос пока теоретический - скорость обработки "ПО Ардуино" буфера достаточна по умолчанию для минимального защитного интервала между посылками? 

Через неделю надо будет практические исследования проводить. Как самый тяжелый случай, придется лезть в теорию и библиотеки - как там организован буфер для приема/передачи, прерывания, задержки...

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Тебе, в #1, русским-по-белому написали, что это зависит только от скорости обработки твоей программы. Скорости контроллера на изъятие из буфера хватит всегда, при любых обстоятельствах. "Узким местом"  может быть только твоя обработка.

Кроме того, при помощи serialEvent(), ты можешь себе сделать буфер хоть на всю память.

CotDaVinchi
Offline
Зарегистрирован: 12.05.2016

О це дывный ответ! Давно бы так! Спасибо!

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

...бардзо проше