![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
deniska |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
выставили режим с 9-м битом:
послали адресный байт, выставили обычный режим:
послали данные. |
||||
|
|||||
GreatShogun |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 12.8.2012 Репутация: нет Всего: нет |
У адреса 9-бит наоборот нулевой, но не суть вообщем то. Главное что не присваевается...
|
|||
|
||||
bass |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 5.8.2007 Репутация: 2 Всего: 2 |
Могу сказать не чего хорошего, походу винда не дает менять настройки.........
9 бит вообще не устанавливаеться. А вот так первый ресунок. dcb.Parity=0; dcb.StopBits=ONESTOPBIT;//Form1->CheckBox2->Checked; Вот так не дает выставить dcb.Parity=0; dcb.StopBits=1;//Form1->CheckBox2->Checked; второй рисунок dcb.Parity=0; dcb.StopBits=2;//Form1->CheckBox2->Checked; и третий рисунок dcb.Parity=1; dcb.StopBits=0;//Form1->CheckBox2->Checked; http://s1.ipicture.ru/uploads/20120816/y84V42ao.jpg http://s1.ipicture.ru/uploads/20120816/H0w1HE5U.jpg http://s1.ipicture.ru/uploads/20120816/wX7A27kZ.jpg Число в порт всевремя слал 170............... Походу не дает винда возможности выставить 9 бит.......((((((((((( У меня ХР.... Но кстатии уменя USB ком порт, может дело в нем........ Вечерком могу попробывать на обычном....... Это сообщение отредактировал(а) bass - 16.8.2012, 12:43 |
|||
|
||||
bass |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 5.8.2007 Репутация: 2 Всего: 2 |
Попробовал на встроенном в материнскую плату компорте... Увы но эти биты не изминились...... Хотя комп порт обязан их поддерживать всетаки это стандарт......... А вот написатели виндовса так не думали...((((((( Драйвер тогда один выход писать, либо комутировать через какоето устройство......
|
|||
|
||||
kuzulis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: 1 Всего: 1 |
Никто никому не обязан, 9 бит это не стандарт. Единственный способ сЪэмулировать 9 бит так, как сказал deniska Мы паритетом типа Mark/Space добавляем этот девятый бит и можем слать в ШД. Если мы хотим прочитать от контроллера 9 бит, то нужно читать в режиме Mark/Space и проверять на ошибки паритета. Типа если у нас Mark режим, значит 9-й бит должен быть в 1, поэтому, если мы приняли от ШД данные без ошибок, значит 9-й бит был 1, если с ошибкой паритета - значит он был 0. Как то так, т.е. косвенно определить этот бит. Это сообщение отредактировал(а) kuzulis - 16.8.2012, 16:55 |
|||
|
||||
bass |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 5.8.2007 Репутация: 2 Всего: 2 |
А куда тогда подевался стоп бит.....?????? Что то я не увидел его в осцилограмме..............
Ради прикола посмотрю завтра когда буду работать, получиться ли как писалось выше............ Это сообщение отредактировал(а) bass - 16.8.2012, 22:53 |
|||
|
||||
GreatShogun |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 12.8.2012 Репутация: нет Всего: нет |
Пробывал то же самое, и 9 бит проставлять, и паритет у меня не вышло, возможно легче найти стороннюю библиотеку, чем писать свой драйвер?
Это сообщение отредактировал(а) GreatShogun - 17.8.2012, 07:40 |
|||
|
||||
deniska |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
посмотрите еще раз внимательнее на настройки при открытии порта,
fParity = TRUE; // enable parity checking не забыли сделать? у нас такой механизм с адресным байтом работает, правда и железка своего производства. данный ШД точно приспособлен к обмену с компом? возможно к нему еще плата драйвера предусмотрена для обмена с компьютером...
|
|||
|
||||
GreatShogun |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 12.8.2012 Репутация: нет Всего: нет |
Да все совпадает, единственно fBinary у меня FALSE;
|
|||
|
||||
deniska |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
GreatShogun, еще я один нюанс упустил: сейчас уже не помню для чего именно, но у меня сделана временная задержка между
WriteFile для адресного байта и снятием признака 9-го бита. 100-200мксек достаточно, если время передачи критично, или простой Sleep(1) поставьте, но это уже намного больше будет(~15мсек в обычном режиме или 2-3мсек при использовании timeBeginPeriod ). Точно знаю что без этой задержки не вязались... позднее уточню причину. ПС. надеюсь еще забросили эту идею, главное пытаться... ![]() ппс: по-моему такой финт связан с задержками в передаче данных виндой. то что мы вызвали writefile - не значит что байт мгновенно передался. если задержку не поставить, то велика вероятность того, что адресный байт уйдет уже со сброшенным 9-м битом. както так.... Это сообщение отредактировал(а) deniska - 22.8.2012, 07:57 |
|||
|
||||
GreatShogun |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 12.8.2012 Репутация: нет Всего: нет |
Спасибо, что занимаетесь проблемой) Честно говоря не понимаю откуда такая сложность UART 2 и 3, распространены и известны, однако не могу найти ни одного рабочего примера того как работает 9-битная передача, хотя и RS-485 весьма распространенный протокол... попробую задержки поставить посмотрим что получится.
|
|||
|
||||
casey |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 20.12.2006 Где: Украина Репутация: нет Всего: 2 |
MARKPARITY и SPACEPARITY поддерживается не всеми микросхемами UART (видимо твоей и не поддерживается, на моем компе кстати тоже), я делал расчет кол-ва еденичек в отправляемом байте и в зависимости от результата выставлял EVEN или ODD. Можешь поотправлять один байт в цикле - осциллографом увидишь 11 бит - стартовый, 8 бит данных, 1 четности, стоповый.
Настройку DCB делал так:
Это сообщение отредактировал(а) casey - 22.8.2012, 16:27 |
|||
|
||||
GreatShogun |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 12.8.2012 Репутация: нет Всего: нет |
Задержки действительно помогли) спасибо)
|
|||
|
||||
deniska |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
урря |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
У UART'е в РС есть встроенное FIFO, так что отправляемые и принимаемые байты появляются на линии не сразу, а с некоторой неопределенной задержкой. С другой стороны манипуляции с Parity (как для передачи так и для приема) отрабатываются драйвером немедленно, и асинхронно с собственно процессом передачи и приема. Поэтому про FIFO можете сразу забыть, и задержки при передаче нужны именно по этой причине - что бы байты успели физически уйти в линию до того, как вы поменяете порту настройки PARITY
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |