|
|
  |
СОМ порт, тормозит SetCommState., передача DMX512 серез СОМ порт |
|
|
|
Jun 1 2009, 10:26
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 16-10-07
Пользователь №: 31 405

|
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?
|
|
|
|
|
Jun 2 2009, 20:05
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

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

Группа: Новичок
Сообщений: 19
Регистрация: 16-10-07
Пользователь №: 31 405

|
Цитата(Седой @ Jun 2 2009, 23:05)  Вопрос. Лучшее средство от головной боли? Ответ. АПСТЕНУ!!
Так и здесь, выкинуть мост - поставить МК. Ничего не скажешь, хороший совет. До такого и сам додуматься могу. Дело не в том что мне сложно поставить МК, передатчик DMX512 для МК у меня написан и работает. Просто я считаю глупо ставить целый контроллер для передачи одного импульса. Вобщем вопрос остается в силе.
|
|
|
|
|
Jun 3 2009, 17:12
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 16-10-07
Пользователь №: 31 405

|
Решил вопрос использованием EscapeCommFunction, выполняется ~1мс, сигнал подмешал в линию через К155ЛА3 =) Теперь BREAK передается так: CODE EscapeCommFunction(hComPort,SETRTS); EscapeCommFunction(hComPort,CLRRTS); Всю работу с СОМ портом вынес в отдельный поток, полет нормальный.
|
|
|
|
|
Jun 3 2009, 17:59
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(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)? У меня эта пара работала.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jun 3 2009, 18:41
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 16-10-07
Пользователь №: 31 405

|
Цитата(ReAl @ Jun 3 2009, 20:59)  А SetCommBreak(hComPort)/ClearCommBreak(hComPort) пробовали? А EscapeCommFunction(hComPort,SETBREAK) / EscapeCommFunction(hComPort,CLRBREAK)? У меня эта пара работала. Попробовал, так не работает.
|
|
|
|
|
Jun 4 2009, 06:48
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 16-10-07
Пользователь №: 31 405

|
ReAl А на каком мосте работало?
|
|
|
|
|
Jun 6 2009, 06:18
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

|
Цитата(TONAL @ Jun 3 2009, 02:16)  Просто я считаю глупо ставить целый контроллер для передачи одного импульса. Просто для данной задачи "целый контроллер" будет и дешевле и надежней, да и несколько каналов сделать можно простым "ногодрыжеством".
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|