USB управление девайсом

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
mighty
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пт янв 14, 2011 22:32:24

USB управление девайсом

Сообщение mighty »

Здравствуйте друзья-форумчане!

Не так давно мне понадобилось реализовать совершенно нетипичную для меня задачку: подключить самосборный внешний девайс к компу...но по-порядку.
Игрушка-девайс представляет из себя веб камеру, двигающуюся на сервоприводах. По задумке, она должна двигаться по некоторому алгоритму, причём иметь возможность управления ей:
1. с компа
2. с какого-то кнопочного интерфеса (но это задача поздняя)
3. работать по заданному шаблону, не будучи подключённой к компу.

Решить эту задачу одним махом не получилось, поэтому решил её разбить: для начала мне понадобилось сделать управление сервами с компа. Однако, сам я программист и в микросхемах по меньшей мере слабоват, а получить квалифицированную помощь просто не от кого.

Подумав, пришёл к выводу, что механизм должен работать примерно по следующей схеме: комп <-> управляющий контроллер (например ATMega168*) <-> девайс
Полагаю, сопрячь юсб порт прямо с контроллером не получится, понадобится некоторая оснастка. Почитав информацию, пришёл к выводу, что реально подойдёт только 2 варианта: rs232 и usb/
rs232 интерфейса на моём системнике не оказалось, а подключённый переходник юсб-ком почему-то давал на выводных ногах микросхемы max232 0.3-1.5 вольта, так что от такого решения пришлось отказаться (кстати, если кто-то знает почему так получилось - буду признателен за ликбез!). Таким образом осталось использовать только USB.

Если я всё правильно понял, то подключить usb к контроллеру можно только через некоторый промежуточный узел. Например, ft232bl.

Иными словами, задача, в процессе реализации, немного изменилась: понадобилось сделать не просто управляющий контроллер, а программатор+управляющий контроллер, причём, чтобы через один и тот же интерфейс можно было бы и программировать контроллер, и посылать ему некоторые управляющие сигналы. А отключив usb - предоставить возможность контроллеру управлять девайсом на своё усмотрение.

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

1. ft232bl имеет довольно много выводов, притом что, если не ошибаюсь, имеет 1 канал на приём, 1 на передачу в дуплексном режиме. Каким образом приходящие данные "усваиваются" этой микросхемой и как ими воспользоваться? Нужны ли какие-то специальные обвязки для этой микросхемы?*
2. Насколько я понимаю, микроконтроллеры AVR довольно легко прошиваются. Но не понимаю - как МК понимает, что в него сейчас поступают данные прошивки, а сейчас некий управляющий сигнал? Или для программирования МК просто используются разные ножки?
3. Рассматривая схемы - часто видел в обвязке МК кварц. Для чего он используется? Нужен ли он? Как он выбирается и что будет, если его не использовать?
4. Можно ли сделать управляющую схему таким образом, чтобы "часть" программатора могла бы использоваться отдельно, скажем, для прошивки иных МК? Предполагается, что "управляющий" сегмент, возможно, придётся заменить, так вот, идея менять его так, чтобы программатор мог оставаться общим.
5. Возможно у Вас есть советы относительно того, как всё это нужно реализовывать. Пожалуйста, поделитесь ими со мной!!!

PS. Дорогие форумчане! Я прекрасно понимаю, что многие вопросы тут, вероятно, уже обсуждались, а иные - так вам и вовсе покажутся наивными. Прошу, проявите терпимость: то, что для вас, как для профессионалов, интуитивно понятно - для меня совершенно неочевидно. И даже наткнувшись на нужную мне информацию - рискую пропустить её, если мне не скажут что мне нужна именно она только потому, что не пойму этого.

Заранее всем спасибо :-)

*ATMega168* выбран произвольно - такой же используется в Arduino, однако использование Arduino мне не подходит.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: USB управление девайсом

Сообщение Мурик »

mighty писал(а):(например ATMega168*) <-> девайс
Полагаю, сопрячь юсб порт прямо с контроллером не получится
Ошибаетесь!
Вот пример на AVR'е (ATmega8), непосредственно подключенном к USB.
mighty
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пт янв 14, 2011 22:32:24

Re: USB управление девайсом

Сообщение mighty »

Мурик писал(а):
mighty писал(а):(например ATMega168*) <-> девайс
Полагаю, сопрячь юсб порт прямо с контроллером не получится
Ошибаетесь!
Вот пример на AVR'е (ATmega8), непосредственно подключенном к USB.


Тогда рождается закономерный вопрос. Вернее два:
1. Можно ли таким подключением прошить МК?
2. Что теряется при таком подключении?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: USB управление девайсом

Сообщение Мурик »

mighty писал(а):1. Можно ли таким подключением прошить МК?
Можно, но нужно будет писать свой загрузчик кода в контроллер.

mighty писал(а):2. Что теряется при таком подключении?
Программная расшифровка USB, требует очень много ресурсов контроллера (прежде всего, процессорного времени) и накладывает жесткие ограничения на временные интервалы главного цикла программы и кода прерываний.

Если нужно чтобы контроллер выполнял ресурсоемкие задачи и поддерживал связь с компом по USB, нужно использовать контроллер с аппаратным модулем USB, скажем, PIC18F4550.
mighty
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пт янв 14, 2011 22:32:24

Re: USB управление девайсом

Сообщение mighty »

Мурик писал(а):
mighty писал(а):1. Можно ли таким подключением прошить МК?
Можно, но нужно будет писать свой загрузчик кода в контроллер.

mighty писал(а):2. Что теряется при таком подключении?
Программная расшифровка USB, требует очень много ресурсов контроллера (прежде всего, процессорного времени) и накладывает жесткие ограничения на временные интервалы главного цикла программы и кода прерываний.

Если нужно чтобы контроллер выполнял ресурсоемкие задачи и поддерживал связь с компом по USB, нужно использовать контроллер с аппаратным модулем USB, скажем, PIC18F4550.


т.е. если я правильно понял, приём данных лучше возложить на отдельную микросхему. а в каком виде тогда процессор будет получать данные от микросхемы? Я вот сейчас как раз смотрю даташит микросхемы FT232BL - так там получается примерно то же самое на выходе. Или я что-то не правильно понял? Что делает эта микросхема с сигналом от USB? Как она его обрабатывает и во что?
divinus
Родился
Сообщения: 2
Зарегистрирован: Сб янв 15, 2011 12:09:43

Re: USB управление девайсом

Сообщение divinus »

Лучше использовать ft232rl, для нее почти не нужно обвязки. При подключении к компу появится виртуальный ком-порт, посылаете/принимаете данные, они появляются на выводах rx, tx микросхемы. Эти выводы можно подключить к микроконтроллеру и обмениваться данными через uart.
mighty
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пт янв 14, 2011 22:32:24

Re: USB управление девайсом

Сообщение mighty »

divinus писал(а):Лучше использовать ft232rl, для нее почти не нужно обвязки. При подключении к компу появится виртуальный ком-порт, посылаете/принимаете данные, они появляются на выводах rx, tx микросхемы. Эти выводы можно подключить к микроконтроллеру и обмениваться данными через uart.


ft232rl не нашёл в продаже :-(
хм, ну так вопрос остался открыт: предположим отправляем с порта (эмуляции ком-порта) некий набор данных. Скажем, 100 байт. Данные приходят на микросхему ft232rl - что с ними там такое происходит, что они передаются всё через те же recieve и transmit каналы МК и МК, в свою очередь, обрабатывает их лучше, нежели если бы они пришли напрямую с USB?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: USB управление девайсом

Сообщение Мурик »

mighty писал(а):хм, ну так вопрос остался открыт: предположим отправляем с порта (эмуляции ком-порта) некий набор данных. Скажем, 100 байт. Данные приходят на микросхему ft232rl - что с ними там такое происходит, что они передаются всё через те же recieve и transmit каналы МК и МК, в свою очередь, обрабатывает их лучше, нежели если бы они пришли напрямую с USB?
Если честно, не понял сути вопроса!

Если данные идут через ft232, то весь обмен по USB возлагается на эту микруху, а если контроллер непоследственно подключен к USB, то обработка USB запросов, возлагается на контроллер. В последнем случае, можно создать любое USB устройство, будть то класс CDC, HID или другой произвольный, а в случае ft232, имеем только виртуальный COM порт и ничего с этим поделать нельзя, т. к. за нас все рашил производитель этой микрухи!
mighty
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пт янв 14, 2011 22:32:24

Re: USB управление девайсом

Сообщение mighty »

Мурик писал(а):Если данные идут через ft232, то весь обмен по USB возлагается на эту микруху, а если контроллер непоследственно подключен к USB, то обработка USB запросов, возлагается на контроллер. В последнем случае, можно создать любое USB устройство, будть то класс CDC, HID или другой произвольный, а в случае ft232, имеем только виртуальный COM порт и ничего с этим поделать нельзя, т. к. за нас все рашил производитель этой микрухи!



Т.е. микросхема, ft232, если я правильно понял - как раз и обеспечивает возможность отправки в порт данных?
Просто я как вижу алгоритм
1. ПО отправляет в порт данные
2. Данные "проходят по кабелю" и попадают в TXD микросхемы
3. Затем с ними происходит какая-то обработка
4. Данные, каким-то образом обработанные, выходят из микросхемы с RXD
5. Данные попадают на TXD МК

Я всё никак не могу понять - что изменится в этом алгоритме, если данные будут идти непосредственно с порта сразу в МК.
- Или же в пункте 3 алгоритма с данными происходит какая-то обработка, делающая данные подходящими для принятия их МК?
- Или же микросхема используется для того, чтобы создать эту самую эмуляцию com-порта и без неё сделать обмен по UART не получится?
- Или же микросхема обрабатывает приходящие таким образом, чтобы разложить два сигнала TXD и RXD USB порта на стандартные комовские (типа DTR, RTS, RI и прочее)?
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: USB управление девайсом

Сообщение Satyr »

mighty писал(а):Если я всё правильно понял, то подключить usb к контроллеру можно только через некоторый промежуточный узел. Например, ft232bl.

Неправильно. берешь at90usb82 или at90usb162 и обходишься одним только контроллером.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: USB управление девайсом

Сообщение Мурик »

mighty писал(а):Т.е. микросхема, ft232, если я правильно понял - как раз и обеспечивает возможность отправки в порт данных?
Она всего лишь выполняет роль преобразователя USB <--> COM.
Если в компе есть COM порт, то можно не использовать эту микросхему, а контроллер непосредственно подключать с COM порту.

mighty писал(а):Я всё никак не могу понять - что изменится в этом алгоритме, если данные будут идти непосредственно с порта сразу в МК.
В этом случае, контроллер обязан сам поддерживать протокол интерфейса USB. Почитайте на досуге. http://microsin.ru/content/view/1107/44/

mighty писал(а):- Или же в пункте 3 алгоритма с данными происходит какая-то обработка, делающая данные подходящими для принятия их МК?
Ну как сказать, обработка конечно происходит - если объяснять на пальцах, данные преобразуются из формата USB порта, в формат COM порта.

mighty писал(а):- Или же микросхема используется для того, чтобы создать эту самую эмуляцию com-порта и без неё сделать обмен по UART не получится?
Получится, но для этого нужно либо подключить контроллер к COM порту компа, либо к USB, но в этом случае, контроллер должен сам эмулировать COM порт, т. е. его программа должна реализовывать CDC клас USB устройства.
Но с другой стороны, в этом случае, можно реализовать другой класс скажем HID http://www.radiokot.ru/forum/viewtopic.php?f=20&t=15405

mighty писал(а):- Или же микросхема обрабатывает приходящие таким образом, чтобы разложить два сигнала TXD и RXD USB порта на стандартные комовские (типа DTR, RTS, RI и прочее)?
Да, именно это и делает.

Неправильно. берешь at90usb82 или at90usb162 и обходишься одним только контроллером
Если задача стоит в управлении сервоприводами, то думаю хватит любой меги с программной поддержкой USB.
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: USB управление девайсом

Сообщение Satyr »

mighty писал(а):1. Можно ли таким подключением прошить МК?

Да, на них с завода влит USB DFU Loader. Шьются атмеловской утилитой по USB без какого либо программатора.
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: USB управление девайсом

Сообщение Satyr »

Мурик писал(а):
Неправильно. берешь at90usb82 или at90usb162 и обходишься одним только контроллером
Если задача стоит в управлении сервоприводами, то думаю хватит любой меги с программной поддержкой USB.

Чего ради ? Чисто чтобы геморой поиметь ? Или 40р съэкономить ? -)))
Если чо, делал девайса 4 с 'программной' V-USB и чтук 6-7 с человеческим USB. Нет никакого смысла в кроилове с программным USB, контроллеры со встроенным USB давно уже копейки стоят.
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: USB управление девайсом

Сообщение Satyr »

Мурик писал(а):Программная расшифровка USB, требует очень много ресурсов контроллера (прежде всего, процессорного времени) и накладывает жесткие ограничения на временные интервалы главного цикла программы и кода прерываний.

Скажем на чистоту - ЛЮБОЕ прерывание во время USB обмена автоматически значит потерю пакета.

Далее, программно реализуется ТОЛЬКО low-speed устройство USB 1.1 с 1.5 мегабита в теории. По честному, балк, интерапт эндпойнты в low-speed девайсе запрещены (хотя, как правило, под виндами и линухом работают). Если делать в хоть каком то соответствии со стандартом, то делать можно только HID девайсы, пользующие только контрол эндпойнт.
Т.е. жостики, мыши, клавиатуры или нечто абстрактное с макс. скоростью обмена 64 кб/c.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: USB управление девайсом

Сообщение Мурик »

Satyr писал(а):Скажем на чистоту - ЛЮБОЕ прерывание во время USB обмена автоматически значит потерю пакета.
Комп его заново пошлет.
Я ради экспериментов, запрещал все прерывания длительностью до секунды и ничего, устройство не отваливалось и продолжало исправно функционировать.

Satyr писал(а):или нечто абстрактное с макс. скоростью обмена 64 кб/c
Для управления сервоприводом, даже 20 байт в секунду, больше чем достаточно.
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: USB управление девайсом

Сообщение Satyr »

короче, самая дешевая атмега48 стоит 55р и треть флеша и памяти уйдут на косой usb
с нормальным USB at90usb82 стоит 115р и еще и флеша имеет вдвое больше и usb там кушает практически ноль ресурсов.

чего ради кроилово ?
divinus
Родился
Сообщения: 2
Зарегистрирован: Сб янв 15, 2011 12:09:43

Re: USB управление девайсом

Сообщение divinus »

mighty писал(а):ft232rl не нашёл в продаже :-(

Не реклама, это лучшие варианты, что нашел в сети:
chip-nn.ru - 155 р. + доставка 175 р.
icdarom.ru - 131 р. + доставка 300 р.

Еще можно использовать CP2102, в том же чип-нн стоит всего 75 рублей, но у нее корпус QFN-28.
mighty
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пт янв 14, 2011 22:32:24

Re: USB управление девайсом

Сообщение mighty »

Satyr писал(а):Чего ради ? Чисто чтобы геморой поиметь ? Или 40р съэкономить ? -)))
Если чо, делал девайса 4 с 'программной' V-USB и чтук 6-7 с человеческим USB. Нет никакого смысла в кроилове с программным USB, контроллеры со встроенным USB давно уже копейки стоят.


Satyr писал(а):короче, самая дешевая атмега48 стоит 55р и треть флеша и памяти уйдут на косой usb
с нормальным USB at90usb82 стоит 115р и еще и флеша имеет вдвое больше и usb там кушает практически ноль ресурсов.

чего ради кроилово ?


К сожалению экономия составит существенно больше 40 рублей. at90usb162 стоит почти 600 рублей, в то время как Mega168 - лишь 190 + 300р на ft232. А надо всё решить максимально дёшево :-(
PS Ну это я то, что в Питере нашёл. Может просто плохо искал.
А где Вы закупаетесь?

(!!) Вот только тезис про память не очень понял: разве в МК нет встроенной памяти?

mighty писал(а):
- Или же микросхема обрабатывает приходящие таким образом, чтобы разложить два сигнала TXD и RXD USB порта на стандартные комовские (типа DTR, RTS, RI и прочее)?
Да, именно это и делает.

Цитата:
Неправильно. берешь at90usb82 или at90usb162 и обходишься одним только контроллером

Если задача стоит в управлении сервоприводами, то думаю хватит любой меги с программной поддержкой USB.


Satyr писал(а):
или нечто абстрактное с макс. скоростью обмена 64 кб/c

Для управления сервоприводом, даже 20 байт в секунду, больше чем достаточно.


Теперь всё встало на своим места - это я относительно перевода USB в rs232 :-) Спасибо.

А вот насчёт потери скорости при управлении сервоприводами - по правде говоря скорость я терять бы не хотел. Это в самом начале используются только сервы, но вполне вероятно, что впоследствии появятся более требовательные к скорости обмена данными интерфейсы, и хотелось бы, чтобы всё работало и в таком случае...

divinus писал(а):
mighty писал(а):ft232rl не нашёл в продаже :-(

Не реклама, это лучшие варианты, что нашел в сети:
chip-nn.ru - 155 р. + доставка 175 р.
icdarom.ru - 131 р. + доставка 300 р.

Еще можно использовать CP2102, в том же чип-нн стоит всего 75 рублей, но у нее корпус QFN-28.

Уж больно долго ждать придётся с доставкой. В Питере только в Микронике более-менее приемлемые цены, но там не всё есть. Всё есть в Чип и Дип, но там просто грабительские расценки :-(
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: USB управление девайсом

Сообщение Мурик »

mighty писал(а):А вот насчёт потери скорости при управлении сервоприводами - по правде говоря скорость я терять бы не хотел. Это в самом начале используются только сервы, но вполне вероятно, что впоследствии появятся более требовательные к скорости обмена данными интерфейсы, и хотелось бы, чтобы всё работало и в таком случае...
Ну тогда сразу используйте что-то типа ARM 9 :))) чтобы потом не пришлось переделывать. :idea:
mighty
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пт янв 14, 2011 22:32:24

Re: USB управление девайсом

Сообщение mighty »

Мурик писал(а):
mighty писал(а):А вот насчёт потери скорости при управлении сервоприводами - по правде говоря скорость я терять бы не хотел. Это в самом начале используются только сервы, но вполне вероятно, что впоследствии появятся более требовательные к скорости обмена данными интерфейсы, и хотелось бы, чтобы всё работало и в таком случае...
Ну тогда сразу используйте что-то типа ARM 9 :))) чтобы потом не пришлось переделывать. :idea:


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

Вернуться в «Интеграция с ПК»