Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Программирование USB |
Автор: Helmet 16.6.2009, 16:20 |
Добрый день. Даже не знаю как правильно описать возникшую проблему. Постараюсь =) Необходимо каким-то образом программно отследить подачу напряжения на USB порт. ОС - Windows. Т.е. должна быть программа крутящаяся на винде, которая "слушает" USB порт, и как только на контакты пришло напряжение, произвести некое действие. Подскажите пожалуйста, реально ли это? Какие есть варианты решения? Какие библиотеки могут помочь в этом? Я очень далек от программирования на таком низком уровне и из предположений только есть мысль, что надо установить драйвер USB->COM и там уже что-то ловить. Спасибо заранее. |
Автор: Mazzi 16.6.2009, 16:53 |
Без аппаратной части не обойтись. Просто так подавать напряжение на USB порт нельзя, там должны быть информационные посылки. |
Автор: Helmet 16.6.2009, 18:34 |
Mazzi, спасибо за ответ. А аппаратная часть - это контроллер, да? А есть ли какие-нибудь типовые готовые решения для следующего: самая простейшая кнопка, при нажатии на нее замыкаются 2 контакта. При этом нужно послать какой-нибудь информационный сигнал по USB. |
Автор: mr_smit 16.6.2009, 20:16 | ||||
Мне кажется ты не понимаешь что пишешь. Напряжение на USB разъёме есть всегда, даже при не подключенном устройстве. Возьми вольтметр и замерь, убедись (крайние контакты +/-). Там 5 вольт. ![]() Пиши конкретно что надо.
![]() Тебе http://forum.vingrad.ru/forum/topic-233737.html как минимум. Ну или сразу http://forum.vingrad.ru/index.php?showtopic=233737&view=findpost&p=1896660. |
Автор: Helmet 17.6.2009, 11:36 |
mr_smit, правильно, я же сразу сказал, что не разбираюсь в этом, а перелопачивать гору литературы нет времени :( Задача по сути простая: послать некоторые данные в USB порт, хотя бы 1 байт, чтобы потом программа смогла среагировать на это событие. Желательно обойтись без контроллера. Ведь наверняка можно установить драйвер USB->COM и как то сэмулировать подачу напряжения на одну из ножек порта. Что то я совсем запутался =) |
Автор: Mazzi 17.6.2009, 12:00 | ||
Простейшее решение для тебя это использовать микросхему CP2102, даташит на которую легко найти в интернете. Эта микросхема - преобразователь USB в UART. Затем подсоединяешь свою кнопку на её выводы RXD и TXD. Устанавливаешь драйвера, после чего у тебя появляется ещё один COM-порт. Затем в этот порт кидаешь байт, и если он через кнопку возвращается тебе назад, значит кнопка замкнута, если не возвращается, значит разомкнута. Схема во вложении, только кнопку не нарисовал. Удачи! |
Автор: mr_smit 17.6.2009, 12:22 |
http://www.platan.ru/cgi-bin/qwery_i.pl?code=CP2102 99 руб схемка Mazzi стоит. Можешь ещё тут почитать: http://my-avr.at.ua/publ/1-1-0-27 Но для схемы Mazzi нужно драйвера устанавливать, а можно то же самое (для твоего случая) сделать без драйверов. Микросхема которая прикидывается HID устройством и выполняет те же задачи. Только можно: к любому компу подключил - и сразу работай. http://www.firmwarefactory.com/USB-232.aspx P.S. Правда насчет цены не уверен, может и дороже стоить. |
Автор: cardinal 17.6.2009, 12:39 |
судя по ценам на Digikey USB-232 будет стоить около 250 рублей. Но вещь прикольная! ![]() |
Автор: mr_smit 17.6.2009, 12:54 |
А вообще сейчас почитал про CP2102 классная вещь. Надо будет купить. И никаких тебе MAX232 не надо. Кстати, Helmet, давай колись для чего тебе всё это нужно. |
Автор: cardinal 17.6.2009, 13:07 |
mr_smit, есть еще http://www.ftdichip.com/Products/FT232R.htm... |
Автор: Helmet 17.6.2009, 13:50 |
Ого, загрузили информацией ![]() А хрен знает, на работе сказали "Для проекта нужно большую красную кнопку придумать чтоб жмякнул - и программа наша запустилась" ![]() Mazzi, mr_smit, cardinal, еще раз спасибо!!! Добавлено через 1 минуту и 1 секунду Ребята с кол-вом постов больше 100, поставьте плюсы парням плиз от меня ![]() |
Автор: mr_smit 18.6.2009, 12:11 | ||
Он дороже. ![]() |
Автор: mr_smit 18.6.2009, 12:36 |
А если без всяких драйверов, по принципу "Подключил и ЖМИ!", то тогда: http://radikal.ru/F/s48.radikal.ru/i120/0906/c2/00dffcc0c1ac.png.html Сегодня время если будет, попробую сделать, что то самому интересно стало. ![]() |
Автор: Mazzi 18.6.2009, 13:33 |
Я на ATMege8 не делал устройств для USB, но слышал отзывы, что работает очень плохо, через раз и к томуже обмен очень медленный.( это не относится к текущей теме кнопки ) |
Автор: cardinal 18.6.2009, 14:06 |
Ну нельзя же программно решить эффективно то, что по сути должно решаться аппаратно. Тем более, что у USB 2.0 очень неплохие скорости обмена данными... |
Автор: mr_smit 18.6.2009, 17:05 |
Helmet, тебе повезло что я болею и мне нечем дома заняться. По нажатию кнопки запускается Блокнот. Можно любое другое приложение. Грубо, на картонке, но зато работает. Если применить SMD детали размер получится ооочень маленький.![]() Вот снял видео, всё выглядит/работает. Залил на 2 файлообменника. http://depositfiles.com/files/f3bn4o4ot http://narod.ru/disk/10012316000/hid.rar.html Только кнопку подключил не к РС0 (как изначально нарисовал), а к РВ1. |
Автор: mr_smit 18.6.2009, 17:06 |
Прошивка для контроллера: |
Автор: cardinal 18.6.2009, 18:34 |
mr_smit, опиши пожалуйста в кратце принцип работы этого девайса. |
Автор: mr_smit 18.6.2009, 22:45 |
Подключаем к ПК, устройство определилось как HID, установилось... и т.д. готово к работе. Далее устройство по запросу отсылает 0 или 1 в ПК в зависимости от состояния кнопки (0 или 1 на PINB.1). Потом просто раз в 100 мс (из Delphi) опрашивается контроллер на предмет нажатия кнопки. Уже в Delphi мы делаем то что нам надо, в данном случае открываем блокнот если пришла "единица". Может и криво, но я ставил целью результат. Работает. Доработать, что то улучшить всегда можно. Можно таким же образом из МК температуру слать, данные АЦП и т.д., обрабатывать, строить графики и т.д. P.S. Даже видео никто ни разу не посмотрел, а я старался.... для себя! ![]() |
Автор: Helmet 20.6.2009, 18:07 |
mr_smit, ничего себе, спасибо! Я даже не рассчитывал больше чем на разъяснение. Круто! |
Автор: mr_smit 22.6.2009, 17:24 |
Пришли календарик от лица фирмы ![]() |
Автор: tyum 20.9.2009, 14:28 |
Проститите за может быть глупый вопрос, но я тока учусь![]() Вот я хочу сделать так, чтобы данные с термометра отправлялись в пзу. А потом при подключении сего устройства к компу по ЮЗБ, передавало из пзу данные в какую-н. БД. Вопрос: я могу работать с этим устройством как hid? |
Автор: Mazzi 21.9.2009, 09:46 | ||
Да, можешь. |
Автор: mr_smit 3.10.2009, 19:31 |
Например при подключении к компьютеру он (компьютер) отправляет условную команду что готов принять данные. Контроллер отправляет их. И опять же условная команда завершения передачи. И в программе хоста сообщение типа "данные получены, устройство можно отключить". P.S. Хост - это компьютер |
Автор: AlexART 2.11.2010, 18:48 |
mr_smit, Посмотрел твой код firmware - подскажи, пожалуйста, как передавать компьютеру число, а не бит. Или можно просто один за другим передавать биты, а в хосте собирать из них число? |
Автор: mr_smit 3.11.2010, 10:15 |
Да. Ну придумай протокол ![]() Либо вот пример: USB HID термометр http://www.radiokot.ru/circuit/digital/pcmod/16/ в конце статьи есть исходник и для МК и для Delphi. P.S. Байт это собственно и есть число ![]() Я тут себе http://radiokot.ru/forum/viewtopic.php?f=20&t=25898&start=0 делал... посмотри, может будет интересно как с 2-х байтовыми числами работать |
Автор: AlexART 19.11.2010, 21:57 |
ОК, спасибо) Вроде, разобрался. Пишу свой вариант HID-термометра. Когда доделаю, пришлю - вдруг кому-то понадобится... |
Автор: JackA 29.11.2010, 00:45 | ||
А взять FT232 - и никаких тебе CP2102 не надо... |
Автор: xvr 29.11.2010, 15:01 |
Хрен редьки не слаще - практически идентичные чипы ![]() |
Автор: darksilence 29.12.2010, 18:55 |
Вопрос можно решить подключением кнопки в микрофонному входу звуковой карты. по схеме с подтяжкой на ноль. при нажатии на кнопку идет замыкание на +U. Звуковая карта пропускает только переменную составляющую. Пример работы в Дельфе есть с микрофонным входом (типа осциллографа) можно замутить. будет дешевле всего. Хотя я больше поддерживаю проект USB-HID. |
Автор: KoTeKoT 22.3.2011, 19:43 | ||
У меня тут вопрос образовался... извините если не туда пишу... вот есть:
а как сделать обратно? Мол получили допустим 6, значит это 01100000, ну и желательно что б это "01100000"куданить в переменную записывалось или в Edit.Text выводилось или CheckBox'ы заполнялись... |
Автор: UniBomb 23.3.2011, 10:31 | ||||||||
Наоборот, это будет равно 00000110
И в чём проблема?
Хотя наверное можно и без IntToStr, не знаю как там в делфях с неявным преобразованием.
|
Автор: KoTeKoT 23.3.2011, 18:45 | ||||||||
спасибо за ответ
прошу прощения, именно так и будет... не доглядел
так, да не так... IntToStr(6) в итоге в Edit.Text будет "6", а нужно именно "00000110", а без преобразования IntToStr ошибки вывалятся... С дальнейшим кодом (собственно с CheckBox'ами наиболее подходящий вариант для решения моей задачи)
разбираюсь, попозжей отпишусь подошло иль нет ;) |
Автор: UniBomb 23.3.2011, 19:24 |
В делфи есть куча преобразовательных функций имеющий похожий вид. Например IntToStr, IntToHex, IntToBin, и наоборот. Вам будет полезно изучить их, найдя всю необходимую информацию в хелпе. Для преобразования в вид "00000110" надо воспользоваться функцией IntToBin. |
Автор: KoTeKoT 24.3.2011, 01:35 | ||
Спасибо, за подсказку, но поскольку в Delphi отсутствует функция IntToBin , нашел ее реализацию. Мож кому понадобится:
P.S. Вопрос снят |
Автор: UniBomb 24.3.2011, 13:57 |
Странно. В билдере мне иногда приходилось использовать эту функцию. А ведь в билдере почти всё из делфей и перекочёвывает ![]() |
Автор: alexzzzz2 26.3.2016, 08:47 |
файл исходников пишет вирус, еще вопрос, кто делал hid примеры еще? стучите в скайп solarstation2 так как быстрее выйдет |