Страница 1 из 1
USB ИК-приемник
Добавлено: Пн апр 02, 2012 14:34:09
Gust2002
Добрый день!
Хочу собрать ИК-приемник для ноута. В радиотехнике слабоват (силен в программировании), есть пара вопросов по факту анализа нескольких схем таких устройств:
1) Для чего ставят кварц (встречался на 12 МГц)? Можно ли обойтись без него?
2) Пока не смотрел исходники прошивок, но насколько мощным должен быть контроллер, чтобы обработать нажатие нескольких кнопок на пульте (мне нужно где-то 5 разных команд)? Подойдет ли для этих целей ATTiny13A?
Re: USB ИК-приемник
Добавлено: Пн апр 02, 2012 14:48:11
Engineer_Keen
Что будет делать контроллер? Принимать ИК и передавать по USB? Если да, то:
Gust2002 писал(а):1) Для чего ставят кварц (встречался на 12 МГц)? Можно ли обойтись без него?
Кварц для стабильности, кроме того, в случае с АВР, для работы на более высоких частотах, т.к. встроенного RC-генератора на 8 (или 9.6) МГц для протокола USB не хватит.
Gust2002 писал(а):2) Пока не смотрел исходники прошивок, но насколько мощным должен быть контроллер, чтобы обработать нажатие нескольких кнопок на пульте (мне нужно где-то 5 разных команд)? Подойдет ли для этих целей ATTiny13A?
Для обработки клавиш никакой мощности не нужно, это сделает любой контроллер, другое дело USB, тут либо контроллер со встроенным USB, либо например использование библиотек типа V-USB, причем последняя просто не влезет в тини13, т.к. ей нужно 2К флеша минимум (+обработка ваших кнопок)
Re: USB ИК-приемник
Добавлено: Пн апр 02, 2012 15:56:25
Gust2002
Engineer_Keen писал(а):Что будет делать контроллер? Принимать ИК и передавать по USB? Если да, то:
Именно это он и будет делать.
Engineer_Keen писал(а):Кварц для стабильности, кроме того, в случае с АВР, для работы на более высоких частотах, т.к. встроенного RC-генератора на 8 (или 9.6) МГц для протокола USB не хватит.
Протокол USB (если верить Агурову и его книге "Практика программирования, 2006") имеет несколько режимов передачи данных. При этом USB-устройства опрашиваются хостом, частота хоста может меняться. Для устройств типа мышки используется передача по прерываниям с частотой 10-255 мс. Вы про это написали "..на 8 (или 9.6) МГц для протокола USB не хватит"? Учитывая небольшой объем (не больше байта) передаваемых данных можно использовать другие типы передачи данных (изохронный с частотой опроса 1мс)? Или все упирается в наличие готовых библиотек?
Re: USB ИК-приемник
Добавлено: Пн апр 02, 2012 16:16:48
Engineer_Keen
Даже при передаче одного байта данных, кроме него посылается куча дополнительной информации, всю ее надо успеть обрабатывать и извлекать полезные данные, это все-таки не ком-порт. Если у вас получится написать свой обработчик, не используя стандартные библиотеки, может быть и можно будет впихнуть в тини13. Я правда в этом сомневаюсь...
Re: USB ИК-приемник
Добавлено: Вт апр 03, 2012 12:39:14
Gust2002
Почитал по теме, походу "ноги растут"
отсюда, причем почему он выбрал именно 12 MHz так и не ясно. Потом это плавно перешло в V-USB. Поправьте меня, если я не прав. У USB есть три скорости передачи данных: 1.5, 12 и 450 Mb/s. V-USB поддерживает low-speed устройства, т.е. скорость передачи данных 1.5 MHz Берем макс. частоту чипа 9 Mhz, так мы получаем 6 тактов ядра на 1 принятый бит. Вроде этого должно хватить на запись бита в память (скорость выполнения команд еще не изучал). Анализ данных можно проводить после приема данных, а в момент анализа данные можно не принимать. Объем передаваемых данных должен уложиться в 20-30 байт (бегло оценил исходя из описания каждой области пакета). По идее должно хватить всего 2 вида пакетов: токен IN от USB хоста и ответ от контроллера. Объем ОЗУ критичен только при приеме, т.к. ответ можно закодировать в области кода.
Я не собираюсь писать библиотеку для поддержки всего протокола, мне нужна реализация только одной конкретной задачи. Буду рад за конструктивную критику. Мотивация следующая: в моем случае трудно доставать комплектующие, т.к. у нас всего один нормальный магазин, но там купить можно не все. Остальное приходится заказывать в инете, а тут или единичный экземпляр заказывать в чипдипе или за те же деньги (плюс стоимость доставки) покупать что-то еще в нагрузку, т.к. есть ограничения на сумму минимального заказа, и потом еще сидеть ждать 3-4 недели.
Re: USB ИК-приемник
Добавлено: Вт апр 03, 2012 12:54:19
Goodefine
Можете взглянуть еще на
мой вариант
...причем почему он выбрал именно 12 MHz так и не ясно...
Выбор 12 МГц обусловлен, насколько помню, тем, что из нее удобно получаются тайминги (жесткие) физических сигналов USB порта.
Re: USB ИК-приемник
Добавлено: Вт апр 03, 2012 12:58:15
Engineer_Keen
Gust2002 писал(а):Берем макс. частоту чипа 9 Mhz, так мы получаем 6 тактов ядра на 1 принятый бит. Вроде этого должно хватить на запись бита в память (скорость выполнения команд еще не изучал)
Обработка данных в регистре 1 такт, запись/чтение в/из памяти в регистр - 2 такта.
По USB не подскажу, только если по ассемблеру...
Re: USB ИК-приемник
Добавлено: Вт апр 03, 2012 16:07:34
Gust2002
Goodefine писал(а):Можете взглянуть еще на
мой вариант
В статье написано, что драйвер есть только под WinXP 32 bit. Однако
здесь и
здесь пишут, что есть поддержка всех ОС начиная с XP (включая x64) с версии 1.2.0.0, которая вышла летом 2010. Статья старая или действительно работает только под x32? Спрашиваю, потому что собираюсь подключать к win 7 x64.
Re: USB ИК-приемник
Добавлено: Вт апр 03, 2012 16:35:40
Goodefine
Microsoft Windows operating systems (Windows 2000, Windows XP, Windows Vista and Windows 7; Windows 98 SE and Windows ME for versions up to 0.1.12.2 )
Если Вы обратите внимание, в статье версия драйвера 0.1.12.1. На тот момент, когда прикручивался вариант с HID, это был последняя версия. Я специально заострил на этом внимание, поскольку на x64 ОС наблюдались проблемы. Похоже доработали. Если авторы не изменили интерфейс библиотеки, работать должно и с новой.
Есть еще вариант с CDC классом, но под Win7 требуется доработать серверное приложение на ПК - само железо работает, в виртуальный порт приходит все верно, но не корректно обрабатываются данные самой программой. Как Поставлю Win7 на второй винт, погляжу почему.
Re: USB ИК-приемник
Добавлено: Вт апр 03, 2012 17:48:31
Kavka
Gust2002
Gust2002 писал(а):У USB есть три скорости передачи данных: 1.5, 12 и 450 Mb/s.
Во первых, последняя цифра 480. И если быть точными, то "мега
бит в секунду".
Gust2002 писал(а):Берем макс. частоту чипа 9 Mhz, так мы получаем 6 тактов ядра на 1 принятый бит.
Во вторых, сигнальчики "бегающие" по USB не совсем простые, поэтому вам не мешало бы ознакомиться с
существующими наработками, чтобы не изобретать велосипеда (на 9-ти мегагерцах

).
Удачи!
Re: USB ИК-приемник
Добавлено: Чт апр 05, 2012 10:55:28
Gust2002
Спасибо, а есть что-нибудь про encoding?
Re: USB ИК-приемник
Добавлено: Чт апр 05, 2012 11:14:33
Goodefine
encoding чего?
Re: USB ИК-приемник
Добавлено: Чт апр 05, 2012 12:01:29
Gust2002
В статье по ссылке от Kavka описывается алгоритм приема данных. Мне еще интересно как отправлять. В описаниях про USB написано, что сигнал идет по двум контактам с противоположными напряжениями. Для меня пока не понятно, как выдавать на вывод контроллера отрицательное напряжение, чтобы выполнить условие. Поверхностно читал про UART, но он вроде медленный для USB.
Re: USB ИК-приемник
Добавлено: Чт апр 05, 2012 12:24:09
Engineer_Keen
Gust2002 писал(а):сигнал идет по двум контактам с противоположными напряжениями. Для меня пока не понятно, как выдавать на вывод контроллера отрицательное напряжение, чтобы выполнить условие.
Противоположные это не + и -, это 1 и 0.
Gust2002 писал(а):Поверхностно читал про UART, но он вроде медленный для USB.
Это вообще совершенно разные интерфейсы, и по скорости и по физическому принципу и с точки зрения программы.
Re: USB ИК-приемник
Добавлено: Чт апр 05, 2012 12:27:11
Goodefine
Gust2002 писал(а): Для меня пока не понятно, как выдавать на вывод контроллера отрицательное напряжение, чтобы выполнить условие...
Туда и не надо выдавать отрицательное напряжение. Когда на одной линии лог. 1 - на другой лог. 0, и наоборот. Непонятно что вы хотите изобрести, с нуля подымать драйвер, так это на десятки месяцев работа. А если взять существующие, нафига тогда заморачиваться физическим интерфейсом..
Re: USB ИК-приемник
Добавлено: Чт апр 05, 2012 13:23:32
Kavka
Gust2002 писал(а):Мне еще интересно как отправлять. В описаниях про USB написано, что сигнал идет по двум контактам с противоположными напряжениями. Для меня пока не понятно, как выдавать на вывод контроллера отрицательное напряжение, чтобы выполнить условие.
Вы схемы типовые смотрели для V-USB? Вы видели там где-нибудь отрицательное напряжение? Просто внимательное "глядение" на схему, обычно, снимает кучу вопросов.

Если вы осилили страничку по той ссылочке, о каком кодировании вы говорите? Там есть все нужные слова (для поиска). А по ссылочкам можно найти исходники и документацию.
Ещё раз повторюсь - ознакомьтесь хорошенько с существующими наработками.
Re: USB ИК-приемник
Добавлено: Чт апр 05, 2012 14:22:17
Gust2002
Да, наверно с чем-то перепутал (по крайней мере не смог найти источник). Где-то читал, что передача идет по двум проводам, на одном +2,5В, на другом - 2,5В, в итоге достигается разность потенциалов в 5В. Про USB все верно: при передаче подается напряжение на один из двух пинов.
Re: USB ИК-приемник
Добавлено: Пт апр 06, 2012 23:07:25
Dnepr_1186
делал поэтой схеме
http://ra4nal.qrz.ru/irkbd.shtml работает отлично, не требует установки программ
Re: USB ИК-приемник
Добавлено: Ср апр 11, 2012 09:31:33
Gust2002
Спасибо, как раз было интересно увидеть решение на ассемблере, т.к. в этом случая я лучше понимаю, что происходит.
Немного поигрался со светодиодами. Теперь буду изучать существующие решения. Пока есть один вопрос о том как можно протестировать создаваемую прошивку в каком-нибудь эмуляторе. Я сейчас использую AVR Studio. С точки зрения процесса отладки кода вопросов нет. Не понятно как можно проэмулировать отправку сигнала контроллеру извне, чтобы это по возможности не затронуло код самой прошивки.
Re: USB ИК-приемник
Добавлено: Ср апр 11, 2012 09:40:01
Engineer_Keen
Proteus помимо всего прочего эмулирует работу контроллеров AVR. Но USB эмулируется только встроенные в МК.