2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Цепь на USB
Сообщение02.12.2013, 01:44 


02/12/13
6
Здравствуйте.

Вопрос по поводу подключения внешней цепи на USB.
Подскажите, пожалуйста, какие образом можно реализовать фиксирование на компьютере замыкания внешней цепи, соединенной с ПК по USB. Подключаемая цепь - это просто контур с ключом, т.е. просто провод и разрывом. Требуется фиксировать на ПК момент, когда разрыв устраняется и провод становится без разрывов. Оба конца провода должны как-то замыкаться на компьютер, т.е. порт USB.
Вроде как на параллельном порту это реализовывается проще (судя по тому, что я нагуглил), но схему надо подключать именно к USB.

Поэтому возникает вопрос по поводу того, как лучше (механически) концы провода соединять с USB.
И также интересует, каким образом лучше считывать замыкание - писать драйвер "устройства"?

 Профиль  
                  
 
 Re: Цепь на USB
Сообщение05.12.2013, 20:20 
Аватара пользователя


05/12/13
16
Добрый вечер!

Боюсь Вы не совсем представляете как работает USB.
Если не возражаете - расскажу кратко (на примере USB 2.0)

Имеется 4 провода, два из них это +5V и земля, остальные два - данные, называются D+ и D-.
Обнаружение подключения и отключения устройств, сброс устройства, хендшейк, передача данных, засыпание и пробуждение устройства происходит именно по паре D+/D-.

Имеются два неравноправных участника Host - компьютер и Device - подключаемое устройство.
При подключении устройства по шине USB, Device выствляет высокий уровень (3.3V) на D+ если оно Full speed/Hi speed или на D- Low speed. Увидев высокий уровень, Host ждет 100 миллисекунд, затем на 10 миллисекунд опускает D+ и D- в ноль, это означает сброс подключаемого устройства. После этого, если мне не изменяет склероз, устройство готово в течении 10 миллисекунд принимать данные для инициализации. Причем не просто принимать, но и отвечать осмысленно и в строго установленные промежутки времени (довольно жесткие).
При инициализации устройство передает хосту информацию о себе, по которой Host "понимает" кого ему воткнули в разъем, делает соответствующие выводы, проводит повторный сброс устройства и начинает следующую фазу инициализации.

Если Device не отвечает, отвечает некорректно или не во время - процедура инициализации прерывается и, как правило, выводится сообщение что кто-то попытался подключиться по USB, но система не поняла кто это был :D

Это самое начало, дальше все сложнее и интереснее, поверьте мне. Если не верите, почитайте спецификации на этот протокол.

 Профиль  
                  
 
 Re: Цепь на USB
Сообщение05.12.2013, 21:29 


05/09/12
2587
alnight в сообщении #795239 писал(а):
Подключаемая цепь - это просто контур с ключом, т.е. просто провод и разрывом.
А если это будет копеечный простейший МК с бортовым USB, питающийся от его же 5 вольт и простейшей прошивкой, которая будет слать по USB на любой хост (например, комп) любой сигнал при замыкании одного из входов на землю, то реализовать это будет гораздо проще.

 Профиль  
                  
 
 Re: Цепь на USB
Сообщение05.12.2013, 21:44 
Аватара пользователя


05/12/13
16
Вы абсолютно правы, при наличии микроконтроллера с встроенным USB (в отличии от двух проводов и ключа) все становится более реальным. Придется правда написать свой драйвер, либо "воспользоваться" чужим, подсунув при инициализации "правильные" VID и PID.

 Профиль  
                  
 
 Re: Цепь на USB
Сообщение12.12.2013, 01:47 


02/12/13
6
Спасибо за ответы!
Как я понял:
1) необходимо найти МК, воткнуть его между USB и контуром с ключом.
2) Прошить МК таким образом, чтобы он посылал какой-либо определенный сигнал на USB при замыкании (например, при замыкании 2-х ножек МК, к которым будут подведены концы электрической схемы).
3) обработать этот сигнал от USB на компе средствами написанного под этот МК драйвера.
Т.к. мне нужно, чтобы сигнал от USB "дошел" до основной программы на компе (это программа-секундомер), то
4) нужно в программе вставить код, отвечающий за работу с драйвером.

Еще вопрос о том, как соединять эл. цепь и МК. Замкнуть концы схемы на какие-либо 2 ножки МК - это приемлимое решение?
Можете посоветовать МК, под который попроще будет писать драйвер? (не обязательно конкретный, какого типа лучше взять МК: PIC, NEC, AVR, ARM или др.)

 Профиль  
                  
 
 Re: Цепь на USB
Сообщение12.12.2013, 11:24 
Аватара пользователя


05/12/13
16
Добрый день!

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

Относительно микроконтроллеров - можно делать на них, но нужно иметь ввиду, что у USB существует несколько уровней, самый нижний - это физический, он принимает и передает данные, осуществляет сериализацию/десериализацию, кодирование/декодирование, бит-стаффинг. Именно этот уровень протокола как правило и реализован в микроконтроллерах. Однако кроме физического уровня нужны еще логические, в которых реализован функционал нужного устройства. Поэтому это должно быть также в микроконтроллере в "железе", либо это загружается в виде прошивки. Соответсвенно Вы должны иметь готовый код, либо писать его самостоятельно.
Если Вы ранее не имели дело с этим, то это будет не просто. Ну и написание драйверов - это тоже серьезная задача.

Существуют более простые варианты, их немало.
К примеру, посмотрите на чипы от FTDI - FT232 или FT2232.
В этих микросхемах реализован один из вариантов, который может Вам подойти. Обратите внимание на один из ее режимов - MPSSE, в котором имеется возможность подключить к ножкам внешние сигналы через GPIO (это обычные порты ввода-вывода). В качастве бонуса производитель раздает на своем сайте уже готовые драйвера и, если я не ошибаюсь, примеры кода.

 Профиль  
                  
 
 Re: Цепь на USB
Сообщение12.12.2013, 23:36 


05/09/12
2587
Радикально простой и дешевый вариант - покупаете USB колесную мышь (они сейчас распродаются во всех магазинах запчастей для компов по 50-100 рублей, никому не нужны), вешаете ваш замыкающий контакт на левую кнопку этой мыши, в софте рисуете кнопку, по нажатию на которую отрабатывает нужное действие, потом подводите курсор на кнопку, меняете мышь на вашу - и все :-)

 Профиль  
                  
 
 Re: Цепь на USB
Сообщение13.12.2013, 09:27 
Аватара пользователя


05/12/13
16
_Ivana в сообщении #799988 писал(а):
Радикально простой и дешевый вариант - покупаете USB колесную мышь


Действительно отличная идея :!:
Железная часть практически исключается, остается только программная.

Кстати, если захочется подключить к компу одновременно две USB мыши (одной управлять курсором, а другой принимать нажатия кнопки), то по умолчанию они будут работать синхронно на один курсор. Если захочется их "расщепить" - придется делать это программно.

 Профиль  
                  
 
 Re: Цепь на USB
Сообщение13.12.2013, 15:22 


02/12/13
6
HardwareDigger в сообщении #800102 писал(а):
_Ivana в сообщении #799988 писал(а):
Радикально простой и дешевый вариант - покупаете USB колесную мышь

Действительно отличная идея :!:
Железная часть практически исключается, остается только программная.


Да, оригинальное решение! =)
Правда, не очень понял, почему именно колесная мышь, ведь для реализации я ее разберу и подсоединю схему с ключом на контакты левой кнопки, хотя идея понятна. Кстати, мыщка ведь может быть и беспроводная? Тогда в ПК будет воткнут лишь адаптер мыши, а схема с ключом будет отдельно.

Только есть такой момент: внешней кнопкой должна останавливаться программа-секундомер на ПК, поэтому необходимо будет исключать возможность случайного сдвига указателя мышки, тут необходимо, чтобы данный сигнал работал напрямую с программой без кнопок. После остановки секундомера, данные с него недо будет переписать в текстовый документ, после чего опять запускать секундомер. Перетыкать мышки очень неудобно.
Также, скорее всего, секундомеров на одном USB (и запущенных экземпляров программ тоже) будет 2, т.е. тогда обе кнопки мыши будут использоваться для остановки соответствующих секундомеров.
Т.е. тут необходима именно реализация в фоновом режиме вне зависимости от положения мышки на экране, чтобы каждая кнопка всегда отвечала за "свою" программу. Это реализуемо?

 Профиль  
                  
 
 Re: Цепь на USB
Сообщение13.12.2013, 20:05 
Аватара пользователя


05/12/13
16
Добрый вечер!

alnight в сообщении #800286 писал(а):
Правда, не очень понял, почему именно колесная мышь

Они почти все с колесиком, поэтому и колесная :D

alnight в сообщении #800286 писал(а):
Кстати, мыщка ведь может быть и беспроводная?

Конечно может.

alnight в сообщении #800286 писал(а):
Т.е. тут необходима именно реализация в фоновом режиме вне зависимости от положения мышки на экране, чтобы каждая кнопка всегда отвечала за "свою" программу. Это реализуемо?

Уверен что реализуемо, хотя я лично этого не делал. Подобные задачи я решаю исключительно "железными" методами :D

Вам придется (в случае одной или двух мышей) научиться перехватывать события нажатия кнопки конкретной мыши. Здесь нужно будет поработать как с драйвером так и со своим собственным приложением.

 Профиль  
                  
 
 Re: Цепь на USB
Сообщение14.12.2013, 00:21 


05/09/12
2587
alnight, вы создали тему с очень частным вопросом, на который вам сразу правильно ответили "нельзя". А дальше начинается развитие темы - как можно. А можно - множеством различных способов, в т.ч. и мышками, и клавиатуру USB-шную воткнуть и хоть 40 замыкающих контактов на кнопки повесить и пусть ваша программа вываливает в окно счетчик каждую секунду, а встречающиеся буквы будут в этом логе определять время замыкания своего контакта... Знаете, как при намотке трансформаторов умельцы считают витки? Покупают копеечный калькулятор, на кнопку "=" вешают замыкающий контакт или геркон, набирают "1+1" и вращают рукоятку - калькулятор на красивом цифровом табло считает витки. Дешево и сердито.
Но это все, конечно, кустарщина. А может она вас и устроит, мы же не знаем. Мы до сих пор не знаем всю задачу - это преподаватель задал такое учебное задание или вы хотите реализовать систему тайминга соревнований на ноуте (потому и COM порта нормального нет)? Каковы требования к точности измерения времени? Что еще требуется от системы? Начинать проектирование надо с архитектуры системы - что возложить на комп, что оставить на внешние контролеры датчиков и т.п. Например, система может быть такой: ноутбук с вставленным ZigBee модулем, который отправляет и принимает информацию от произвольного количества периферийных датчиков (со своими контроллерами и модулями беспроводной связи).

 Профиль  
                  
 
 Re: Цепь на USB
Сообщение14.12.2013, 00:27 


31/03/13
19
Я знаю что ребята для школьного(но настоящего с Друзем :) ) "Что, где, когда" делали девайс, который стопорил время и решал какая команда будет отвечать(быстрее нажали на кнопку). Но это еще под dos делалось..тоже с использованием мыши.

 Профиль  
                  
 
 Re: Цепь на USB
Сообщение15.12.2013, 01:28 


02/12/13
6
_Ivana в сообщении #800508 писал(а):
Мы до сих пор не знаем всю задачу - это преподаватель задал такое учебное задание или вы хотите реализовать систему тайминга соревнований на ноуте (потому и COM порта нормального нет)? Каковы требования к точности измерения времени? Что еще требуется от системы?


Я это делаю для проведения соревнований по скалолазанию на скорость. У судей на столе - ноутбук с секундомером на экране, кнопка остановки секундомера - на вершине трассы. COM порта нет, использование USB предпочтительнее, т.к. этот порт на любом ПК есть, и даже на некоторых планшетах.
Требования к точности времени - тысячные доли точно, хотя лучше запас точности до 0,0001 на всякий случай.
Планирую повесить 2 трассы на один USB.
Вроде все описал =)

 Профиль  
                  
 
 Re: Цепь на USB
Сообщение15.12.2013, 01:48 


05/09/12
2587
Я бы весь тайминг реального времени вынес за юрисдикцию компа. Контроллер со своим таймером от кварца, кнопкой старта, сколько надо датчиков финиша по проводам на входы, сам засекает времена каждого и складывает в мешок. А сверху на эту базу можно наворачивать любой интерфейс: подача команды старта с компа ("выстрел" должен давать сам контроллер по приходу команды), отправка результатов на комп, на внешнее табло и т.п.

 Профиль  
                  
 
 Re: Цепь на USB
Сообщение15.12.2013, 01:54 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли

(Оффтоп)

alnight в сообщении #801162 писал(а):
Требования к точности времени - тысячные доли точно, хотя лучше запас точности до 0,0001 на всякий случай.
Зачем на скалодроме такая точность? Десятых долей хватило бы. С точностью до тысячных измеряют результаты в конькобежном, санном, автомобильном и мотоциклетном спорте. Я уж не говорю о «запасе в одну десятитысячную», что вообще бред.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group