Страница 1 из 1

Расчет времени передачи/приема сообщения по UART?

Добавлено: Пт янв 15, 2010 20:43:34
FUZZY_
Исходные данные:

Скорость обмена BOUND=10402 бит/сек
Фрейм : FRAME=10 бит (1 старт бит, 8 данных бит, 1 стоп бит)
Межбайтовый интервал MINT =10 мкC.
(рекомендовано мах 10 микросекунд)
Количество байт в нашем запросе N=10 байт

Как расчиталь время необходимое для передачи сообщения
при условии ,что мы используем обработчик прерывания UART?

Добавлено: Пт янв 15, 2010 21:17:55
Pooher
А зачем надо рассчитывать время, если можно проверять флаг завершения передачи?

Re: Расчет времени передачи/приема сообщения по UART?

Добавлено: Пт янв 15, 2010 22:25:32
Neekeetos
FUZZY_ писал(а):Исходные данные:

Скорость обмена BOUND=10402 бит/сек
Фрейм : FRAME=10 бит (1 старт бит, 8 данных бит, 1 стоп бит)
Межбайтовый интервал MINT =10 мкC.
(рекомендовано мах 10 микросекунд)
Количество байт в нашем запросе N=10 байт

Как расчиталь время необходимое для передачи сообщения
при условии ,что мы используем обработчик прерывания UART?
10байт * 10 бит_на_байт / 10402(битовая скорость)
в компорте присутствуют стоповые и стартовые биты для того чтоб можно было непрерывно передавать байты не нарушая кадровой синхронизации в том числе.

Добавлено: Сб янв 16, 2010 11:55:51
yaotzin
1 байт информации передается используя 10 бит, 10байт это 80 бит плюс 10*2бита=20бит стартовые и стоповые биты, всего передается 100бит


10402бит
_______ = 10.402бита за 1мс передается
1000мс

значит 100бит/10.402=9.6135358584887521630455681599692 мс на передачу 100 бит = 0.009613535858488752163045568159969 сек

+ мейбайтовый интервал 0.00001 сек * 10 = 0.0001сек + 0.009613535858488752163045568159969 сек = 0.009713535858488752163045568159969 сек на передачу всего.

Добавлено: Сб янв 16, 2010 12:10:39
Meteor
yaotzin писал(а):... всего передается 100бит
10.402бита за 1мс передается
Тут почти правильно 10 байт передаются за 9,6 мс.
yaotzin писал(а):значит .... = 1.0403 сек на передачу всего.
Это уже слишком, потянет на передау 10000 байт;)
А вобще автору вопрос, МК принимает или передает? В чем затык?

Добавлено: Сб янв 16, 2010 13:38:38
yaotzin
Meteor писал(а):
yaotzin писал(а):... всего передается 100бит
10.402бита за 1мс передается
Тут почти правильно 10 байт передаются за 9,6 мс.
yaotzin писал(а):значит .... = 1.0403 сек на передачу всего.
Это уже слишком, потянет на передау 10000 байт;)
А вобще автору вопрос, МК принимает или передает? В чем затык?
виноват, жрать звали спешил :)))

Добавлено: Сб янв 16, 2010 13:39:59
yaotzin
зато у меня точнее :)))

Добавлено: Сб янв 16, 2010 18:41:00
Aheir
Конечно, хотелось бы сначала в общих чертах понять, чего автору надо? :roll:

Добавлено: Сб янв 16, 2010 20:04:12
FUZZY_
Aheir писал(а):Конечно, хотелось бы сначала в общих чертах понять, чего автору надо? :roll:
Есть "удаленный" МК который обрабатывает наши запросы.

прием- передачу обрабатывает прерывание UART.

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

А на время обработки приема -передачи делаем что-то другое.

Поное время=время передачи нашего сообщения+время обработки сервером+время передачи ответа

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


Итак из приведеного выше общая формула расчета:

t(sec)=( FRAME/BOUND+MINT )*N.

Добавлено: Сб янв 16, 2010 20:37:21
ARV
сроду никто не ведет прием по тайсмеру ожидания! по таймеру ведут сброс уже принятого, если время ожидания превышает разумные пределы, но никак не наоборот!!! представьте себе, что передающая сторона какими-то проблемами задержится и передаст пакет с межкадровым промежутком 20 мс? что обработает ваш приемник?! пургу.

есть классические алгоритмы, не изобретайте велосипед с тремя педалями!

Добавлено: Вс янв 17, 2010 10:39:08
FUZZY_
ARV писал(а):сроду никто не ведет прием по тайсмеру ожидания! по таймеру ведут сброс уже принятого, если время ожидания превышает разумные пределы, но никак не наоборот!!! представьте себе, что передающая сторона какими-то проблемами задержится и передаст пакет с межкадровым промежутком 20 мс? что обработает ваш приемник?! пургу.

есть классические алгоритмы, не изобретайте велосипед с тремя педалями!

++++.........----------***

+ -время нашей передачи
. - обработка нашего запроса
- - передача ответа
* - защитный интервал

** - тут я читаю ответное сообщение
Если мы спросили у сервера временные параметры обмена то никак он не может выйти за пределы "окна" там будут отвечать другие МК

Или я че-то не понял?

Добавлено: Вс янв 17, 2010 13:21:20
ARV
вы умудряетесь так задать вопрос, что лично я не понимаю, чего вы хотите.

на всякий случай повторю свою мысль: никогда нельзя рассчитывать, что спустя некоторое время в вашем приемном буфере окажется полностью принятый пакет данных. наоборот, нужно обязательно вводить определенный интервал ожидания приема пакета, и, если за это время пакет целиком не принят, сбрасывать все, что принято к этому моменту (тайм-аут). конец пакета надо определять не по времени, а как-то иначе, например, по завершающему коду пакета, по количеству принятых байт и т.д. - но не по времени ожидания!!!

Добавлено: Пн фев 08, 2010 19:22:19
FUZZY_
bit Receive(unsigned char n, unsigned char Ecv)
{
unsigned long PAUSE_Timer;
PAUSE_Timer=TIMER+n*(1000/DIV);
for(;;)
{
Start_UART_Rx(); // Разрешаем прием сообщения от .
while((is_Timer_Count()) && (is_UART_Rx_Busy())) IDLE();
if(is_Timer_Stopt()) return ERROR;
if((is_UART_Rx_Ready()) && (Message[0] == Ecv)) return OK;
}
}


void Transmit(unsigned char n)
{
DogOn;
Start_UART_Tx(n);
while(is_UART_Tx_Busy()) IDLE();

}

Что-то типа так (там где кот";)")