Перейти к содержанию
    

СОМ порт, тормозит SetCommState.

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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Hi all!

Решил на базе моста USB->COM соорудить передатчик для DMX512.

.....

Таким образом для передачи пакета 2-а вызова SetCommState занимают 60мс!, это ни куда не годиться.

 

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

 

Вопрос. Лучшее средство от головной боли?

Ответ. АПСТЕНУ!!

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос. Лучшее средство от головной боли?

Ответ. АПСТЕНУ!!

 

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

 

Ничего не скажешь, хороший совет. До такого и сам додуматься могу.

Дело не в том что мне сложно поставить МК, передатчик DMX512 для МК у меня написан и работает.

Просто я считаю глупо ставить целый контроллер для передачи одного импульса.

 

Вобщем вопрос остается в силе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Решил вопрос использованием EscapeCommFunction, выполняется ~1мс, сигнал подмешал в линию через К155ЛА3 =)

Теперь BREAK передается так:

EscapeCommFunction(hComPort,SETRTS);
EscapeCommFunction(hComPort,CLRRTS);

Всю работу с СОМ портом вынес в отдельный поток, полет нормальный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Решил вопрос использованием EscapeCommFunction, выполняется ~1мс, сигнал подмешал в линию через К155ЛА3 =)

Теперь BREAK передается так:

EscapeCommFunction(hComPort,SETRTS);
EscapeCommFunction(hComPort,CLRRTS);

А SetCommBreak(hComPort)/ClearCommBreak(hComPort) пробовали?

А EscapeCommFunction(hComPort,SETBREAK) / EscapeCommFunction(hComPort,CLRBREAK)? У меня эта пара работала.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А SetCommBreak(hComPort)/ClearCommBreak(hComPort) пробовали?

А EscapeCommFunction(hComPort,SETBREAK) / EscapeCommFunction(hComPort,CLRBREAK)? У меня эта пара работала.

 

Попробовал, так не работает. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ReAl

А на каком мосте работало?

На "обычных" портах и на FT232B-мосте

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просто я считаю глупо ставить целый контроллер для передачи одного импульса.

 

Просто для данной задачи "целый контроллер" будет и дешевле и надежней, да и несколько каналов сделать можно простым "ногодрыжеством".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...