Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подключение простейшего устр-ва через COM или USB
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
IGS
Кто может, дайти пожайлуста ответ на дурацкий, но насущный для меня вопрос :
Cложно ли подключить к PC некое устройство, выдающее в зависимости от того какая нажата на нем кнопка (от 1 до 3), на выходе различный электрический потенциал. Задача анализировать программой приходящий сигнал на COM или USB, с целью узнать какая же кнопка нажата на устройстве. PC должно работать под WIN98-XP. Я не системный программист и не изготавливал никогда железки, работаю сисадмином и знаком по долгу службы только с прикладным высокоуровневым программированием. Вопрос в том, насколько это сложно реализовать своими силами (нужно ли писать для этого драйвер) и что делать с аппаратной частью. Можно ли отделаться каким нибудь преобразователем электр. сигналов в COM логику и програмкой чтения данных из порта, написанной например на Delphi ? Или все сложнее?
Помогите теоретически или практически!
vet
Драйверов для работы с последовательными портами в Windows не нужно, всё доступно через WinAPI. Железо - любой микроконтроллер (лучше, если он будет иметь на борту аппаратный UART), плюс микросхема-преобразователь уровней для согласования электрических параметров м/к и RS-232, или схема на паре транзисторов, выполняющая те же функции.
sK0T
Кнопки всего три? В принципе можно подключить эти кнопки через пару резисторов к COM-порту и считывать его состояния напрямую. Под FreeBSD — пара строчек кода, под виндой не знаю, я её последний раз видел, когда она была версии 3.1. smile.gif

Но вообще задам филосовский вопрос: а зачем делать, когда на рынке полно устройств в духе игровых USB джойстиков и прочих цифровых клавиатур?
DLR
Можно вобще упрстить железо, если использовать игровой порт либо микрофонный вход, и для них так же не надо писать спец. дрова, но в во втором случае необходим звуковой генератор с возможностью перестройки в голосовом диапазоне - это всетаки достаточно сложно!
А вот в первом случае необходжимо всеголишь N кнопок и резисторов разных потенциалов, которые подключаются к аналоговым входам игрового порта (устроенно на принцйипе управления самой ручкой джостика) - вот и всё железо!
Решать ВАМ! smile.gif
Вилли
С USB просто без паяльника не получится. Это как минимум связка: микросхема USB - UART моста плюс микроконтроллер либо мост USB - параллельный интерфейс. Здесь помимо этого не обойтись и без USB драйвера для моста (правда можно использовать готовый).
Вариант с COM портом - проще, но если уж искать наиболее простой вариант - я бы использовал LPT. В самом простом варианте - кнопки можно вешать почти прямо на разъем.
Ну и напоследок: а почему бы под это дело не раздраконить обычную компьютерную мышь? казалось бы все кнопки уже приделаны куда надо - Паяльник уже не нужен. Бери и программируй smile.gif
TriD
Что бы подключить 3 кнопки к СОМ-порту достаточно использовать 3 сингнала CTS, DSR, и DCD (это входы). Вешаем на них по кнопке, вторые концы которых объеденены и подключены, скажем, к RTS. Входы CTS, DSR и DCD подтягиваем через резисторы к сигналу TDX. Вот и все.
Для того, что бы все это стало работать необходимо из программы (после открытия порта) установить значение сигнала RTS = '0'. После этого, при нажатии на кнопки соотв. сигнал CTS, DST и/или DCD будет равен "0". Если ни одна не нажата, то - "1".
Pahuchy
Цитата
С USB просто без паяльника не получится. Это как минимум связка: микросхема USB - UART моста плюс микроконтроллер либо мост USB - параллельный интерфейс. Здесь помимо этого не обойтись и без USB драйвера для моста (правда можно использовать готовый).

Можно использовать готовый микроконтроллер (я когда делаю нечто подобное ставлю Сypress AN2135SC) и не надо не каких преобразователей
USB - UART, USB - параллельный интерфейс.
Цитата
Вариант с COM портом - проще, но если уж искать наиболее простой вариант - я бы использовал LPT. В самом простом варианте - кнопки можно вешать почти прямо на разъем.

C LPT портом будет проще если вы работаете в WIN98, а вот в win2000,XP будет далеко не проще т.к. LPT защищён и обращаться к нему можно только через драйвер который вам придётся написать.
Цитата
Здесь помимо этого не обойтись и без USB драйвера для моста (правда можно использовать готовый).

Объясните мне пожалуста зачем для трёх кнопок писать драйвер blink.gif
Если можно пользоватся HID .
Цитата
Ну и напоследок: а почему бы под это дело не раздраконить обычную компьютерную мышь? казалось бы все кнопки уже приделаны куда надо - Паяльник уже не нужен. Бери и программируй

Ну и как вы это сделаете. Если раздраконить мышку и подключить к компу это всё равно что подключить две мышки к одному компу. (даже раздраконенная мышка всё равно остаётся мышкой laugh.gif )
Цитата
Что бы подключить 3 кнопки к СОМ-порту достаточно использовать 3 сингнала CTS, DSR, и DCD (это входы). Вешаем на них по кнопке, вторые концы которых объеденены и подключены, скажем, к RTS. Входы CTS, DSR и DCD подтягиваем через резисторы к сигналу TDX. Вот и все.

Вариант простой но достаточно ненадёжный т.к. при замыкании одной кнопки
потенциал на этом входе ~+12V
при замыкании двух на обоих входах будет +6V
и трёх +3V
т.е. при замыкании трёх кнопок (одновременно!!) возможно не срабатывание.


IGS если вас интересует как это сделать могу дать пример готовой программы для Сypress и для PC . Если вы живёте в Одессе могу подогнать нашару печатную плату cheers.gif . Могу подогнать и элементы но уже не нашару laugh.gif
Вилли
Цитата(Pahuchy @ Apr 15 2005, 11:19)
Цитата
С USB просто без паяльника не получится. Это как минимум связка: микросхема USB - UART моста плюс микроконтроллер либо мост USB - параллельный интерфейс. Здесь помимо этого не обойтись и без USB драйвера для моста (правда можно использовать готовый).

Можно использовать готовый микроконтроллер (я когда делаю нечто подобное ставлю Сypress AN2135SC) и не надо не каких преобразователей
USB - UART, USB - параллельный интерфейс.

Давайте подумаем что проще для простого человека - поставить микросхему USB моста и взять готовые дрова виртуального COM порта или брать Cypress с его обвязкой, писать к нему программу, опять же, ковыряться с дровами???

Цитата
Цитата
Вариант с COM портом - проще, но если уж искать наиболее простой вариант - я бы использовал LPT. В самом простом варианте - кнопки можно вешать почти прямо на разъем.

C LPT портом будет проще если вы работаете в WIN98, а вот в win2000,XP будет далеко не проще т.к. LPT защищён и обращаться к нему можно только через драйвер который вам придётся написать.

Умные люди уже давно написали не одну программу для работы с портами под win2000,ХР

Цитата
Цитата
Здесь помимо этого не обойтись и без USB драйвера для моста (правда можно использовать готовый).

Объясните мне пожалуста зачем для трёх кнопок писать драйвер blink.gif
Если можно пользоватся HID.

Поясняю: драйвер - не для 3-х кнопок, а для моста. Если интересуют подробности: www.ftdichip.com

Цитата
Цитата
Ну и напоследок: а почему бы под это дело не раздраконить обычную компьютерную мышь? казалось бы все кнопки уже приделаны куда надо - Паяльник уже не нужен. Бери и программируй

Ну и как вы это сделаете. Если раздраконить мышку и подключить к компу это всё равно что подключить две мышки к одному компу. (даже раздраконенная мышка всё равно остаётся мышкой laugh.gif )

Да, С USB мышкой много каши не сваришь. А мыши для COM уже вышли из моды и о них подумать забыли?


Цитата
IGS если вас интересует как это сделать могу дать пример готовой программы для Сypress и для PC . Если вы живёте в Одессе могу подогнать нашару печатную плату cheers.gif . Могу подогнать и элементы но уже не нашару laugh.gif
*


Я думаю, что вариант c USB мостом будет не только проще, но еще и дешевле (правда за исключением того варианта если IGS из Одессы, а Pahuchy все подгонит нашару) smile.gif
Pahuchy
Цитата
писать к нему программу, опять же, ковыряться с дровами???


Ещё раз повторюсь не с какими дровами ковырятся не надо.
Программа со стороны хоста будет состоять из 10 строк. при этом будут использоваться стандартные функции чтения/запись файла.
Если вы не поняли поищите в интернете что такое HID(Human Interface Device ) .
Я это говорю не с потолка (делал сам)

Цитата
Умные люди уже давно написали не одну программу для работы с портами под win2000,ХР


Это да . Если устройство необходимо использовать только для себя. Иначе теряется универсальность. Т.е. это устройство не будет работать с другими компами пока вы не установите на них "программу для работы с портами под win2000,ХР " которую написали умные люди.

Цитата
Да, С USB мышкой много каши не сваришь. А мыши для COM уже вышли из моды и о них подумать забыли?


Ещё раз повторюсь какая бы мышка не была (COM, PS/2, USB) она останется мышкой и компутер будет видеть её как мышку а не как три кнопки.
Вилли
Цитата(Pahuchy @ Apr 18 2005, 18:01)
Это да . Если устройство необходимо использовать только для себя. Иначе теряется универсальность.  Т.е. это устройство не будет работать  с другими компами пока вы не установите на них  "программу для работы с портами под win2000,ХР " которую написали умные люди.

Никакую программу ставить не нужно. Все необходимые манипуляции - это подключение нужной dll к своему коду и пара вызовов функций для записи регистров данных LPT порта и чтения регистра состояния порта smile3046.gif . При этом аппаратное обеспечение остается минимальным: разъем DB-25, несколько резисторов и те самые 3 кнопки. И никаких Cypress'ов, и программ для них. Поймите: я не против Вашего предложения. Я бы на месте IGS, так бы и поступил. Но учитывая, что IGS: "не изготавливал никогда железки, работаю сисадмином и знаком по долгу службы только с прикладным высокоуровневым программированием", я и советую наиболее безболезненный вариант.

Цитата
Ещё раз повторюсь какая бы мышка не была (COM, PS/2, USB) она останется мышкой и компутер будет видеть её как мышку а не как три кнопки.

Соглашусь, что эта задача слишком сложна для человека не работавшего с железом, тем более, что даже у Вас вызывает такое недоумение. smile.gif
IGS
Цитата(IGS @ Apr 13 2005, 23:06)
Спасибо всем кто отозвался! Я понял что работать в моем случае все таки легче с COM. Созрел уточняющий вопрос! Упростим задачу еще : есть устройство на котором размещена допустим всего ОДНА кнопка. При нажатии кнопки на 2-х выходных проводах устройства сигнал +12V. Можно ли этот потенциал напрямую подавать на вход DSR,CTS или любой другой вход COM?
Какова допустимая сила тока? Обнулится ли входная 1 если сигнал перестать подавать или это нужно делать программно? 







*
Alexandr
Как Вы сами заметили DSR и CTS входы, поэтому больший ток чем они могут принять они не примут (обычно несколько десятков мкА). Если вы уверены, что Ваш сигнал +12V, не скакнет вольт эдак до 20, то можете подключать напрямую.
Цитата
Обнулится ли входная 1 если сигнал перестать подавать или это нужно делать программно? 

Ну во первых, если мне не изменяет память +12В - это "0", а -12В - это "1". (поправьте если не прав). Далее.
Все завит от того КАК Вы перестанете подавать Ваши 12V. Если просто оборвете цепь, то входы все равно, будут считать что на них +12В. Поэтому надо +12В менять на -12В. И программно делать ничего не надо.
IGS
Цитата(Alexandr @ Apr 20 2005, 13:29)
Благодорю за внятное пояснение. В принципе все понял, но рескну задать еще вопрос на туже тему. Во первых если можно то поточнее о максимальном токе, чтобы не спалить COM. А во вторых опишу предполагаемый алгоритм работы устройства и анализа сигналов. Пользователь нажимает условное кол-во раз данную кнопку. Считаем например, что 3 нажатия  кнопки в течении 30 секунд считаются срабатыванием и сигналом программе для "принятия действий". Как мне видится я например, в потоке анализирую состояние COM (допустим CTS), если там 1,  обнуляю счетчик срабатываний "Count", обнуляю из программы CTS=0, запускаю таймер на 30 сек, прибавляю срабатывания : Count=Count+1, жду следующей 1, добавляю к счетчику, обнуляю итак 30 сек. Если 3 срабатывания за 30 сек, все OK!, иначе выключить таймер, продолжать анализировать и т.д.
Насколько такая теория может совпасть с практикой, пока проводов не поял и кода не писал.









*
Alexandr
Могу Вас разочаровать - за одно нажатие кнопки ваш count насчитает нажатий эдак 200-300 если не больше. Дребезг контактов, батенька. Поэтому Вам предется усложнить алгоритм и программно бороться с дребезгом.
Михалыч
Цитата(DLR @ Apr 14 2005, 10:06)
А вот в первом случае необходжимо всеголишь N кнопок и резисторов разных потенциалов, которые подключаются к аналоговым входам игрового порта (устроенно на принцйипе управления самой ручкой джостика) - вот и всё железо!
*

Ребята, а можно про игровой порт поподробнее - где какие выводы, куда и что мона подавать? a14.gif
Pahuchy
Вот тут всё просто и понятно (пример джойстика)

http://cxem.net/comp/comp3.php
M_A
Цитата(Pahuchy @ Apr 15 2005, 08:19)
C LPT портом будет проще если вы работаете в WIN98, а вот в win2000,XP будет далеко не проще т.к. LPT защищён и обращаться к нему можно только через драйвер который вам придётся написать.

*


Два вопроса:
1. Никак нельзя общаться с LPT под XP без драйвера?
2. А для COM порта под XP дрова не нужны?
кот Леопольд
Через COM очень просто сделать. И прогу элементарно ежели использовать DirectPort компоненту - я работаю напрямую с портами LPT и COM. Теоретически можна подключить 5 кнопок (6-DSR, 8-CTS, 1-DCD, 9- Ri, 2-RD). RD надо читать по +3 смещению как BreakDetect .
Гласы о том чот при одновременном нажатии 3 кнопок будет что-то не то - неправильные. Ежели через 100k подвесить к земле каждый вход - никакой DTR или RTS они неподсадят.
Далее DTR,RTS и все описанные входы в PC являются прямыми ,а не инвертированными (1=+12б 0-12В), в отличии от пары TD-RD.
Ежели есть опасения по дребезгу - вцепи в параллель к резикам еще и кондюки нано-,пико- номиналов.
Ежели хочешь сброшу по мылу эту компоненту
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.