Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: СОМ порт, тормозит SetCommState.
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам
TONAL
Hi all!
Решил на базе моста USB->COM соорудить передатчик для DMX512.
Из особенностей протокола DMX512 следует отметить нестандартную скорость (250Кбит/с) и наличие маркера начала пакета BREAK (импульс низкого уровня t=88мкс).
С нестандартной скоростью проблем не возникло, мой мост (ОTI6858) поддерживает такую скорость.
А вот с передачей маркера BREAK возникла проблемка, длительность передачи байта на скорости 250Кбит/с составляет 44мкс, то есть BREAK так не передать...
Я решил на время передачи BREAK снизить скорость передачи до 115,2Кбит/с через SetCommState, но SetCommState жестко тормознутая функция(выполняется 30мс!).
Таким образом для передачи пакета 2-а вызова SetCommState занимают 60мс!, это ни куда не годиться.

Вопрос к тем кто заморачивался с СОМ портами и DMX512, как малой кровью без тормозов передать BREAK?
Седой
Цитата(TONAL @ Jun 1 2009, 16:26) *
Hi all!
Решил на базе моста USB->COM соорудить передатчик для DMX512.
.....
Таким образом для передачи пакета 2-а вызова SetCommState занимают 60мс!, это ни куда не годиться.

Вопрос к тем кто заморачивался с СОМ портами и DMX512, как малой кровью без тормозов передать BREAK?


Вопрос. Лучшее средство от головной боли?
Ответ. АПСТЕНУ!!

Так и здесь, выкинуть мост - поставить МК.
TONAL
Цитата(Седой @ Jun 2 2009, 23:05) *
Вопрос. Лучшее средство от головной боли?
Ответ. АПСТЕНУ!!

Так и здесь, выкинуть мост - поставить МК.


Ничего не скажешь, хороший совет. До такого и сам додуматься могу.
Дело не в том что мне сложно поставить МК, передатчик DMX512 для МК у меня написан и работает.
Просто я считаю глупо ставить целый контроллер для передачи одного импульса.

Вобщем вопрос остается в силе.
TONAL
Решил вопрос использованием EscapeCommFunction, выполняется ~1мс, сигнал подмешал в линию через К155ЛА3 =)
Теперь BREAK передается так:
CODE
EscapeCommFunction(hComPort,SETRTS);
EscapeCommFunction(hComPort,CLRRTS);

Всю работу с СОМ портом вынес в отдельный поток, полет нормальный.
ReAl
Цитата(TONAL @ Jun 3 2009, 20:12) *
Решил вопрос использованием EscapeCommFunction, выполняется ~1мс, сигнал подмешал в линию через К155ЛА3 =)
Теперь BREAK передается так:
Код
EscapeCommFunction(hComPort,SETRTS);
EscapeCommFunction(hComPort,CLRRTS);
А SetCommBreak(hComPort)/ClearCommBreak(hComPort) пробовали?
А EscapeCommFunction(hComPort,SETBREAK) / EscapeCommFunction(hComPort,CLRBREAK)? У меня эта пара работала.
TONAL
Цитата(ReAl @ Jun 3 2009, 20:59) *
А SetCommBreak(hComPort)/ClearCommBreak(hComPort) пробовали?
А EscapeCommFunction(hComPort,SETBREAK) / EscapeCommFunction(hComPort,CLRBREAK)? У меня эта пара работала.


Попробовал, так не работает. sad.gif
TONAL
ReAl
А на каком мосте работало?
ReAl
Цитата(TONAL @ Jun 4 2009, 09:48) *
ReAl
А на каком мосте работало?
На "обычных" портах и на FT232B-мосте
Седой
Цитата(TONAL @ Jun 3 2009, 02:16) *
Просто я считаю глупо ставить целый контроллер для передачи одного импульса.


Просто для данной задачи "целый контроллер" будет и дешевле и надежней, да и несколько каналов сделать можно простым "ногодрыжеством".
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.