Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LIBUSB32 <-- isochronous EP <-- at90usb162 (4 bytes)
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Gogan
Вобщем стоит задача: Микроконтроллер знает 4 байта, нужно отправить их на комп с наименьшей задержкой (<10ms).
Работающий девайс работает на atmega8 с avrusb софтом (http://www.obdev.at/avrusb/) пример hid-data, пересылаю байты с помощью usb_control_msg. Задержка получается около 50 мс (!!), при том что в секунду успеваю отправить ~250 раз. Где-то эти байты висят в буфере на компе, не понимаю.
Купил at90usb162, спаял плату, научился прошивать его FLIP'ом, скачал софт atmel для этих контроллеров с юсб, вот пытаюсь оформить дескрипторы.. плюс ко всему - хочу чтобы девайс не требовал драйверов, т.е. HID девайс, только вместо interupt EP сделать іsochronous EP. верно? Поправьте, если я что не правильно понимаю
спасибо
galjoen
Цитата(Gogan @ May 21 2009, 15:01) *
плюс ко всему - хочу чтобы девайс не требовал драйверов, т.е. HID девайс, только вместо interupt EP сделать іsochronous EP. верно? Поправьте, если я что не правильно понимаю
спасибо

Насчёт HID - верно, а насчёт іsochronous EP - нет.
А вообще, ваша задача решается без проблемм даже на LowSpeed через InterruptIn EP. Там вроде 10 мс и есть минимальный период опроса. Хотя с LowSpeed не работал.
А прежде чем паять/программировать - хорошо бы описание USB почитать. На usb.org лучше всего... hid1_11.pdf скачать...
Gogan
Почитать описание USB - это верно, только вот лень перечитывать все доки, если мне всего то нужно надыбать пример и переделать под себя. Вобщем, смог наладить отправку через interrupt_in endpoint, при значении bInterval 0x01 получаю, почему-то, 500 пересылок в секунду. Где то читал, что минимальный интервал 2 мс, это верно? Тогда все логично. Взял готовый пример hidio от атмел. Долго ковырялся, пока понял, что для того чтобы получать байты на хосте с libusb32 необходимо сначала выполнять usb_set_configuration и usb_claim_interface.
Система у меня такая: Монитор вращается на оси, энкодер меряет угол поворота, контроллер считывает и по usb передает на комп, на котором прога выводит изображение на экран (opengl) таким образом, что как ты не вращаешь монитор, картинка всегда ориентирована горизонтально. Чтобы измерить задержку - я просто быстро вращал монитор и снимал на вебкамеру, получилось при 30 кадрах/сек картинка запаздывает на 2 кадра - т.е. ~50 мс (30<x<60ms). В живую же эту задержку очень хорошо видно, когда начинаешь быстро вращать монитор, картинка отклоняется на 15-30 градусов в сторону движения.
Скоро проверю какая задержка получается с новым девайсом, сообщу.
Gogan
похоже что задержка засела не в передаче контроллер-комп а в программе вывода изображения.
galjoen
Цитата(Gogan @ May 25 2009, 15:28) *
Вобщем, смог наладить отправку через interrupt_in endpoint, при значении bInterval 0x01 получаю, почему-то, 500 пересылок в секунду. Где то читал, что минимальный интервал 2 мс, это верно?

Неверно, минимальный интервал на Full Speed 1 милисек и есть (при bInterval 0x01). Я так делал - всё соответствует. У вас Interrupt In EP хосту NAK-и шлёт. Один раз NAK, а второй данный. Вы видимо примером пользовались. А примеры они и есть примеры... А хост получив NAK от Interrupt In EP считает что там данных нет и следующий раз через заданный интервал опрашивает (см. описание HID).
Кстати у вас видимо чипсет хороший. Не на всех так. Некоторые наплевали на это дело. На тех, что наплевали - у вас 1000 раз в секунду будет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.