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


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

По второй стороне - ну воспользуйтесь поиском - там море инфы и примеров ....
А если по теме - при записи WriteFile - ваши данные опустяться на уровень драйверов винды и они уже будут коммандовать парадом, но советую заморачиваться. Там есть есчё IO_CONTROL - типа ф-ции которыми можно достучаться до настроек порта - можете оперировать ими...
На счёт момента - там по ходу можно или поллингом или как в мегах - аналог интерупта - при приходе в буфер драйвера инфы - можно чтото сотворить..
ДаФно было - могу порыться дома - посмотреть...
kolobok0
Цитата(TarasG @ May 6 2008, 18:36) *
... Что при этом будет происходить на выводе TxD? Или мне можно этим не заморачиваться, т.к. об этом позаботится UART?...


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


удачи Вам
(круглый)
TarasG
Попробовал что-то сделать. При соединениее "входа" и "выхода" МК он свои данные получает. При аналогичном соединении комп тоже свои данные получает. А вот при соединении компа и МК - глухо. Скорость поставил одинаковую, все настройки (бит чётности, количество стоп-битов и т.п.) тоже одинаково. Но не хотят видеть ни в какую sad.gif Хоть из МК в комп, хоть из компа в МК - даже прерываний не генерируется.
Микросхема RS-232 100% рабочая, т.к. свои данные принимаются даже через неё как МК, так и компом...
vetal
Отключите на ПК управление потоком.
TarasG
Цитата(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;
AHTOXA
Свяжитесь для начала не со своей программой, а с гипертерминалом (или любой терминальной программой). Убедитесь, что контроллер передаёт правильно, скорость совпадает. А потом уже пишите программу на PC.
vetal
Цитата
А если из программы, то подскажите как

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

Правильно сказали - для начала надо на гипертерминале отладиться.
TarasG
Гипертерминал тоже ничего не видит sad.gif Настройки выставляю как в МК (см. код выше), нажимаю на устройстве кнопку, после чего должна быть отправка данных в ПК. Но на терминале пусто sad.gif Аналогично МК не реагирует на комп...
vvs157
Цитата(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 меги при непрерывной передачи пятерок. По длительности импульсов можно определить без проблем скорость, и понять все ли в порядке.
TarasG
Цитата(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
Злодей
Вот с картинками smile.gif
http://www.pcports.ru/
777777
Цитата(TarasG @ May 6 2008, 18:36) *
И второе: как работать с COM-портом из программы в Windows?


Работать с ним сравнительно просто: открываешь файл с именем "COM1" (или какой нужно) с помощбю функции CreateFile, но предварительно читаешь в MSDN про эту функцию, а также про структуру DCB... Но дело не в этом, а в том, что если ты разрабатываешь новое устройство, то с COM-портами лучше не связываться - их и так уже нет ни в одном компьютере, а скоро даже USB-конвертер не достанешь.
Kuzmi4
2 TarasG -
раскопал дома богодельню.
В приложеном текстовике старт и тред приёма. laughing.gif
Билдёра так нету , потому передачу не найду - передача п онажатию кнопки вроде, а в прожекте кнопок дофигища просто.. smile.gif

Пользуйтесь smile.gif
TarasG
Цитата(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-выводный).
777777
Цитата(TarasG @ May 8 2008, 14:49) *
<...>И соединять придётся скорей всего с LPT портом, т.к. COM занят мышью.

А вот с LPT работать из Windows гораздо сложнее, его из CreateFile не откроешь sad.gif
TarasG
Цитата(777777 @ May 8 2008, 19:29) *
А вот с LPT работать из Windows гораздо сложнее, его из CreateFile не откроешь sad.gif

А чем же он отличается? Сигналы вроде аналогичные...

Я понял, мы говорим о разных вещах. Я неправильно назвал тот порт LPT. Просто RS-232 бывает не только 9-выводным, но и 25 (и даже 31). Вот его я и имею ввиду. А LPT это действительно другая история...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.