Gogan 0 21 мая, 2009 Опубликовано 21 мая, 2009 · Жалоба Вобщем стоит задача: Микроконтроллер знает 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 0 23 мая, 2009 Опубликовано 23 мая, 2009 · Жалоба плюс ко всему - хочу чтобы девайс не требовал драйверов, т.е. HID девайс, только вместо interupt EP сделать іsochronous EP. верно? Поправьте, если я что не правильно понимаю спасибо Насчёт HID - верно, а насчёт іsochronous EP - нет. А вообще, ваша задача решается без проблемм даже на LowSpeed через InterruptIn EP. Там вроде 10 мс и есть минимальный период опроса. Хотя с LowSpeed не работал. А прежде чем паять/программировать - хорошо бы описание USB почитать. На usb.org лучше всего... hid1_11.pdf скачать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gogan 0 25 мая, 2009 Опубликовано 25 мая, 2009 (изменено) · Жалоба Почитать описание 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 градусов в сторону движения. Скоро проверю какая задержка получается с новым девайсом, сообщу. Изменено 25 мая, 2009 пользователем Gogan Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gogan 0 25 мая, 2009 Опубликовано 25 мая, 2009 · Жалоба похоже что задержка засела не в передаче контроллер-комп а в программе вывода изображения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 25 мая, 2009 Опубликовано 25 мая, 2009 · Жалоба Вобщем, смог наладить отправку через interrupt_in endpoint, при значении bInterval 0x01 получаю, почему-то, 500 пересылок в секунду. Где то читал, что минимальный интервал 2 мс, это верно? Неверно, минимальный интервал на Full Speed 1 милисек и есть (при bInterval 0x01). Я так делал - всё соответствует. У вас Interrupt In EP хосту NAK-и шлёт. Один раз NAK, а второй данный. Вы видимо примером пользовались. А примеры они и есть примеры... А хост получив NAK от Interrupt In EP считает что там данных нет и следующий раз через заданный интервал опрашивает (см. описание HID). Кстати у вас видимо чипсет хороший. Не на всех так. Некоторые наплевали на это дело. На тех, что наплевали - у вас 1000 раз в секунду будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться