реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Связь с компом через UART
TarasG
сообщение May 6 2008, 14:36
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378



Этот вопрос меня интересует с двух сторон. Во-первых, как работать с UART? И второе: как работать с COM-портом из программы в Windows? По первому у меня вобщем-то есть определённая литература и даже примеры. Но вот второе вызывает затруднение. Точнее, даже не сама работа с портом, а мне не ясно, что будет происходить на выводах порта при записи в него байта. Скажем, я открыл порт через CreateFile и записываю в него последовательность, скажем из 32 байт, через WriteFile. Что при этом будет происходить на выводе TxD? Или мне можно этим не заморачиваться, т.к. об этом позаботится UART? И ещё одно: как считывать данные из МК? Ясно, что функцией ReadFile, но как определить момент, в который начнётся передача?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение May 6 2008, 14:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Цитата(TarasG @ May 6 2008, 17:36) *
Этот вопрос меня интересует с двух сторон. Во-первых, как работать с UART? И второе: как работать с COM-портом из программы в Windows? По первому у меня вобщем-то есть определённая литература и даже примеры. Но вот второе вызывает затруднение. Точнее, даже не сама работа с портом, а мне не ясно, что будет происходить на выводах порта при записи в него байта. Скажем, я открыл порт через CreateFile и записываю в него последовательность, скажем из 32 байт, через WriteFile. Что при этом будет происходить на выводе TxD? Или мне можно этим не заморачиваться, т.к. об этом позаботится UART? И ещё одно: как считывать данные из МК? Ясно, что функцией ReadFile, но как определить момент, в который начнётся передача?


По первой стороне - открываем соответствующий раздел меги посвящённый уарту и читаем..

По второй стороне - ну воспользуйтесь поиском - там море инфы и примеров ....
А если по теме - при записи WriteFile - ваши данные опустяться на уровень драйверов винды и они уже будут коммандовать парадом, но советую заморачиваться. Там есть есчё IO_CONTROL - типа ф-ции которыми можно достучаться до настроек порта - можете оперировать ими...
На счёт момента - там по ходу можно или поллингом или как в мегах - аналог интерупта - при приходе в буфер драйвера инфы - можно чтото сотворить..
ДаФно было - могу порыться дома - посмотреть...
Go to the top of the page
 
+Quote Post
kolobok0
сообщение May 6 2008, 15:42
Сообщение #3


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(TarasG @ May 6 2008, 18:36) *
... Что при этом будет происходить на выводе TxD? Или мне можно этим не заморачиваться, т.к. об этом позаботится UART?...


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


удачи Вам
(круглый)
Go to the top of the page
 
+Quote Post
TarasG
сообщение May 7 2008, 17:57
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378



Попробовал что-то сделать. При соединениее "входа" и "выхода" МК он свои данные получает. При аналогичном соединении комп тоже свои данные получает. А вот при соединении компа и МК - глухо. Скорость поставил одинаковую, все настройки (бит чётности, количество стоп-битов и т.п.) тоже одинаково. Но не хотят видеть ни в какую sad.gif Хоть из МК в комп, хоть из компа в МК - даже прерываний не генерируется.
Микросхема RS-232 100% рабочая, т.к. свои данные принимаются даже через неё как МК, так и компом...
Go to the top of the page
 
+Quote Post
vetal
сообщение May 7 2008, 18:04
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Отключите на ПК управление потоком.
Go to the top of the page
 
+Quote Post
TarasG
сообщение May 7 2008, 18:17
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378



Цитата(vetal @ May 7 2008, 21:04) *
Отключите на ПК управление потоком.

Если Вы имеете ввиду настройки порта в Диспетчере устройств, то там оно выключено. А если из программы, то подскажите как 05.gif

Если что, структура DCB задана следующим образом:
Код
mDCB.BaudRate = CBR_9600;
mDCB.ByteSize = DATABITS_8;
mDCB.fParity = TRUE;
mDCB.Parity = EVENPARITY;
mDCB.StopBits = ONESTOPBIT;
mDCB.fBinary = TRUE;
mDCB.fOutxCtsFlow = FALSE;
mDCB.fOutxDsrFlow = FALSE;
mDCB.fDtrControl = DTR_CONTROL_DISABLE;
mDCB.fDsrSensitivity = FALSE;
mDCB.fNull = FALSE;
mDCB.fRtsControl = RTS_CONTROL_DISABLE;
mDCB.fAbortOnError = FALSE;
mDCB.fOutX = FALSE;
mDCB.fInX = FALSE;


Сообщение отредактировал TarasG - May 7 2008, 18:23
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 7 2008, 18:57
Сообщение #7


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Свяжитесь для начала не со своей программой, а с гипертерминалом (или любой терминальной программой). Убедитесь, что контроллер передаёт правильно, скорость совпадает. А потом уже пишите программу на PC.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
vetal
сообщение May 7 2008, 19:31
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Цитата
А если из программы, то подскажите как

Оно выключено.
mDCB.fDtrControl = DTR_CONTROL_DISABLE;
mDCB.fRtsControl = RTS_CONTROL_DISABLE;

Правильно сказали - для начала надо на гипертерминале отладиться.
Go to the top of the page
 
+Quote Post
TarasG
сообщение May 7 2008, 19:34
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378



Гипертерминал тоже ничего не видит sad.gif Настройки выставляю как в МК (см. код выше), нажимаю на устройстве кнопку, после чего должна быть отправка данных в ПК. Но на терминале пусто sad.gif Аналогично МК не реагирует на комп...

Сообщение отредактировал TarasG - May 7 2008, 19:43
Go to the top of the page
 
+Quote Post
vvs157
сообщение May 7 2008, 20:24
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(vetal @ May 7 2008, 23:31) *
Правильно сказали - для начала надо на гипертерминале отладиться.
Для отладки гипертермил - это худшее, что есть. Возимите лучше терминальную программу от Moxa
http://www.moxa.com/drivers/pcommlite/win2k/PComm2K_V1.3.zip
(программа PComm Terminal Emulator)
С ней по крайне мере ясно, что происходит с CTS и DSR


Цитата(TarasG @ May 7 2008, 23:34) *
Гипертерминал тоже ничего не видит sad.gif Настройки выставляю как в МК (см. код выше), нажимаю на устройстве кнопку, после чего должна быть отправка данных в ПК. Но на терминале пусто sad.gif Аналогично МК не реагирует на комп...
Возмите осциллограф и посмотрите, что приходит на ногу RxD меги при прередачи с РС последовательности 5-рок. Аналогично посмотрите, что на ноге TxD меги при непрерывной передачи пятерок. По длительности импульсов можно определить без проблем скорость, и понять все ли в порядке.
Go to the top of the page
 
+Quote Post
TarasG
сообщение May 7 2008, 21:33
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378



Цитата(vvs157 @ May 7 2008, 23:24) *
Для отладки гипертермил - это худшее, что есть. Возимите лучше терминальную программу от Moxa
http://www.moxa.com/drivers/pcommlite/win2k/PComm2K_V1.3.zip
(программа PComm Terminal Emulator)
С ней по крайне мере ясно, что происходит с CTS и DSR

Аналогично sad.gif Передачи нет ни в одном направлении sad.gif
Цитата(vvs157 @ May 7 2008, 23:24) *
Возмите осциллограф и посмотрите, что приходит на ногу RxD меги при прередачи с РС последовательности 5-рок. Аналогично посмотрите, что на ноге TxD меги при непрерывной передачи пятерок. По длительности импульсов можно определить без проблем скорость, и понять все ли в порядке.

Завтра попробую. А 5-ки вы имеете ввиду 0х55?

Прошу прощения, проблема решилась. Глупая была ошибка, хоть и не совсем по мое вине. Распайку микросхемы ST232 я взял из журнала, а там оказались перепутаны TxD и RxD smile.gif Вобщем, в меня приёмник соединялись с приёмником, а передатчик с передатчиком. А при соединении самого с собой всё работало. Я это 2 раза проверил (распайку), но опять же с журналом.
А когда стал осцилографом, то заметил, что при подаче сигналов сразу в двух направлениях, на одной ноге ничего непроисходит, а на другой появляются бессмысленные импульсы, похожие на смесь двух сигналов.
Сейчас всё нормально работает на скоростях до 57600, чего более чем достаточно. Всем спасибо за помощь, ещё раз извините smile.gif

Сообщение отредактировал TarasG - May 7 2008, 20:39
Go to the top of the page
 
+Quote Post
Злодей
сообщение May 8 2008, 09:51
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 29-04-08
Из: Петербург
Пользователь №: 37 142



Вот с картинками smile.gif
http://www.pcports.ru/
Go to the top of the page
 
+Quote Post
777777
сообщение May 8 2008, 09:56
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(TarasG @ May 6 2008, 18:36) *
И второе: как работать с COM-портом из программы в Windows?


Работать с ним сравнительно просто: открываешь файл с именем "COM1" (или какой нужно) с помощбю функции CreateFile, но предварительно читаешь в MSDN про эту функцию, а также про структуру DCB... Но дело не в этом, а в том, что если ты разрабатываешь новое устройство, то с COM-портами лучше не связываться - их и так уже нет ни в одном компьютере, а скоро даже USB-конвертер не достанешь.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение May 8 2008, 10:30
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 TarasG -
раскопал дома богодельню.
В приложеном текстовике старт и тред приёма. laughing.gif
Билдёра так нету , потому передачу не найду - передача п онажатию кнопки вроде, а в прожекте кнопок дофигища просто.. smile.gif

Пользуйтесь smile.gif
Прикрепленные файлы
Прикрепленный файл  bogodel_nya_no1.txt ( 28.27 килобайт ) Кол-во скачиваний: 82
 
Go to the top of the page
 
+Quote Post
TarasG
сообщение May 8 2008, 10:49
Сообщение #15


Участник
*

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378



Цитата(777777 @ May 8 2008, 12:56) *
Работать с ним сравнительно просто: открываешь файл с именем "COM1" (или какой нужно) с помощбю функции CreateFile, но предварительно читаешь в MSDN про эту функцию, а также про структуру DCB...

Спасибо, это я уже всё нашел. Сейчас буду пробовать, главное что по железу всё работает.
Цитата(777777 @ May 8 2008, 12:56) *
Но дело не в этом, а в том, что если ты разрабатываешь новое устройство, то с COM-портами лучше не связываться - их и так уже нет ни в одном компьютере, а скоро даже USB-конвертер не достанешь.

Оно то так, но в моём случае работает как раз обратное. Дело в том, что устройство будет соединяться с очень старым компом (класса Pentium 133), где USB даже не пахнет. И соединять придётся скорей всего с LPT портом, т.к. COM занят мышью. Кроме того, там уже протянут кабель (используется для связи с мини-АТС), который подключается как раз к 25-выводному порту (на другом конце 9-выводный).
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 02:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01502 секунд с 7
ELECTRONIX ©2004-2016