Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Com порт с нестандартной скоростью, не получается задать нестандартную 
:(
    Опции темы
takedo
Дата 9.9.2005, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Кто знает, как проинициализировать com порт на работу с нестандартной частотой? Не CBR_115200 а, например, 100000.
Делал через DCB dcb; dcb.BaudRate = 100000, но функция SetCommState(m_hComm, &dcb); возвращает 0, что говорит о том, что на такой скорости порт не проинициализирован. smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Snowy
Дата 9.9.2005, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Нестандартную скорость задать нельзя, т.к. она определяется целочисленным делителем.
нельзя разделить 115200 на целое число так, чтобы получилось 100000.
PM MAIL   Вверх
takedo
Дата 9.9.2005, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



очень это плохо. Это особенности WIndows?


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Snowy
Дата 9.9.2005, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Насколько мне известно, это технологическая особенность COM порта.
То есть от операционной системы не зависит.
PM MAIL   Вверх
takedo
Дата 9.9.2005, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



а вот рядом со мной программируют самодельную плату в которую я буду посылать запросы, так вот там нет никакой разницы с какой скоростью вести передачу, так что это не оособенности порта, а что то другое... А ведь очень бы хотелось попробовать поработать с нестандартной скоростью smile
Добавлено @ 12:04
самодельную - неправильно выразился, собственной разработки.


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
maxim1000
Дата 9.9.2005, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



Цитата
а вот рядом со мной программируют самодельную плату в которую я буду посылать запросы, так вот там нет никакой разницы с какой скоростью вести передачу, так что это не оособенности порта, а что то другое... А ведь очень бы хотелось попробовать поработать с нестандартной скоростью

я работал с несколькими процессорами, в том числе и нестандартными
ни разу не встретил COM-порта, скорость которого не задавалась бы делителем какой-то внешней smile
на самом деле, весь вопрос в том, какая частота подается COM-порт и используется для деления
в стандартном варианте - 115200, насколько я члышал, только для совместимости
в некоторых и до мегабитов бывает (кстати, был у нас переходничок один - USB-COM - полволял работать на мегабите)
так вот...
когда заказывается скорость для COM-порта, выбирается ближайший делитель
чаще всего получается, что скорость отличается от той, которая нужна
все зависит от этого отклонения
если основная частота значительно больше, то скорость может быть задана довольно точно
если нужная частота приближается к основной - начинаются проблемы
например: заказано 100000, а основная - 115200
ближайший делитель 1, погрешность 15% - плохо
а вот если заказать 10000 (в 10 раз меньше), ближайший делитель 12, погрешность 4% - уже лучше
с другой стороны на основной частоте 1М оба варианта давали бы хороший результат

небольшие отклонения частоты допустимы, но когда они првышают некоторый порог, просто нет смысла настраивать COM-порт на эту частоту - ничего работать не будет, поэтому, наверное, Windows и говорит, что нельзя...


--------------------
qqq
PM WWW   Вверх
Snowy
Дата 9.9.2005, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Ей-то конечно все равно, не все равно ком-порту.
Его возможности ограничены делителем.
Можно конечно попробовать применять какие-нить хитрые делители, но конечный набор все равно фиксирован. И это именно набор, а не произвольное число.
Если предельная скорость для ком порта установлена в 921600, то конечный набор значительно больше.

Цитата(takedo @ 9.9.2005, 11:10)
SetCommState(m_hComm, &dcb); возвращает 0

Она всегда проверяет указанный бадрейт. Если никакой делитель не подходит, то ошибка.
PM MAIL   Вверх
maxim1000
Дата 9.9.2005, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



о... кстати, нашел похожую темку...
http://forum.vingrad.ru/index.php?showtopic=35134&hl=com
Добавлено @ 12:26
Цитата
И это именно набор, а не произвольное число

насколько мне известно, это - именно произволное число smile


--------------------
qqq
PM WWW   Вверх
Snowy
Дата 9.9.2005, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Цитата(maxim1000 @ 9.9.2005, 12:25)
насколько мне известно, это - именно произволное число

Вобщем-то да. Просто число должно быть целым.
Если в качестве предела считать 300 бод (хотя, насколько я помню, это даже не если), то в итоге получаем конечный набор допустимых делителей. Я это имел ввиду.
Кроме того, набор все равно ограничен количеством бит в делителе smile
PM MAIL   Вверх
Guest
Дата 9.9.2005, 14:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











maxim1000 У меня со стопами не возникло проблем. Проблема в том, что порт не ХОЧЕТ инициализироваться на нестандартной частоте. SetCommState возвращает 0.
Snowy Очевидно, что у ком порта нет ограничения. Ограничен WINAPI!?
Так и чего делать? сухари что-ли посушить?
  Вверх
takedo
Дата 9.9.2005, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



maxim1000 У меня со стопами не возникло проблем. Проблема в том, что порт не ХОЧЕТ инициализироваться на нестандартной частоте. SetCommState возвращает 0.
Snowy Очевидно, что у ком порта нет ограничения. Ограничен WINAPI!?
Так и чего делать? сухари что-ли посушить?
Добавлено @ 14:19
Кто то знает где и как задать вопрос в микрософт? smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Snowy
Дата 9.9.2005, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Цитата(takedo @ 9.9.2005, 14:16)
Проблема в том, что порт не ХОЧЕТ инициализироваться на нестандартной частоте. SetCommState возвращает 0.

Опять 25...
Цитата(takedo @ 9.9.2005, 14:16)
Snowy Очевидно, что у ком порта нет ограничения. Ограничен WINAPI!?

Ну-ну. Я съем свою шляпу, если ты выставишь ком порту 100000 не изобретая свою UART.

В DOS тоже нельзя. А там это делается напрямую обращаясь к порту.
По линуксам я не спец, но уверен, что и там та же картина.
Добавлено @ 14:25
Цитата(takedo @ 9.9.2005, 14:16)
Кто то знает где и как задать вопрос в микрософт?

А ты денежки за винду заплатил?
Или ты подписчик MSDN?
Или оффициальный партнер M$?
PM MAIL   Вверх
maxim1000
Дата 9.9.2005, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



Цитата
maxim1000 У меня со стопами не возникло проблем. Проблема в том, что порт не ХОЧЕТ инициализироваться на нестандартной частоте. SetCommState возвращает 0.

там дальше в теме тоже обсуждается процесс задания частоты для COM-порта и допустимые погрешности...
Цитата
Очевидно, что у ком порта нет ограничения

очевидные вещи - опасная штука smile
а откуда это очевидно?

Это сообщение отредактировал(а) maxim1000 - 9.9.2005, 14:30


--------------------
qqq
PM WWW   Вверх
Dreamer_0x01
Дата 9.9.2005, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 12



Не знаю как в винде, тут я использую стандартные скорости.
Но большей частью я как раз программирую микроконтроллеры, где скорость порта я задаю сам с помощью одного из таймеров. А число задаваемое в таймер, я считаю, исходя из частоты кварца.
И получается как раз что мне надо в моем устройстве подстаиваться под стандартную скорость порта, ну никак не в винде под нестндартную.
Почему бы вашим программистам вашей платы не сделать все так, как это принято, а не извращаться подобным образом? Для чего вам нестандартные скорости? Стоит ли это того?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
takedo
Дата 12.9.2005, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Dreamer_0x01
А для того, чтобы защитить данные. Вообще - то разговор у нас такой: "А не ху..о было бы сделать на нестрадартной частоте", - "Да, было бы хорошо, если в Винде можно." smile
Snowy
Цитата
А ты денежки за винду заплатил?
Или ты подписчик MSDN?

Да, а если было бы и нет, это поменяет адрес по которому нужно обратиться??? smile
Добавлено @ 06:48
Snowy

Цитата
Ну-ну. Я съем свою шляпу, если ты выставишь ком порту 100000 не изобретая свою UART.

В DOS тоже нельзя. А там это делается напрямую обращаясь к порту.


А вот в дос то как-раз можно! Но скорее всего, что шляпу тебе есть не придется. Вот все-таки узнать бы куда же послать вопрос в микрософт... smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0710 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.