Модераторы: PILOT, ManiaK, Mazzi

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите с проектом под Delphi дл работы с HID USB, поиск простенького проекта 
:(
    Опции темы
CROC
Дата 26.10.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 16.10.2005
Где: Perm

Репутация: нет
Всего: нет



Ищу простенький проект под Delphi для работы с HID USB устройствами..
PM MAIL ICQ   Вверх
Mazzi
Дата 27.10.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Тебе поможет книга Агурова "Практика программирования USB".


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
CROC
Дата 27.10.2008, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 16.10.2005
Где: Perm

Репутация: нет
Всего: нет



Цитата(Mazzi @ 27.10.2008,  09:54)
Тебе поможет книга Агурова "Практика программирования USB".

вот как раз я не могу запустить проек из этой книги smile
PM MAIL ICQ   Вверх
Mazzi
Дата 28.10.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Поконкретней пожалуйста, что именно не получается?


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
LessNik
Дата 5.11.2008, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 20.2.2006

Репутация: 1
Всего: 1



Цитата(CROC @  26.10.2008,  20:57 Найти цитируемый пост)
щу простенький проект под Delphi для работы с HID USB устройствами..


Ничего искать не надо, HID устройства так и задуманы, чтоб подключил к компу и без установки драйверов работаешь (клавиатура, мышь и т.д). 

Объясни по конкретней, что нужно.

Программу ты должен написать для устройства (для микроконтроллера с USB), которое будешь подключать к компу. Для этого Delphi не годится. Используй IAR, Кеил и т.п. Проект в Агурове как раз для микроконтроллера и, если память не изменяет, 8051
PM MAIL   Вверх
Mazzi
Дата 6.11.2008, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Цитата(LessNik @ 5.11.2008,  19:41)
Цитата(CROC @  26.10.2008,  20:57 Найти цитируемый пост)
щу простенький проект под Delphi для работы с HID USB устройствами..


Ничего искать не надо, HID устройства так и задуманы, чтоб подключил к компу и без установки драйверов работаешь (клавиатура, мышь и т.д). 

Объясни по конкретней, что нужно.

Программу ты должен написать для устройства (для микроконтроллера с USB), которое будешь подключать к компу. Для этого Delphi не годится. Используй IAR, Кеил и т.п. Проект в Агурове как раз для микроконтроллера и, если память не изменяет, 8051

Если точнее, то at89c5131.

Ну и как операционка догадается, что нужно делать с устройством если для него нет никаких программ?


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
LessNik
Дата 7.11.2008, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 20.2.2006

Репутация: 1
Всего: 1



Цитата

Ну и как операционка догадается, что нужно делать с устройством если для него нет никаких программ?


Драйвера в операционке есть (я про винду), в некоторых случаях может дополнительно понадобится только inf файл. Какие драйвера использовать, операционка может решить по дескрипторам, которые устройство передаёт хосту в процессе энумерации (мы же на usb мышь или клавиатуру дрова не ставим), если не поймёт, то нужно использовать inf файл, в котором будет прописана необходимая информация, но это в случае более "сложных" устройств, чем мышь или клава.

PM MAIL   Вверх
Mazzi
Дата 7.11.2008, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Цитата(LessNik @ 7.11.2008,  10:26)
Цитата

Ну и как операционка догадается, что нужно делать с устройством если для него нет никаких программ?


Драйвера в операционке есть (я про винду), в некоторых случаях может дополнительно понадобится только inf файл. Какие драйвера использовать, операционка может решить по дескрипторам, которые устройство передаёт хосту в процессе энумерации (мы же на usb мышь или клавиатуру дрова не ставим), если не поймёт, то нужно использовать inf файл, в котором будет прописана необходимая информация, но это в случае более "сложных" устройств, чем мышь или клава.

А если это не клава, а некое нестандартное устройство? 
Как получить доступ к его функциям без написания своей программы?


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
xvr
Дата 7.11.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(Mazzi @ 7.11.2008,  11:54)
Цитата(LessNik @ 7.11.2008,  10:26)
Цитата

Ну и как операционка догадается, что нужно делать с устройством если для него нет никаких программ?


Драйвера в операционке есть (я про винду), в некоторых случаях может дополнительно понадобится только inf файл. Какие драйвера использовать, операционка может решить по дескрипторам, которые устройство передаёт хосту в процессе энумерации (мы же на usb мышь или клавиатуру дрова не ставим), если не поймёт, то нужно использовать inf файл, в котором будет прописана необходимая информация, но это в случае более "сложных" устройств, чем мышь или клава.

А если это не клава, а некое нестандартное устройство? 

Тогда это не HID устройство - они все стандартные (для того и придумывались) Если устройство не способно прикинутся одним из HID классов, то увы, придется писать для него полноценный драйвер на хосте.
Цитата

Как получить доступ к его функциям без написания своей программы?
Если не HID - то никак

PM MAIL   Вверх
Mazzi
Дата 7.11.2008, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Цитата(xvr @ 7.11.2008,  13:01)
Цитата(Mazzi @ 7.11.2008,  11:54)
Цитата(LessNik @ 7.11.2008,  10:26)
Цитата

Ну и как операционка догадается, что нужно делать с устройством если для него нет никаких программ?


Драйвера в операционке есть (я про винду), в некоторых случаях может дополнительно понадобится только inf файл. Какие драйвера использовать, операционка может решить по дескрипторам, которые устройство передаёт хосту в процессе энумерации (мы же на usb мышь или клавиатуру дрова не ставим), если не поймёт, то нужно использовать inf файл, в котором будет прописана необходимая информация, но это в случае более "сложных" устройств, чем мышь или клава.

А если это не клава, а некое нестандартное устройство? 

Тогда это не HID устройство - они все стандартные (для того и придумывались) Если устройство не способно прикинутся одним из HID классов, то увы, придется писать для него полноценный драйвер на хосте.
Цитата

Как получить доступ к его функциям без написания своей программы?
Если не HID - то никак

Перечислю типы HID - устройств упомянутые в книге Агурова.

1) клавиатуры и указатели
2) кнопки управления, переключатели, задвижки
3) устройства управления в видеомагнитофонах, телефонах, игровых приставках
4) устройства не требующие взаимодействия с человеком, термометры, вольтметры

Что скажете?


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
LessNik
Дата 7.11.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 20.2.2006

Репутация: 1
Всего: 1



Цитата(Mazzi @  7.11.2008,  13:30 Найти цитируемый пост)
Перечислю типы HID - устройств упомянутые в книге Агурова.

1) клавиатуры и указатели
2) кнопки управления, переключатели, задвижки
3) устройства управления в видеомагнитофонах, телефонах, игровых приставках
4) устройства не требующие взаимодействия с человеком, термометры, вольтметры

Что скажете?


Скажу, что на одну страницу ниже в главе 6.Класс HID Агурова (стр 147) написано, что :
Цитата

весь обмен с HID-устройством происходит с помощью определенной структуры, которая называется репортом (report). Один репорт может содержать до 65535 байтов данных. Микропрограмма HID-устройства должна содержать дескриптор репорта (report descriptor), который описывает структуру данных репорта. Репорт имеет достаточно гибкую структуру для описания любого типа устройства и формата передачи данных.


а также много другого полезного.

PM MAIL   Вверх
Mazzi
Дата 7.11.2008, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Цитата(LessNik @ 7.11.2008,  15:45)
Цитата(Mazzi @  7.11.2008,  13:30 Найти цитируемый пост)
Перечислю типы HID - устройств упомянутые в книге Агурова.

1) клавиатуры и указатели
2) кнопки управления, переключатели, задвижки
3) устройства управления в видеомагнитофонах, телефонах, игровых приставках
4) устройства не требующие взаимодействия с человеком, термометры, вольтметры

Что скажете?


Скажу, что на одну страницу ниже в главе 6.Класс HID Агурова (стр 147) написано, что :
Цитата

весь обмен с HID-устройством происходит с помощью определенной структуры, которая называется репортом (report). Один репорт может содержать до 65535 байтов данных. Микропрограмма HID-устройства должна содержать дескриптор репорта (report descriptor), который описывает структуру данных репорта. Репорт имеет достаточно гибкую структуру для описания любого типа устройства и формата передачи данных.


а также много другого полезного.

Ну хорошо, с помощью репорта происходит обмен, а дальше что?
Как этим репортом воспользоваться без программы верхнего уровня, если у меня самодельное устройство HID? 


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
LessNik
Дата 7.11.2008, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 20.2.2006

Репутация: 1
Всего: 1



Цитата(Mazzi @  7.11.2008,  16:20 Найти цитируемый пост)
Ну хорошо, с помощью репорта происходит обмен, а дальше что?
Как этим репортом воспользоваться без программы верхнего уровня, если у меня самодельное устройство HID? 


Я понял, что вы имели ввиду: работать с HID устройством наподобии как с COM портом.
Ну тогда, после того как операционка САМА поймёт, что это HID устройство и САМА установит нужные драйвера, то можно писать приложение верхнего уровня: получить дескриптор HID устройства для того, чтобы суметь его открыть, а дальше работать как с файлом(read, write и т.д.).
P.S. Подумал, что проблема в драйверах.

PM MAIL   Вверх
arzamax
Дата 14.11.2008, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.11.2008

Репутация: нет
Всего: нет



Добрый день! Я тоже столкнулся с данной проблемой (и тоже по книге Агурова). Дело в том что в книге приводится конкретная программа для микропроцессора, после залития которой в него, он передает в систему некоторые данные генерирующиеся непрерывно. На диске к книге представленна откомпилированная программа на DELPHI которая читает эти данные, также там имеется исходник для этой программы откомпилировать который получается только после добавления в папку SetupApi.pas и еше парочки библиотек. Далее после компиляции программа не хочет работать вообще. Хотя откомпилированный якобы, агуровым код работает прекрасно.
Т.е. Агуров поступил интересно: показал что такое может быть, а дальше делайте чего хотите smile

P.S. Ужасно разочарован книгами агурова. Не разобравшись в вопросе досконально, возомнил себя гением и полез писать книги. 
В первой дофига косяков: мало того что про микропроцессоры рассказывается не все (по его словам существует всего две разновидности микропроцессора at89c5131: at89c5131-L и at89c5131-M. Всего их как оказалось три: "at89c5131", "at89c5131-L" и "at89c5131-M". Описывает он два последних, а структурную схему включения приводит для первого. У двух последних на две ножки больше: 18 и кажется 25, которые в первом не использовались.), так еще на диске нет и половины нужной информации, файлов и исходников, а та что есть на столько каличная что не знеш к куда ее приткнуть.
Вторая книга полная аналогия первой, ну добавлено пара глав и возможно исправлено пара косяков (кстати структурная схема включения микропоцессора не исправлена и в этой smile)
Желаю всем приятного прочтения!!!!!

А вопрос с написанием программы для HID устройства остался открытым. Все советуют использовать модуль SetupApi.pas из библиотеки JEDI но как его конкретно применять не обьясняется. Если кто нибудь сталкивался с подобной проблемой и успешно ее разрешил, обьясните пожалуйста каким образом.
PM MAIL   Вверх
xvr
Дата 14.11.2008, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(arzamax @ 14.11.2008,  13:26)
А вопрос с написанием программы для HID устройства остался открытым. Все советуют использовать модуль SetupApi.pas из библиотеки JEDI но как его конкретно применять не обьясняется. Если кто нибудь сталкивался с подобной проблемой и успешно ее разрешил, обьясните пожалуйста каким образом.

Нашел у себя в закромах какой то исходник

Присоединённый файл ( Кол-во скачиваний: 804 )
Присоединённый файл  HIDKomponente.zip 371,72 Kb
PM MAIL   Вверх
arzamax
Дата 17.11.2008, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.11.2008

Репутация: нет
Всего: нет



Пасиба, попробую!
Надо бы полностью описать работу с данным микропоцессором: начиная от простой структурной схемы и заканчивая конечным устройством с управлением от компа - было бы не плохо (мысли вслух).
PM MAIL   Вверх
arzamax
Дата 2.2.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.11.2008

Репутация: нет
Всего: нет



xvr, Наконец-то просмотрел твои исходники: получше чем у Агурова на диске. Твои исходники читают передаваемую в хост информацию на ура. У меня возникла проблема с передачей данных от хоста устройству, к слову в книге Агурова этот вопрос рассматривается по принципу: "Есть такая возможность, давайте дальше...". В этих исходниках есть возможность передавать данные устройству, но видимо я чего-то не до конца понимаю в программировании микроконтроллеров для приема данных. Если кто сталкивался с подобной проблемой - поделитесь вашими наработками, мнением, исходным кодом для МК AT89C5131.
Заранее спасиба всем откликнувшимся!
PM MAIL   Вверх
DimonSDA
Дата 28.4.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.4.2009

Репутация: нет
Всего: нет



Два года назад делал дипломный проект "USB Контроллер Системы Сбора Информации" в институте, причем собирал устройство писал все программы (прошивку, драйвер и интерфейс) и теоретическую часть - чертежи, пояснительную записку и много еще чего. Сами понимаете время на все это дело давалось примерно 5 мес. В итоге защитил на отлично, причем с демонстрацией работающего макета.  В общем вот Вам выкладываю исходники надеюсь разберетесь. Багов там наверное миллион, так что не ругайте smile - сами понимаете за такой короткий промежуток времени разобраться со всеми тонкостями протокола USB, разработать устройство, написать все программы и теорию - нелегко, поэтому на исправление всех багов времени просто небыло. Проект разработан с применением AT89C5131АМ, я приложил схему.
Но я не уверен, что это самые последние версии программ, в процессе разработки их накопилось много, и я просто не помню какая из них самая последняя :(. Но там есть и чтение данных из устройства и запись в него (у Агурова примеров записи нет вообще!!!).

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

Прошивка написана в Keil uVision, интерфейс на Delphi 7.
Схема в PCAD-2002.
Драйвер изночально писался с использованием DDK, но при работе с тремя конечными точками происходило падение системы, с одной - работало. Было решено использовать пакет Jungo WinDriver или Jungo KernelDriver (точно не помню). С ним все работает на ура.

Может кону-нибудь пригодится.



Это сообщение отредактировал(а) DimonSDA - 28.4.2009, 20:37

Присоединённый файл ( Кол-во скачиваний: 470 )
Присоединённый файл  AT89C5131.7z 312,80 Kb
PM MAIL   Вверх
mr_smit
Дата 30.5.2009, 21:46 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 1
Всего: 4



PM MAIL   Вверх
QuickWitted
Дата 15.6.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.6.2009

Репутация: нет
Всего: нет



Продублирую тему в качестве своего вопроса - "помогите с проектом под Delphi для работы с HID USB, поиск простенького проекта"
Есть готовый проект на СИ, но хотелось бы достучаться до HID USB с Delphi...

читал много - только запутался...

Неподскажиче чем дело с адаптацией исходников от Агурова кончилось?


Присоединённый файл ( Кол-во скачиваний: 325 )
Присоединённый файл  IgorPlugTermometr.rar 55,03 Kb
PM MAIL   Вверх
mr_smit
Дата 15.6.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 1
Всего: 4



Я собрал схему по приведенной мною выше ссылке (там их много разных, но смысл один). Вам там дают готовую библиотеку и нужно только поправить код под свои нужды. На Delphi (с помощью компонента что то там THID... не помню) написал программу. Смысл такой: нажал кнопку (мышкой) - лампочка загорелась (на плате), ещё раз нажал - погасла. Долго мучился с этим, но получилось.

А книга Агурова мне не очень нравится. Практики в ней нет. Я предпочитаю практические примеры. Как мой. Пожалуйста, цепляй вместо светодиода релюшку и включай/выключай настольную лампу не отрывая руки от мыши. А можно это и на "горячие клавиши" повесить. Будет даже на буке работать. USB ведь... smile Просто что то руки никак не дойдут это спаять.

Это сообщение отредактировал(а) mr_smit - 15.6.2009, 13:30
PM MAIL   Вверх
QuickWitted
Дата 15.6.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.6.2009

Репутация: нет
Всего: нет



Цитата(mr_smit @  15.6.2009,  13:14 Найти цитируемый пост)
Смысл такой: нажал кнопку (мышкой) - лампочка загорелась (на плате), ещё раз нажал - погасла. Долго мучился с этим, но получилось.


у меня 8 релюшек и ИР на слае уже год живут...
(управляются как от компа, так и автономно от обученного пульта)

Задача слезть с IgorPlug.dll (и за одно с комплектного драйвера)...

т.е. нужна прога общающаяся с HID без дров и по возможности без библиотек.

первое решение - прикинимся HID джойстиком - реализовали...
недостатки в джой данные передать нельзя...

второе решение - поищем аналог.
нашли, только прога на СИ и на железе нет приёма данных из компа...

вот теперь думаю как на дэльфи перевести....
(а приём данных потом допишем)


ЗЫ: в теме только один исходник... и он зверски ругается при старте и при закрытии
если не найдёт устройство....

может, у кого рабочий есть?
(не сильно паникующий без железа?)

PM MAIL   Вверх
mr_smit
Дата 15.6.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 1
Всего: 4



Код

function TForm1.JvHidDeviceController1Enumerate(HidDev: TJvHidDevice;
  const Idx: Integer): Boolean;
begin
  FeatureReportLen := HidDev.Caps.FeatureReportByteLength;
  fillchar(MyReport, 8, 0);
  
  if on_off=0 then
    begin
    MyReport[1] := 0;
    on_off:=1;
    end
  else begin
    MyReport[1] := 1;
    on_off:=0;
  end;

  Result := HidDev.SetFeature(MyReport, FeatureReportLen);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
JvHidDeviceController1.Enumerate;
end;


Код

// вызывается когда хост посылает данные устройству

uchar   usbFunctionWrite(uchar *data, uchar len)
{
    uchar    on_off;
    on_off = data[0];
    
    DDRB |= 0x01;
    // в зависимости от того что пришло включаем или выключаем светодиод
    if (on_off==0) { 
      PORTB &= ~ ( 0x01 );
      }
    else if (on_off==1) {
      PORTB |= ( 0x01 );
      }
    return 1; 
}


Использовал этот компонент: http://ifolder.ru/12653480 Его тут уже выкладывали.

Я не делал никакие проверки. Это работает в том случае если к ПК в данный момент подключено 1 HID устройство. Если несколько - надо искать наше (по VID и PID) и обращаться к нему. На отсутствие железа не ругается.

Это сообщение отредактировал(а) mr_smit - 15.6.2009, 16:27

Присоединённый файл ( Кол-во скачиваний: 569 )
Присоединённый файл  USB_HID_Delphi.rar 1,50 Kb
PM MAIL   Вверх
QuickWitted
Дата 16.6.2009, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.6.2009

Репутация: нет
Всего: нет



Цитата(mr_smit @  15.6.2009,  16:16 Найти цитируемый пост)
Это работает в том случае если к ПК в данный момент подключено 1 HID устройство. Если несколько - надо искать наше (по VID и PID) и обращаться к нему.


отправился мучать исходник...

а с поиском  (по VID и PID) не у кого готового нет?
PM MAIL   Вверх
mr_smit
  Дата 16.6.2009, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 1
Всего: 4



В примерах которые идут с компонентом есть.

Что то типа этого:
Код

HidDev.Attributes.VendorID
HidDev.Attributes.ProductID


Я только пока не пойму как потом к нужному устройству обратиться. Надо разбираться.

Это сообщение отредактировал(а) mr_smit - 16.6.2009, 21:09
PM MAIL   Вверх
QuickWitted
Дата 17.6.2009, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.6.2009

Репутация: нет
Всего: нет



Цитата(mr_smit @  16.6.2009,  20:40 Найти цитируемый пост)
Я только пока не пойму как потом к нужному устройству обратиться. Надо разбираться.


вот в этом и проблема...
не всё понятно, рабочий исходник бы...
PM MAIL   Вверх
mr_smit
Дата 18.6.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 1
Всего: 4



Исходник который идет с компонентом - рабочий. Бегло посмотрел. Они там ищут устройства и найденные добавляют в Listbox как objects и потом работают с нужным.

Код

Dev := TJvHidDevice(DevListBox.Items.Objects[I]);

PM MAIL   Вверх
pvabox
Дата 24.9.2009, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Код

Пример поиска нужного устройства

unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Forms,
  StdCtrls, Buttons, JvHidControllerClass, JvComponentBase;
  
type
  TForm1 = class(TForm)
    HidCtl: TJvHidDeviceController;
    Label1: TLabel;
    Label2: TLabel;
    procedure HidCtlArrival(HidDev: TJvHidDevice);
    function  HidCtlEnumerate(HidDev: TJvHidDevice;
              const Idx: Integer): Boolean;
    procedure HidCtlRemoval(HidDev: TJvHidDevice);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
// Описание устройства
  ProductName_  = 'My HID USB Device';
  VendorID_     =  5824;
  ProductID_    =  1503;

var
  Form1: TForm1;
  WorkDev: TJvHidDevice = nil;

implementation

{$R *.dfm}

procedure TForm1.HidCtlArrival(HidDev: TJvHidDevice);
// Обработчик подключения нового устройства
// событие OnArrival от HidCtl
begin
// если устройство не определено, то вызываем энумерацию
  If not Assigned(WorkDev) then HidCtl.Enumerate
end;

function TForm1.HidCtlEnumerate(HidDev: TJvHidDevice;
                                const Idx: Integer): Boolean;
// Поиск нужного устройства из всех подключенных
// событие OnEnumerate от HidCtl
begin
  Result:= True;                      // продолжать поиск
  If (Trim(HidDev.ProductName) = ProductName_)
    then  If  (HidDev.Attributes.VendorID  = VendorID_) and
              (HidDev.Attributes.ProductID = ProductID_)
            then  begin
                    Result:= False;   // поиск закончен
                    HidCtl.CheckOutByIndex(WorkDev, Idx);
                    Label2.Caption:= 'подключено'
                  end
end;

procedure TForm1.HidCtlRemoval(HidDev: TJvHidDevice);
// Обработчик физического отключения устройства
// событие OnRemoval от HidCtl
begin
  If HidDev = WorkDev then  // устройство было отключено
    begin
      WorkDev:= nil;
      Label2.Caption:= ' отключено'
    end
end;

end.


Это сообщение отредактировал(а) Alexeis - 7.10.2009, 11:49
PM MAIL   Вверх
rpuH
Дата 8.10.2009, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 5.10.2009

Репутация: нет
Всего: нет



Цитата(pvabox @ 24.9.2009,  19:03)
Код

Пример поиска нужного устройства

unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Forms,
  StdCtrls, Buttons, JvHidControllerClass, JvComponentBase;
  
type
  TForm1 = class(TForm)
    HidCtl: TJvHidDeviceController;
    Label1: TLabel;
    Label2: TLabel;
    procedure HidCtlArrival(HidDev: TJvHidDevice);
    function  HidCtlEnumerate(HidDev: TJvHidDevice;
              const Idx: Integer): Boolean;
    procedure HidCtlRemoval(HidDev: TJvHidDevice);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
// Описание устройства
  ProductName_  = 'My HID USB Device';
  VendorID_     =  5824;
  ProductID_    =  1503;

var
  Form1: TForm1;
  WorkDev: TJvHidDevice = nil;

implementation

{$R *.dfm}

procedure TForm1.HidCtlArrival(HidDev: TJvHidDevice);
// Обработчик подключения нового устройства
// событие OnArrival от HidCtl
begin
// если устройство не определено, то вызываем энумерацию
  If not Assigned(WorkDev) then HidCtl.Enumerate
end;

function TForm1.HidCtlEnumerate(HidDev: TJvHidDevice;
                                const Idx: Integer): Boolean;
// Поиск нужного устройства из всех подключенных
// событие OnEnumerate от HidCtl
begin
  Result:= True;                      // продолжать поиск
  If (Trim(HidDev.ProductName) = ProductName_)
    then  If  (HidDev.Attributes.VendorID  = VendorID_) and
              (HidDev.Attributes.ProductID = ProductID_)
            then  begin
                    Result:= False;   // поиск закончен
                    HidCtl.CheckOutByIndex(WorkDev, Idx);
                    Label2.Caption:= 'подключено'
                  end
end;

procedure TForm1.HidCtlRemoval(HidDev: TJvHidDevice);
// Обработчик физического отключения устройства
// событие OnRemoval от HidCtl
begin
  If HidDev = WorkDev then  // устройство было отключено
    begin
      WorkDev:= nil;
      Label2.Caption:= ' отключено'
    end
end;

end.

Добрый день!!! Если не затруднит скиньте пожалуйста исходники этой программы, а было бы вообще замечательно если в совокупностим с предыдущей программой. Спасибо зараннее.
PM MAIL   Вверх
pvabox
Дата 16.10.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Пример моего проекта работы с HID устройством на базе V-USB от Objective Development

Схема

user posted image


Основная программа микроконтроллера main.c

Код

/* ------------------------------------------------------------------------- */
/*
 Этот простой пример показывает как можно использовать протокол HID для передачи
данных в микроконтроллер AVR и управлять 8-ми битным портом. Он должен работать
на многих AVR с небольшими изменениями. Не используются никакие специальные аппаратные
ресурсы, кроме INT0. Вы можете изменить usbconfig.h для других выводов I/O USB.
Пожалуйста, имейте в виду, что USB D+ должен быть подсоединен к выводу INT0, либо,
как минимум, также должен быть соединен с INT0.
*/

#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>      /* требуется для sei() */
#include <util/delay.h>           /* требуется для _delay_ms() */

#include <avr/pgmspace.h>   /* требуется для usbdrv.h */
#include "usbdrv.h"
#include "oddebug.h"             /* пример для использования макроса отладки */


/* ------------------------------------------------------------------------- */
/* ----------------------------- Интерфейс USB ----------------------------- */
/* ------------------------------------------------------------------------- */

PROGMEM char usbHidReportDescriptor[21] = {  /* дескриптор репорта USB */
    0x05, 0x08,                 // USAGE_PAGE (LEDs)
    0x09, 0x4b,                 // USAGE (Generic Indicator)
    0xa1, 0x01,                 // COLLECTION (Application)
    0x15, 0x00,                //   LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,        //   LOGICAL_MAXIMUM (255)
    0x75, 0x08,                //   REPORT_SIZE (8)
    0x95, 0x01                 //   REPORT_COUNT (1)
    0x09, 0x00,                //   USAGE (Undefined)
    0xb2, 0x02, 0x01,      //   FEATURE (Data,Var,Abs,Buf)
    0xc0                           // END_COLLECTION
};

/*
 Поскольку мы задали только один feature-репорт, мы не используем идентификаторы 
report-ID (которые должны быть в первом байте репорта). Весь репорт состоит из
одного 8-ми битового блока неопределенных данных.
*/

/* ------------------------------------------------------------------------- */

/*
 usbFunctionRead() вызывается, когда хост запрашивает кусок данных от устройства.
 Для большей информации см. документацию в usbdrv/usbdrv.h.
*/

uchar   usbFunctionRead(uchar *data, uchar len)
{
    data[0] = PINB;             /* читаем байт данных из порта PB */
    len = 1;                        /* считали один байт данных */
    return len;                     /* возвращаем кол-во считанных байт */
}

/*
 usbFunctionWrite() вызывается, когда хост посылает кусок данных в устройство.
 Для большей информации см. документацию в usbdrv/usbdrv.h.
*/

uchar   usbFunctionWrite(uchar *data, uchar len)
{
    PORTB = data[0];            /* записываем байт данных в порт PB */
    return 1;                         /* возвращаем 1 - все данные успешно приняты */
}

/* ------------------------------------------------------------------------- */

/*
 usbFunctionSetup вызывается, когда драйвер принимает транзакцию SETUP от хоста,
которому не отвечает драйвер непосредственно (на практике: запросы класса
и вендора). Все управляющие передачи стартуют с транзакции SETUP, где хост
сообщает параметры следующтих (опционально) передач данных. Данные SETUP 
доступны в параметре 'data', который может (и должен) быть преобразован 
в 'usbRequest_t *' для лучшего дружественного для пользователя доступа
к параметрам.
 Для большей информации см. документацию в usbdrv/usbdrv.h.
*/

usbMsgLen_t usbFunctionSetup(uchar data[8])
{
usbRequest_t    *rq = (void *)data;

    if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS){    /* запрос HID class */
        if(rq->bRequest == USBRQ_HID_GET_REPORT){  /* wValue: ReportType (highbyte), ReportID (lowbyte) */
            /* поскольку мы имеем только один тип репорта, мы можем игнорировать репорт-ID */
            return USB_NO_MSG;  /* использование usbFunctionRead() для получения данных хостом от устройства */
        }else if(rq->bRequest == USBRQ_HID_SET_REPORT){
            /* поскольку мы имеем только один тип репорта, мы можем игнорировать репорт-ID */
            return USB_NO_MSG;  /* использование usbFunctionWrite() для получения данных устройством от хоста */
        }
    }else{
        /* игнорируем запросы типа вендора, мы их все равно не используем */
    }
    return 0;
}

/* ------------------------------------------------------------------------- */

int main(void)
{
uchar   i;

    wdt_enable(WDTO_1S);
    /* Даже если Вы не используете watchdog, выключите его здесь. На новых устройствах
     *  состояние watchdog (вкл/выкл, период) СОХРАНЯЮТСЯ ЧЕРЕЗ RESET!
     */
    DBG1(0x00, 0, 0);       /* отладочный вывод: стартует тело main */
    /* Состояние RESET: все биты порта работают как входы без нагрузочных резисторов (pull-up).
     *  Это то, что нужно для входов USB D+ и D-.
     */
    DDRB  = 0xFF;             /* конфигурируем порт PB для вывода данных */
    odDebugInit();
    usbInit();
    usbDeviceDisconnect();  /* запускаем принудительно реэнумерацию, делайте это, когда прерывания запрещены! */
    i = 0;
    while(--i){                    /* эмулируем USB дисконнект на время > 250 мс */
        wdt_reset();
        _delay_ms(1);
    }
    usbDeviceConnect();
    sei();                            /* общее разрешение прерываний */
    DBG1(0x01, 0, 0);       /* отладочный вывод: вход в цикл main */
    for(;;){                /* цикл событий main */
        DBG1(0x02, 0, 0);   /* отладочный вывод: повторы цикла main */
        wdt_reset();
        usbPoll();
    }
    return 0;
}

/* ------------------------------------------------------------------------- */


ВНИМАНИЕ! Не забудьте отредактировать файл конфигурации usbconfig.h !!!!


Далее - тестовая программа на Delphi 7 main.pas

Код

unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Forms,
  StdCtrls, Buttons, JvHidControllerClass, JvComponentBase;
  
type
  TReportData = array [0..7] of Byte;  // размер буфера репорта HID

  TForm1 = class(TForm)
    HidCtl: TJvHidDeviceController;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    CheckBox0: TCheckBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    CheckBox6: TCheckBox;
    CheckBox7: TCheckBox;
    
    procedure HidCtlArrival(HidDev: TJvHidDevice);
    function  HidCtlEnumerate(HidDev: TJvHidDevice;
              const Idx: Integer): Boolean;
    procedure HidCtlRemoval(HidDev: TJvHidDevice);
    function  WorkDevSetFeature(Buf: TReportData): Boolean;
    procedure CheckBoxClick(Sender: TObject);
    
  private
    { Private declarations }
  public
    { Public declarations }
    WorkDev   : TJvHidDevice;
  end;

const
// Описание устройства
  ProductName_  = 'LED USB Device';
  VendorID_     =  $16c0;
  ProductID_    =  $05df;

var
  Form1     : TForm1;

implementation

{$R *.dfm}


procedure TForm1.HidCtlArrival(HidDev: TJvHidDevice);
// Обработчик подключения нового устройства
// событие OnArrival от HidCtl
begin
// если устройство не определено, то вызываем энумерацию
  If not Assigned(WorkDev) then HidCtl.Enumerate
end;


function TForm1.HidCtlEnumerate(HidDev: TJvHidDevice;
                                const Idx: Integer): Boolean;
// Поиск нужного устройства из всех подключенных
// событие OnEnumerate от HidCtl
begin
  Result:= True;                      // продолжать поиск
  If (Trim(HidDev.ProductName) = ProductName_)
    then  If  (HidDev.Attributes.VendorID  = VendorID_) and
              (HidDev.Attributes.ProductID = ProductID_)
            then  begin               // устройство найдено
                    HidCtl.CheckOutByIndex(WorkDev, Idx);  // получаем устройство по индексу
                    Label2.Caption:= 'подключено';
                    Result:= False;   // поиск закончен
                  end
end;


procedure TForm1.HidCtlRemoval(HidDev: TJvHidDevice);
// Обработчик физического отключения устройства
// событие OnRemoval от HidCtl
begin
  If HidDev = WorkDev then
    begin                             // устройство было отключено
      WorkDev:= nil;
      Label2.Caption:= ' отключено'
    end
end;


function TForm1.WorkDevSetFeature(Buf: TReportData): Boolean;
// Передача данных устройству WorkDev
begin
  If Assigned(WorkDev)
    then Result:= WorkDev.SetFeature(Buf, WorkDev.Caps.FeatureReportByteLength)
    else Result:= False
end;


procedure TForm1.CheckBoxClick(Sender: TObject);
// Опрос состояний CheckBox и передача данных устройству
var
  LEDs      : Byte;
  ReportData: TReportData;

begin
// Опрос состояний CheckBox
  LEDs:= 0;
  If CheckBox0.Checked then LEDs:= LEDs+1;
  If CheckBox1.Checked then LEDs:= LEDs+2;
  If CheckBox2.Checked then LEDs:= LEDs+4;
  If CheckBox3.Checked then LEDs:= LEDs+8;
  If CheckBox4.Checked then LEDs:= LEDs+16;
  If CheckBox5.Checked then LEDs:= LEDs+32;
  If CheckBox6.Checked then LEDs:= LEDs+64;
  If CheckBox7.Checked then LEDs:= LEDs+128;

  Label3.Caption:= 'LEDs = ' + IntToStr(LEDs);

// Передача данных устройству WorkDev
  FillChar(ReportData, SizeOf(ReportData), 0);  // заполняем массив нулями
  ReportData[0]:= 0;                            // номер репорта
  ReportData[1]:= LEDs;                         // данные репорта
  If WorkDevSetFeature(ReportData)              // пытаемся передать данные
    then Label4.Caption:= ' Ok! '
    else Label4.Caption:= ' Ошибка передачи данных '
end;

end.



PS: Программа использует JvHidControllerClass библиотеки JEDI, не забудьте установить!

Будут вопросы - не стесняйтесь, постараюсь ответить.


Это сообщение отредактировал(а) pvabox - 28.10.2010, 09:20
PM MAIL   Вверх
pvabox
Дата 16.10.2009, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



 По многочисленным просьбам на e-mail, выкладываю пример моего проекта для микроконтроллера  с описанием под WinAVR.

PS: Внимание! Архив обновлен и дополнен.


Это сообщение отредактировал(а) pvabox - 23.9.2011, 10:08

Присоединённый файл ( Кол-во скачиваний: 505 )
Присоединённый файл  LED_Device_Example.rar 83,43 Kb
PM MAIL   Вверх
joint931
Дата 12.12.2009, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 29.10.2009

Репутация: нет
Всего: нет



Ктонибудь может кинуть пример как с помощью компонента JvHidController ПРИНИМАТЬ данные? Как девайс найти и послать пакеты все ясно, а вот как его опросить... ниче не ясно... 
Заранее спасибо.
PM MAIL   Вверх
197102
Дата 18.12.2009, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 17.12.2009

Репутация: нет
Всего: нет



Цитата(pvabox @ 16.10.2009,  23:10)
Пример моего проекта работы с HID устройством на базе V-USB от Objective Development

Схема
user posted image

Основная программа микроконтроллера main.c

Код

/* ------------------------------------------------------------------------- */
/*
 Этот простой пример показывает как можно использовать протокол HID для передачи
данных в микроконтроллер AVR и управлять 8-ми битным портом. Он должен работать
на многих AVR с небольшими изменениями. Не используются никакие специальные аппаратные
ресурсы, кроме INT0. Вы можете изменить usbconfig.h для других выводов I/O USB.
Пожалуйста, имейте в виду, что USB D+ должен быть подсоединен к выводу INT0, либо,
как минимум, также должен быть соединен с INT0.
*/

#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>      /* требуется для sei() */
#include <util/delay.h>           /* требуется для _delay_ms() */

#include <avr/pgmspace.h>   /* требуется для usbdrv.h */
#include "usbdrv.h"
#include "oddebug.h"             /* пример для использования макроса отладки */


/* ------------------------------------------------------------------------- */
/* ----------------------------- Интерфейс USB ----------------------------- */
/* ------------------------------------------------------------------------- */

PROGMEM char usbHidReportDescriptor[21] = {  /* дескриптор репорта USB */
    0x05, 0x08,                 // USAGE_PAGE (LEDs)
    0x09, 0x4b,                 // USAGE (Generic Indicator)
    0xa1, 0x01,                 // COLLECTION (Application)
    0x15, 0x00,                //   LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,        //   LOGICAL_MAXIMUM (255)
    0x75, 0x08,                //   REPORT_SIZE (8)
    0x95, 0x01                 //   REPORT_COUNT (1)
    0x09, 0x00,                //   USAGE (Undefined)
    0xb2, 0x02, 0x01,      //   FEATURE (Data,Var,Abs,Buf)
    0xc0                           // END_COLLECTION
};

/*
 Поскольку мы задали только один feature-репорт, мы не используем идентификаторы 
report-ID (которые должны быть в первом байте репорта). Весь репорт состоит из
одного 8-ми битового блока неопределенных данных.
*/

/* ------------------------------------------------------------------------- */

/*
 usbFunctionRead() вызывается, когда хост запрашивает кусок данных от устройства.
 Для большей информации см. документацию в usbdrv/usbdrv.h.
*/

uchar   usbFunctionRead(uchar *data, uchar len)
{
    data[0] = PINB;             /* читаем байт данных из порта PB */
    len = 1;                        /* считали один байт данных */
    return len;                     /* возвращаем кол-во считанных байт */
}

/*
 usbFunctionWrite() вызывается, когда хост посылает кусок данных в устройство.
 Для большей информации см. документацию в usbdrv/usbdrv.h.
*/

uchar   usbFunctionWrite(uchar *data, uchar len)
{
    PORTB = data[0];            /* записываем байт данных в порт PB */
    return 1;                         /* возвращаем 1 - все данные успешно приняты */
}

/* ------------------------------------------------------------------------- */

/*
 usbFunctionSetup вызывается, когда драйвер принимает транзакцию SETUP от хоста,
которому не отвечает драйвер непосредственно (на практике: запросы класса
и вендора). Все управляющие передачи стартуют с транзакции SETUP, где хост
сообщает параметры следующтих (опционально) передач данных. Данные SETUP 
доступны в параметре 'data', который может (и должен) быть преобразован 
в 'usbRequest_t *' для лучшего дружественного для пользователя доступа
к параметрам.
 Для большей информации см. документацию в usbdrv/usbdrv.h.
*/

usbMsgLen_t usbFunctionSetup(uchar data[8])
{
usbRequest_t    *rq = (void *)data;

    if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS){    /* запрос HID class */
        if(rq->bRequest == USBRQ_HID_GET_REPORT){  /* wValue: ReportType (highbyte), ReportID (lowbyte) */
            /* поскольку мы имеем только один тип репорта, мы можем игнорировать репорт-ID */
            return USB_NO_MSG;  /* использование usbFunctionRead() для получения данных хостом от устройства */
        }else if(rq->bRequest == USBRQ_HID_SET_REPORT){
            /* поскольку мы имеем только один тип репорта, мы можем игнорировать репорт-ID */
            return USB_NO_MSG;  /* использование usbFunctionWrite() для получения данных устройством от хоста */
        }
    }else{
        /* игнорируем запросы типа вендора, мы их все равно не используем */
    }
    return 0;
}

/* ------------------------------------------------------------------------- */

int main(void)
{
uchar   i;

    wdt_enable(WDTO_1S);
    /* Даже если Вы не используете watchdog, выключите его здесь. На новых устройствах
     *  состояние watchdog (вкл/выкл, период) СОХРАНЯЮТСЯ ЧЕРЕЗ RESET!
     */
    DBG1(0x00, 0, 0);       /* отладочный вывод: стартует тело main */
    /* Состояние RESET: все биты порта работают как входы без нагрузочных резисторов (pull-up).
     *  Это то, что нужно для входов USB D+ и D-.
     */
    DDRB  = 0xFF;             /* конфигурируем порт PB для вывода данных */
    odDebugInit();
    usbInit();
    usbDeviceDisconnect();  /* запускаем принудительно реэнумерацию, делайте это, когда прерывания запрещены! */
    i = 0;
    while(--i){                    /* эмулируем USB дисконнект на время > 250 мс */
        wdt_reset();
        _delay_ms(1);
    }
    usbDeviceConnect();
    sei();                            /* общее разрешение прерываний */
    DBG1(0x01, 0, 0);       /* отладочный вывод: вход в цикл main */
    for(;;){                /* цикл событий main */
        DBG1(0x02, 0, 0);   /* отладочный вывод: повторы цикла main */
        wdt_reset();
        usbPoll();
    }
    return 0;
}

/* ------------------------------------------------------------------------- */


ВНИМАНИЕ! Не забудьте отредактировать файл конфигурации usbconfig.h !!!!


Далее - тестовая программа на Delphi 7 main.pas

Код

unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Forms,
  StdCtrls, Buttons, JvHidControllerClass, JvComponentBase;
  
type
  TReportData = array [0..7] of Byte;  // размер буфера репорта HID

  TForm1 = class(TForm)
    HidCtl: TJvHidDeviceController;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    CheckBox0: TCheckBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    CheckBox6: TCheckBox;
    CheckBox7: TCheckBox;
    
    procedure HidCtlArrival(HidDev: TJvHidDevice);
    function  HidCtlEnumerate(HidDev: TJvHidDevice;
              const Idx: Integer): Boolean;
    procedure HidCtlRemoval(HidDev: TJvHidDevice);
    function  WorkDevSetFeature(Buf: TReportData): Boolean;
    procedure CheckBoxClick(Sender: TObject);
    
  private
    { Private declarations }
  public
    { Public declarations }
    WorkDev   : TJvHidDevice;
  end;

const
// Описание устройства
  ProductName_  = 'LED USB Device';
  VendorID_     =  $16c0;
  ProductID_    =  $05df;

var
  Form1     : TForm1;

implementation

{$R *.dfm}


procedure TForm1.HidCtlArrival(HidDev: TJvHidDevice);
// Обработчик подключения нового устройства
// событие OnArrival от HidCtl
begin
// если устройство не определено, то вызываем энумерацию
  If not Assigned(WorkDev) then HidCtl.Enumerate
end;


function TForm1.HidCtlEnumerate(HidDev: TJvHidDevice;
                                const Idx: Integer): Boolean;
// Поиск нужного устройства из всех подключенных
// событие OnEnumerate от HidCtl
begin
  Result:= True;                      // продолжать поиск
  If (Trim(HidDev.ProductName) = ProductName_)
    then  If  (HidDev.Attributes.VendorID  = VendorID_) and
              (HidDev.Attributes.ProductID = ProductID_)
            then  begin               // устройство найдено
                    HidCtl.CheckOutByIndex(WorkDev, Idx);  // получаем устройство по индексу
                    Label2.Caption:= 'подключено';
                    Result:= False;   // поиск закончен
                  end
end;


procedure TForm1.HidCtlRemoval(HidDev: TJvHidDevice);
// Обработчик физического отключения устройства
// событие OnRemoval от HidCtl
begin
  If HidDev = WorkDev then
    begin                             // устройство было отключено
      WorkDev:= nil;
      Label2.Caption:= ' отключено'
    end
end;


function TForm1.WorkDevSetFeature(Buf: TReportData): Boolean;
// Передача данных устройству WorkDev
begin
  If Assigned(WorkDev)
    then Result:= WorkDev.SetFeature(Buf, WorkDev.Caps.FeatureReportByteLength)
    else Result:= False
end;


procedure TForm1.CheckBoxClick(Sender: TObject);
// Опрос состояний CheckBox и передача данных устройству
var
  LEDs      : Byte;
  ReportData: TReportData;

begin
// Опрос состояний CheckBox
  LEDs:= 0;
  If CheckBox0.Checked then LEDs:= LEDs+1;
  If CheckBox1.Checked then LEDs:= LEDs+2;
  If CheckBox2.Checked then LEDs:= LEDs+4;
  If CheckBox3.Checked then LEDs:= LEDs+8;
  If CheckBox4.Checked then LEDs:= LEDs+16;
  If CheckBox5.Checked then LEDs:= LEDs+32;
  If CheckBox6.Checked then LEDs:= LEDs+64;
  If CheckBox7.Checked then LEDs:= LEDs+128;

  Label3.Caption:= 'LEDs = ' + IntToStr(LEDs);

// Передача данных устройству WorkDev
  FillChar(ReportData, SizeOf(ReportData), 0);  // заполняем массив нулями
  ReportData[0]:= 0;                            // номер репорта
  ReportData[1]:= LEDs;                         // данные репорта
  If WorkDevSetFeature(ReportData)              // пытаемся передать данные
    then Label4.Caption:= ' Ok! '
    else Label4.Caption:= ' Ошибка передачи данных '
end;

end.



PS: Программа использует JvHidControllerClass библиотеки JEDI, не забудьте установить!

Будут вопросы - не стесняйтесь, постараюсь ответить.

Скажите, а где найти пресловутый JvComponentBase?

JvHidControllerClass установил, а этого найти не могу.
PM MAIL   Вверх
mr_smit
Дата 19.12.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 1
Всего: 4



Кинь на форму сам "HID компонент" и он добавит нужные uses
PM MAIL   Вверх
pvabox
Дата 24.12.2009, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Цитата(joint931 @ 12.12.2009,  01:23)
Ктонибудь может кинуть пример как с помощью компонента JvHidController ПРИНИМАТЬ данные? Как девайс найти и послать пакеты все ясно, а вот как его опросить... ниче не ясно... 
Заранее спасибо.

Замени в тексте программы на Delphi включения SetFeature на GetFeature, данные будут помещаться в буфер Buf.

Добавлено через 3 минуты и 37 секунд
Пробовал кто собирать подобный девайс, есть замечания по работе?
Напишите свое мнение.
PM MAIL   Вверх
Alexeyslav
Дата 25.12.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 25.12.2009

Репутация: нет
Всего: нет



Цитата

А книга Агурова мне не очень нравится. Практики в ней нет. Я предпочитаю практические примеры.


Такая книга заставляет задуматься, искать ошибки исправлять их - в этом процессе и приходят знания. Научившись же копировать - знаний не будет, и никогда до конца не поймете как это все работает. От незнания возникают всевозможные глюки - устройство работает только в определенных условиях, чуть что (в примере упустили проверки на ошибки например) и все летит к чертям, приложение вываливается а драйвер вешает систему... а Вы долго-долго ищите причину.
PM MAIL   Вверх
svetodiod
Дата 25.12.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 23.12.2009

Репутация: нет
Всего: нет



Прошу прощения за дурацкий вопрос, откуда девайс знает, что он 
Цитата

ProductName_  = 'LED USB Device';
VendorID_     =  $16c0;
ProductID_    =  $05df;

где это задается (если задается) в прошивке микроконтроллера?
PM MAIL   Вверх
alfrerd
Дата 3.1.2010, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 22.4.2009

Репутация: нет
Всего: нет



Цитата(pvabox @ 24.12.2009,  13:08)
Цитата(joint931 @ 12.12.2009,  01:23)
Ктонибудь может кинуть пример как с помощью компонента JvHidController ПРИНИМАТЬ данные? Как девайс найти и послать пакеты все ясно, а вот как его опросить... ниче не ясно... 
Заранее спасибо.

Замени в тексте программы на Delphi включения SetFeature на GetFeature, данные будут помещаться в буфер Buf.

Добавлено @ 13:12
Пробовал кто собирать подобный девайс, есть замечания по работе?
Напишите свое мнение.



Попробовал, лампочки конечно работают (если добавить "DDRB = 255;"). а вот с буфером проблема. не выводит. Делал изменения в 
Код

 uchar   usbFunctionRead(uchar *data, uchar len)
{
uchar i;
    //for( i =0; i < 32; i++)
    //  data[i] = Buffer[i];
    DDRB = 255;
    PORTB = 255;
    //return 32;
    data[0] = PINB;             /* читаем байт данных из порта PB */
    len = 1;                    /* считали один байт данных */
    return len;                 /* возвращаем кол-во считанных байт */
}

/*
 usbFunctionWrite() вызывается, когда хост посылает кусок данных в устройство.
 Для большей информации см. документацию в usbdrv/usbdrv.h.
*/

uchar   usbFunctionWrite(uchar *data, uchar len)
{
uchar i;
    //PORTB = 0;
    //for(i = 0; i < len; i++)
    //  Buffer[i] = data[i];
    PORTB = 255;            /* записываем байт данных в порт PB */
    return 1;                   /* возвращаем 1 - все данные успешно приняты */
}


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


PM MAIL   Вверх
alfrerd
Дата 3.1.2010, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 22.4.2009

Репутация: нет
Всего: нет



подчистил файл проекта от лишних модификаций, полученных в результате множества опытов, попил чайку, подумал и получил следующий результат:
1. Дополнительный буфер не особо то и нужен. это обусловлено тем, что используется только один тип репорта (занчит одной длинны все данные в нем) и контроллер его запишет в том же самом месте. При повторном вызове данных должен перезаписаться только заголовок. хотя может я и не прав. нужно просмотреть весь код обработки.
2. из Дельфи приложения функция usbFunctionWrite не вызывается. почему? есть одно предположение, но это позже.
3. если вызвать функцию, например через usbtool,  то диод загорается (данные записаны!), но(!) при анализе, что вернула GetFeature() и что записывалось видно очень большое различие.

4. если usbFunctionRead возвращает значение отличное от 1, то устройство просто не работает. 

ЗЫ: по поводу 2 может быть такая вешь, что просто не включена обработка. в usbFunctionSetup записано "/* игнорируем запросы типа вендора, мы их все равно не используем */". То есть если наше приложение посылает запрос по вендору, а не по классу, то этот запрос банально игнорируется. Сделал проверку, не по вендору тоже. Но помимо вендора и класса есть еще standard и reserved.
1 проверить тоже не получилось. поскольку при внесении дополнительного кода в usbFunctionWrite и usbFunctionRead код просто не работает ни с одной из перечисленных программ. Есть у меня смутные сомнения, что вероятно объявленный статичный (и нестатичный) массив располагается во флэш памяти. в CodeVision для этих целей используется специальная директива в декларации. Вероятно и в WinAVR тоже, только не знаю какая.
PM MAIL   Вверх
pvabox
Дата 28.10.2010, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Цитата(alfrerd @  3.1.2010,  00:23 Найти цитируемый пост)
Попробовал, лампочки конечно работают (если добавить "DDRB = 255;")


Эта строка уже добавлна при инициализации микроконтроллера
Код


    DDRB  = 0xFF;             /* конфигурируем порт PB для вывода данных */



Добавлено через 6 минут
Написал недавно плагин под Winamp на Delphi для вышеприведенной схемы с дополнительным усилителем тока и мощными светодиодами, получилась замечательная цветомузыка. Ее можно использовать как usb игрушку.
PM MAIL   Вверх
mr_smit
Дата 1.11.2010, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 1
Всего: 4



pvabox, давно мечтаю сделать что то подобное. Насмотрелся на ютубе на кубы из светодиодов.... класс...
Выложи хотя бы фото своего устройства...!!!!! Жутко интересно посмотреть!!! Очень заинтересовало.
PM MAIL   Вверх
mr_smit
Дата 1.11.2010, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 1
Всего: 4



Да и ещё, объясните эту конструкцию, я чего то не понимаю:

Код

  LEDs:= 0;
  If CheckBox0.Checked then LEDs:= LEDs+1;
  If CheckBox1.Checked then LEDs:= LEDs+2;
  If CheckBox2.Checked then LEDs:= LEDs+4;
  If CheckBox3.Checked then LEDs:= LEDs+8;
  If CheckBox4.Checked then LEDs:= LEDs+16;
  If CheckBox5.Checked then LEDs:= LEDs+32;
  If CheckBox6.Checked then LEDs:= LEDs+64;
  If CheckBox7.Checked then LEDs:= LEDs+128;


Понятно что LEDs это байт, т.е. 8 бит. Причем тут 1,2,4,8,16,32,64,128. С "делфи битами" не приходилось работать.

а если:
Код

If CheckBox7.Checked = false;

то что тогда?????

Может лучше так:
Код

Var
  LED_byte          :   string;
  LED_byte_finish:   byte;
begin
   LED_byte:='00000000';

   If CheckBox0.Checked then LED_byte[0]:='1';
   If CheckBox1.Checked then LED_byte[1]:='1';
   If CheckBox2.Checked then LED_byte[2]:='1';
   If CheckBox3.Checked then LED_byte[3]:='1';
   If CheckBox4.Checked then LED_byte[4]:='1';
   If CheckBox5.Checked then LED_byte[5]:='1';
   If CheckBox6.Checked then LED_byte[6]:='1';
   If CheckBox7.Checked then LED_byte[7]:='1';

   LED_byte_finish:=StrToByte(LED_byte);

Или глупость написал?

Это сообщение отредактировал(а) mr_smit - 1.11.2010, 10:59
PM MAIL   Вверх
xvr
Дата 1.11.2010, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(mr_smit @  1.11.2010,  09:06 Найти цитируемый пост)
Да и ещё, объясните эту конструкцию
Состояние набора checkbox'ов переводится в битовую шкалу

Цитата(mr_smit @  1.11.2010,  09:06 Найти цитируемый пост)
Причем тут 1,2,4,8,16,32,64,128.
Это степени двойки. В бинарном виде это будет
00000001
00000010
00000100
00001000
00010000
00100000
01000000
Если эти значения сложить, то в соответствующей позиции суммы появятся единички

Цитата(mr_smit @  1.11.2010,  09:06 Найти цитируемый пост)
Может лучше так:
У Индусов подсмотрели?

Цитата(mr_smit @  1.11.2010,  09:06 Найти цитируемый пост)
Или глупость написал?
Работать будет, но где то раз в 100 медленнее


PM MAIL   Вверх
tans
Дата 1.11.2010, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 7.10.2010

Репутация: нет
Всего: нет



А кто-нибудь знает как реализовать передачу данных в c++ buildere. В билдере отсутствует тип TReportData, в какой тип нужно положить передаваемые данные?
PM MAIL   Вверх
mr_smit
Дата 2.11.2010, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 1
Всего: 4



Спасибо за объяснение. Чего то сам не догадался. Точно.

Цитата(xvr @ 1.11.2010,  11:35)
Цитата(mr_smit @  1.11.2010,  09:06 Найти цитируемый пост)
Может лучше так:
У Индусов подсмотрели?

Ни у кого я не смотрел, сам написал.
PM MAIL   Вверх
AlexART
Дата 2.11.2010, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.11.2010

Репутация: нет
Всего: нет



Цитата(svetodiod @ 25.12.2009,  14:56)
Прошу прощения за дурацкий вопрос, откуда девайс знает, что он 
Цитата

ProductName_  = 'LED USB Device';
VendorID_     =  $16c0;
ProductID_    =  $05df;

где это задается (если задается) в прошивке микроконтроллера?

Фрагмент файла USBConfig.h:
Код


/* ------------------------- Дескриптор устройства ------------------------- */

#define  USB_CFG_VENDOR_ID       0xc0, 0x16  /* 5824 in dec, типовое для VOTI */
/* USB вендор ID для устройства, младший байт идет первым. Если Вы зарегистрировали свой 
 * собственный Vendor ID, укажите его здесь. В противном случае используйте один из 
 * свободно предоставляемых пар VID/PID obdev. Прочитайте правила USBID-License.txt!
 */
#define  USB_CFG_DEVICE_ID       0xdf, 0x05 /* 1503 in dec, предоставленный в общее пользование obdev PID для устройств HIDs */
/* Это ID продукта, младший байт идет первым. Он интерпретируется в контексте 
 * vendor ID. Если Вы зарегистрировали свой собственный VID на usb.org,
 * или если пользуетесь лицензией на PID от кого-нибудь еще, укажите его здесь. 
 * Иначе используйте предоставленную obdev свободно распространяемую пару VID/PID.
 * Прочитайте правила USBID-License.txt!
 */
#define USB_CFG_DEVICE_VERSION  0x00, 0x01
/* Номер версии устройства: сначала младший номер, затем старший номер.
 */
#define USB_CFG_VENDOR_NAME     'p', 'v', 'a', 'b', 'o', 'x', '@', 'm', 'a', 'i', 'l', '.', 'r', 'u'
#define USB_CFG_VENDOR_NAME_LEN 14
/* Эти две величины задают имя вендора (vendor name), возвращаемое устройством. 
 * Имя должно предоставляться как список символов в одиночных кавычках. 
 * Символы интерпретируются как Unicode (UTF-16). Если Вам не нужно имя вендора,
 * закомментируйте этот макрос. ВСЕГДА указывайте имя вендора, содержащее Ваше 
 * доменное имя Internet, если Вы используете свободно распространяемую пару 
 * obdev VID/PID. За деталями обращайтесь к файлу USBID-License.txt.
 */
#define USB_CFG_DEVICE_NAME     'L', 'E', 'D', ' ', 'U', 'S', 'B', ' ', 'D', 'e', 'v', 'i', 'c', 'e'
#define USB_CFG_DEVICE_NAME_LEN 14
/* Здесь указывается имя устройства (device name) таким же способом, как и в предыдущем 
 * параметре указывается имя вендора. Если Вам не нужно имя устройства, закомментируйте
 * этот макрос. См. файл USBID-License.txt перед назначением имени, если Вы используете 
 * свободно распространяемую пару obdev VID/PID.
 */
#define USB_CFG_SERIAL_NUMBER   '0', '0', '0', '1'
#define USB_CFG_SERIAL_NUMBER_LEN   4
/* Серийный номер (serial number). Если серийный номер Вам не нужен, закомментируйте макрос.
 * Может оказаться полезным предоставить serial number по другим соображениям, отличающимся 
 * от времени компиляции. См. секцию, описывающую свойства дескриптора далее, где указано 
 * как сделать точное управление дескрипторами USB (USB descriptors), такими как строковый
 * описатель для серийного номера.
 */
#define USB_CFG_DEVICE_CLASS        0xff    /* Задайте 0, если отложено для интерфейса */
#define USB_CFG_DEVICE_SUBCLASS     0
/* См. спецификацию USB, если Вы хотите приспособить устройство к существующему классу устройств 
 * (device class). Класс 0xff является "специфическим для вендора" ("vendor specific").
 */
#define USB_CFG_INTERFACE_CLASS     3
#define USB_CFG_INTERFACE_SUBCLASS  0
#define USB_CFG_INTERFACE_PROTOCOL  0
/* См. спецификацию USB, если Вы хотите, чтобы устройство отвечало требованиям
 * существующего класса или протокола. Следующие классы должны быть установлены
 * на уровне интерфейса:
 * HID class 3, нетребуется подклассов и протоколов (может оказаться удобным!)
 * CDC class 2, используйте подкласс 2 и протокол 1 для ACM
 */



Добавлено через 2 минуты и 55 секунд
И сразу вопрос: Подскажите, пожалуйста, как передавать БОЛЬШЕ одного бита? Просто менять состояние PORTB.0?
PM MAIL   Вверх
mr_smit
Дата 3.11.2010, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 1
Всего: 4



Может байта? Шли друг за другом байты и всё. А если нужна скорость, то лучше не заморачиваться с HID и использовать USB <-> RS232 переходник.
PM MAIL   Вверх
pvabox
Дата 4.11.2010, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Цитата(mr_smit @  1.11.2010,  09:06 Найти цитируемый пост)
Да и ещё, объясните эту конструкцию, я чего то не понимаю:

Код

  LEDs:= 0;
  If CheckBox0.Checked then LEDs:= LEDs+1;
  If CheckBox1.Checked then LEDs:= LEDs+2;
  If CheckBox2.Checked then LEDs:= LEDs+4;
  If CheckBox3.Checked then LEDs:= LEDs+8;
  If CheckBox4.Checked then LEDs:= LEDs+16;
  If CheckBox5.Checked then LEDs:= LEDs+32;
  If CheckBox6.Checked then LEDs:= LEDs+64;
  If CheckBox7.Checked then LEDs:= LEDs+128;


Понятно что LEDs это байт, т.е. 8 бит. Причем тут 1,2,4,8,16,32,64,128. С "делфи битами" не приходилось работать.



Цитата(xvr @  1.11.2010,  11:35 Найти цитируемый пост)
Это степени двойки. В бинарном виде это будет
00000001
00000010
00000100
00001000
00010000
00100000
01000000
Если эти значения сложить, то в соответствующей позиции суммы появятся единички


xvr правильно ответил.

Чтобы не заморачиваться и уменьшить количество машинного кода и вычислений, я работаю и передаю в микроконтроллер десятичное число. При записи этого числа в порт PORTB микроконтроллер сам устанавливает соответствующие биты на выходе. 0 - соответствует состоянию 00000000, а 255 - соответственно 11111111. Для включения n-го светодиода, я увеличиваю переменную LEDs на 2 в степени n (n=0..7).

Цитата(AlexART @  2.11.2010,  15:10 Найти цитируемый пост)
И сразу вопрос: Подскажите, пожалуйста, как передавать БОЛЬШЕ одного бита? Просто менять состояние PORTB.0?


Не понятен вопрос, мы вроде передаем уже 8 бит (1 байт), может имелось ввиду как передавать БОЛЬШЕ одного байта?

Цитата(mr_smit @  3.11.2010,  10:40 Найти цитируемый пост)
А если нужна скорость, то лучше не заморачиваться с HID и использовать USB <-> RS232 переходник.


Ну да, смотря для чего использовать. Для цветомузыки, например, скорость переключения в 10 мс это весьма большая скорость. Я в своем плагине для Winamp-а использовал эффект стробирования, работает на ура, с яркими светодиодами по глазам бьет конкретно. Можно даже увеличить длину репорта и передавать информацию о яркости свечения светодиода (через ШИМ), тогда время переключения увеличится до 100 мс и для плавных переключений это будет совершенно незаметно.

Это сообщение отредактировал(а) pvabox - 4.11.2010, 23:15
PM MAIL   Вверх
pvabox
Дата 5.11.2010, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Цитата(mr_smit @  1.11.2010,  08:48 Найти цитируемый пост)
pvabox, давно мечтаю сделать что то подобное. Насмотрелся на ютубе на кубы из светодиодов.... класс...Выложи хотя бы фото своего устройства...!!!!! Жутко интересно посмотреть!!! Очень заинтересовало.


Пожалста

user posted image

PM MAIL   Вверх
AlexART
Дата 8.11.2010, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.11.2010

Репутация: нет
Всего: нет



Извиняюсь, больше одного байта. Всё, уже понял, спасибо.
PM MAIL   Вверх
mr_smit
Дата 9.11.2010, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 1
Всего: 4



Цитата(pvabox @ 5.11.2010,  00:10)
Цитата(mr_smit @  1.11.2010,  08:48 Найти цитируемый пост)
pvabox, давно мечтаю сделать что то подобное. Насмотрелся на ютубе на кубы из светодиодов.... класс...Выложи хотя бы фото своего устройства...!!!!! Жутко интересно посмотреть!!! Очень заинтересовало.


Пожалста


А в работе? Видео хотелось бы. Хоть на телефон сними.
PM MAIL   Вверх
pvabox
Дата 11.11.2010, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Хорошо, чуть позже выложу. Но световые эффекты сильно зависят от программы управления и внешнего оформления. У меня девайс работает как прожектор, а в кубе смотрелось бы иначе. В плагине под Winamp у меня реализовано несколько режимов работы светодиодов: зеркальный, частотный, амплитудный, одиночный, а так же добавлены эффекты: инверсия и стробирование. К сожалению, все светодиоды работают в режиме "горит - не горит". Если будет время, думаю ввести режим управления яркостью светодиода, в зависимости от музыкального сопровождения. Хотя, можно немного доработать программу МК и реализовать режим плавного погасания светодиода. Причем скорость погасания будет зависеть от времени свечения. При быстрой музыке этот эффект не будет заметно проявляться, а при медленной получится необычайная световая картина.
PM MAIL   Вверх
darksilence
Дата 21.12.2010, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.11.2010

Репутация: нет
Всего: нет



У меня проблема следующего рода:
На контроллере висит кнопка, по нажатию этой кнопки КОНТРОЛЛЕР должен передать какие то данные в ХОСТ. Как сделать это. че в Делфе где прописано должно быть. прерывание слушать. 
Как вариант конечно можно постоянно хостом опрашивать девайс. но это плохой вариант. Как быть? =) 
PM MAIL   Вверх
mr_smit
  Дата 22.12.2010, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 1
Всего: 4



Цитата(darksilence @ 21.12.2010,  21:09)

Как вариант конечно можно постоянно хостом опрашивать девайс. но это плохой вариант. 

Ну во-первых кто тебе сказал что это плохой вариант??? Я с кнопкой так и делал.

А во-вторых вот: http://www.radiokot.ru/circuit/digital/pcmod/16/ Там и исходники есть.
PM MAIL   Вверх
darksilence
Дата 22.12.2010, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.11.2010

Репутация: нет
Всего: нет



Это не то. там программа хоста постоянно опрашивает, а не контроллер сам инициализирует передачу данных хосту. Я нашел получше пример, но он у меня не запускается. щас буду его мучать
http://radioelectronika.ru/?mod=full_cxema&cxemi_id=465

Благо он разобран детально. и мне придется самому строить HID дескриптор.
PM MAIL   Вверх
AlexART
Дата 23.12.2010, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.11.2010

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
KoTeKoT
  Дата 25.12.2010, 04:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 24.12.2010

Репутация: нет
Всего: нет



Приветствую всех!
Возможно не туда (если что перенаправьте) , но я уже просто не знаю что делать и в чем искать причину!
Уже несколько месяцев пользую проект "hid-data" подкоректировав его под свои нужды в связке с Delphi. И все шло норм, Но после очередной поездки на работу с платой этой - врубаю а ЮСБ пишет "Устройство не опознано" Как так? ПереПрозвонил по 20 раз уже все. Обрывов нет, коротких тоже... Ради интереса позаливал разные варианты прошивок и из "hid-custom-rq" и разные модификации "hid-data" - Все равно не опознано! Но прошивается без ошибок (тоесть с кварцом и кондерами я так понял все в норме) и если прописать  "DDRB  = 0xFF;" между "DBG1(0x00, 0, 0);" и  "odDebugInit();" то светятся диоды как и положено. НО ЮСБ "не опознано". Подтолкните плз в какую сторону рыть... уже 3-й день над девайсом этим сижу...
PM MAIL   Вверх
darksilence
Дата 25.12.2010, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.11.2010

Репутация: нет
Всего: нет



В другой комп пробовал ставить девайс?  Как вариант сгорел стабилитрон, если ты на нем схему делал, т.е. по шинам данных идет 5В вместо 3-х. 
PM MAIL   Вверх
KoTeKoT
  Дата 25.12.2010, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 24.12.2010

Репутация: нет
Всего: нет



Пробовал с 3-мя компами (2 ХР и 1 Win7) одно и тоже... Делал на диодах (прозвонил - не пробитые): user posted image  
И кстати замерял напругу - такое впечатление что ни R1 ни R2 нет... (тоесть между выводом USB1 и PD2 = USB1 и USB3 = 4,93 В) а (между выводом USB4 и PD4 = USB4 и USB2 = 2,97 В) Но при этом резюки исправно показывают 68 Ом. А между PD2 и PD4 так же как и между USB2 и USB3  = 2,95 В.

Это сообщение отредактировал(а) KoTeKoT - 25.12.2010, 20:51
PM MAIL   Вверх
darksilence
Дата 25.12.2010, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.11.2010

Репутация: нет
Всего: нет



впринципе R2 и R1 особо на схему и не влияют. Но как факт, что МК должен питаться от 3,6В не больше. и выдавать на ножки PD2,PD4 должен такое же напряжение. 
Я толком не понял вашу запись 
Цитата

тоесть между выводом USB1 и PD2 = USB1 и USB3 = 4,93 В) а (между выводом USB4 и PD4 = USB4 и USB2 = 2,97 В) 

Напряжение нужно мерить относительно общего провода. А то что вы написали USB1 и PD2 = USB1 и USB3 = 4,93 В.

напряжение относительно земли:
USB1 = 5V
USB2=USB3=3.3V~3.6V
USB4 = 0V

VCC = ~3.7 V  - вот это важно

вобщем думаю проблема в разводке. вполне мог какой то прводник отвалиться. также советую проверить фьюзы и попробовать прошить другую аналогичную МК.

Это сообщение отредактировал(а) darksilence - 25.12.2010, 22:54
PM MAIL   Вверх
KoTeKoT
Дата 25.12.2010, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 24.12.2010

Репутация: нет
Всего: нет



 Пардон за непраильное обьяснение.
Напряжение на PD4 относительно земли 2,98 В
 на PD2 относительно земли 0,03 В, а относительно питания 4,98 В
Вроде бы правильно написал.. 
И повотрюсь - это устройство уже работало на это й же плате и этим же МК.... я уже на невероятные вещи грешил (мож каким макаром статика на МК вдарила)... но он же прошивается нормально!

Это сообщение отредактировал(а) KoTeKoT - 25.12.2010, 23:09
PM MAIL   Вверх
darksilence
Дата 25.12.2010, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.11.2010

Репутация: нет
Всего: нет



Кстати о прошиввании. Какой у вас программатор? если типа AVR910, то он сам шлет меандр и ему не нужен тогда внешний кварц на прошиваемом МК для программирования. =) с фьзами все норм? Все таки попробуйте атмегу поменять. 
PM MAIL   Вверх
KoTeKoT
Дата 25.12.2010, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 24.12.2010

Репутация: нет
Всего: нет



Та нет , программатор 5 проводков )) но шил на нем 2 атмеги без проблемм. Может кварц не заводится... осцилографа нет, а как без него проверить без понятия... Ну а если перепрошивается отлично (мигает светиками с другой прошивкой) то кварц с кондерами в норме??? А с фьюзами вроде все в норме, я как makefile исправил сначала, так и не менят его и прошивал с ним через AVR-Dude несколько раз без проблемм.   Лады, сейчас поменяю атмегу!
---
Прошил другую Атмегу8 - тоже самое! Не опознано! Но прошылась нормально (после подключения в ЮСБ засветились светодиоыды, как и написано в программе зашивал ЭТУ: http://forum.vingrad.ru/index.php?showtopi...t&p=2050245 )... выходит в пайке или с компонентами что то не так... но только что проверил еще ра - обрывов и коротких точно нет!!! Что ж компоненты по одному менять? Маразм... мистика...

Это сообщение отредактировал(а) KoTeKoT - 26.12.2010, 00:37
PM MAIL   Вверх
zvyagaaa
Дата 27.12.2010, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.1.2008

Репутация: нет
Всего: нет



а можно ли как-то управлять еще и яркостью светодиодов по этой схеме?
я так понимаю, что нужно организовать ШИМ, а вот как - не знаю, может подскажите?
PM MAIL   Вверх
darksilence
Дата 27.12.2010, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.11.2010

Репутация: нет
Всего: нет



Если не сильно вникая, то проще через CodeVisionAVR. там есть утилита встроенная - автокомпоновщик или как ее еще назвать. вобщем там выбрать использование таймера для ШИМ. из него взять регистры настройки таймера (TCCR,TCNT,OCR) и скопировать в ваш проект.
А лучше разобраться по даташиту. На сайте Атмеля есть аппноуты  с примерами для WinAVR. 
Главное если будете использовать прерывания таймера не задеть прерывание USB протокола, если использовать ненулевые конечные точки.
PM MAIL   Вверх
zvyagaaa
Дата 29.12.2010, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.1.2008

Репутация: нет
Всего: нет



я к чему спрашиваю, а вообще, это реально чтобы в проект, который выкладывался тут, добавить на все 8! портов программный шим? Просто то, что я в сети встречал, сделано, обычно на меге 8, 48 и т.д., т.е. на более серьезных контроллерах, с большим объемом памяти и прочее...
PM MAIL   Вверх
darksilence
Дата 29.12.2010, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.11.2010

Репутация: нет
Всего: нет



Я так понимаю особого опыта работы с МК нет да и знания слабые, никого не хочу обидеть. 
В атемеге8 всего 2 порта по 8 пинов и 1 порт с 7-ью пинами. 
В проекте VUSB нам оставлено суммарно 18 пинов (касательно ATMEGA8, если не использовать аппратной возможности отключения от USB). Как хотите так и управляйте ими, особых ограничений нет. прерываниями таймера вы программу не собьете, единственно, что не советуется - выключать прерывания вообще(т.е. использовать комманду cli()). 
PM MAIL   Вверх
zvyagaaa
Дата 29.12.2010, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.1.2008

Репутация: нет
Всего: нет



да, к сожалению, ни опыта ни знаний по работе с мк пока нету, кроме как прошивки при помощи программатора и PonyProg. :( сам-то принцип как шим организуется на микроконтроллере я понимаю, а как это в код оформить - не понимаю... вот помог бы кто-нибудь что конкретно нужно написать в исходнике.
PM MAIL   Вверх
darksilence
Дата 30.12.2010, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.11.2010

Репутация: нет
Всего: нет



Код


//формирование программного ШИМа
#include <avr/io.h>
#include <avr/interrupt.h>  


SIGNAL(TIMER1_OVF_vect)  //прерывание по переполнению
{
PORTB=0;                       //выключаем ВЕСЬ PORTB

OCR1AH+=10;           
OCR1AL=0x00;
}

SIGNAL(TIMER1_COMPA_vect)  //прерывание по сравнению
{                                               //срабатывает когда TCNT1=OCR1A
PORTB=0xff;                             //Включаем ВЕСЬ PORTB
}
/* ------------------------------------------------------------------------- */

int main(void)
{
DDRB=0xff;


TCCR1A=0x00;
TCCR1B=0x01;             //таймер считает с частотой МК

OCR1AH=0x00;
OCR1AL=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x14;        //прерывание по переполнению и сравнению

sei();             //разрешаем прерывания 

    for(;;){                /* цикл событий main */

    }

}


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


Это сообщение отредактировал(а) darksilence - 30.12.2010, 01:22
PM MAIL   Вверх
zvyagaaa
Дата 2.1.2011, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.1.2008

Репутация: нет
Всего: нет



для тиньки не хватит памяти, люди говорят  smile надо как минимум 4 кбайта памяти,а в ней 2!
PM MAIL   Вверх
darksilence
Дата 4.1.2011, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.11.2010

Репутация: нет
Всего: нет



ну если для тиньки CDC проекты катят (которые USB-COM), то уж ШИМ с USB сделать памяти много не надо
PM MAIL   Вверх
zvyagaaa
  Дата 11.1.2011, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.1.2008

Репутация: нет
Всего: нет



Похоже, что начал по-тихоньку вникать, что да как в МК этих, много читаю, примеры смотрю и прочее: 
Посмотрите код - похоже на правду, что я написал? Мне нужно на базе Attiny 2313 сделать 6 управляемых через USB светодиодов, регулируемые ШИМом. Так как аппаратных, как я понял, можно использовать только 2, то я попробовал его сделать через программную реализацию. Реализовал я его вот так:
Код

/* Name           : main.c
 * Project        : LED USB Device
 * Author         : Vitaliy Popov
 * Target MCU     : ATtiny2313
 * InterfaceClass : HID
 * Data update    : 2009-08-08
 * Tabsize        : 4
 * Copyright      : (c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH
 * License        : GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
 * This Revision  : $Id: main.c 692 2008-11-07 15:07:40Z cs $
 */

/*
 Этот простой пример показывает как можно использовать протокол HID для передачи
данных в микроконтроллер AVR и управлять 8-ми битным портом. Он применим для многих
AVR с небольшими изменениями. Не используются никакие специальные аппаратные
ресурсы, кроме INT0. Вы можете изменить usbconfig.h для других выводов I/O USB.
Пожалуйста, имейте в виду, что USB D+ должен быть подсоединен к выводу INT0, либо,
как минимум, также должен быть соединен с INT0.
*/

#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>  /* требуется для sei() */
#include <util/delay.h>     /* требуется для _delay_ms() */
#include <avr/pgmspace.h>   /* требуется для usbdrv.h */
#include "usbdrv.h"
#include "oddebug.h"        /* пример для использования макроса отладки */

#define nop() {asm("nop");}//функция необходимая для реализации задержки

unsigned int l0,l1,l2,l3,l4,l5; //уровни яркости светодиодов LED0...LED5 (соотвественно)
unsigned int x, ms;

// функция задержки
void delay_ms(int ms)
{
for (x=ms;x>0;x--)
nop ();
}

// функция включения красного светодиода
void ledon0(int ms)
{
  PORTB &= ~_BV(PB0);
    delay_ms(ms);
}

// функция выключения красного светодиода
void ledoff0(int ms)
{
   PORTB |= _BV(PB0);
     delay_ms(ms);
}

// функция включения зеленого светодиода
void ledon1(int ms)
{
  PORTB &= ~_BV(PB1);
    delay_ms(ms);
}

// функция выключения зеленого светодиода
void ledoff1(int ms)
{
   PORTB |= _BV(PB1);
     delay_ms(ms);
}

// функция включения синего светодиода
void ledon2(int ms)
{
  PORTB &= ~_BV(PB2);
    delay_ms(ms);
}

// функция выключения синего светодиода
void ledoff2(int ms)
{
   PORTB |= _BV(PB2);
     delay_ms(ms);
}

// функция включения красного 2 светодиода
void ledon3(int ms)
{
  PORTB &= ~_BV(PB3);
    delay_ms(ms);
}

// функция выключения красного 2 светодиода
void ledoff3(int ms)
{
   PORTB |= _BV(PB3);
     delay_ms(ms);
}

// функция включения зеленого 2 светодиода
void ledon4(int ms)
{
  PORTB &= ~_BV(PB4);
    delay_ms(ms);
}

// функция выключения зеленого 2 светодиода
void ledoff4(int ms)
{
   PORTB |= _BV(PB4);
     delay_ms(ms);
}

// функция включения синего 2 светодиода
void ledon5(int ms)
{
  PORTB &= ~_BV(PB5);
    delay_ms(ms);
}

// функция выключения синего 2 светодиода
void ledoff5(int ms)
{
   PORTB |= _BV(PB5);
     delay_ms(ms);
}


/* ------------------------------------------------------------------------- */
/* ----------------------------- Интерфейс USB ----------------------------- */
/* ------------------------------------------------------------------------- */

PROGMEM char usbHidReportDescriptor[21] = {  /* дескриптор репорта USB */
    0x05, 0x08,                 // USAGE_PAGE (LEDs)
    0x09, 0x4b,                 // USAGE (Generic Indicator)
    0xa1, 0x01,                 // COLLECTION (Application)
    0x15, 0x00,                 //   LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,           //   LOGICAL_MAXIMUM (255)
    0x75, 0x08,                 //   REPORT_SIZE (8)
    0x95, 0x01,                 //   REPORT_COUNT (1)
    0x09, 0x00,                 //   USAGE (Undefined)
    0xb2, 0x02, 0x01,           //   FEATURE (Data,Var,Abs,Buf)
    0xc0                        // END_COLLECTION
};

/*
 Поскольку мы задали только один feature-репорт, мы не используем идентификаторы
report-ID (которые должны быть в первом байте репорта). Весь репорт состоит из
одного 8-ми битового блока неопределенных данных.
*/

/* ------------------------------------------------------------------------- */

/*
 usbFunctionRead() вызывается, когда хост запрашивает кусок данных от устройства.
 Для большей информации см. документацию в usbdrv/usbdrv.h.
*/

uchar   usbFunctionRead(uchar *data, uchar len)
{
    data[0] = PINB;             /* читаем байт данных из порта PB */
    len = 1;                    /* считали один байт данных */
    return len;                 /* возвращаем кол-во считанных байт */
}

/*
 usbFunctionWrite() вызывается, когда хост посылает кусок данных в устройство.
 Для большей информации см. документацию в usbdrv/usbdrv.h.
*/

uchar   usbFunctionWrite(uchar *data, uchar len)
{
    l0 = data[1];
    l1 = data[2];
    l2 = data[3];
    l3 = data[4];
    l4 = data[5];
    l5 = data[6];


    return 1;                   /* возвращаем 1 - все данные успешно приняты */
                                /* первый байт всегда равен нулю, его за борт
}

/* ------------------------------------------------------------------------- */

/*
 usbFunctionSetup вызывается, когда драйвер принимает транзакцию SETUP от хоста,
которому не отвечает драйвер непосредственно (на практике: запросы класса
и вендора). Все управляющие передачи стартуют с транзакции SETUP, где хост
сообщает параметры следующтих (опционально) передач данных. Данные SETUP
доступны в параметре 'data', который может (и должен) быть преобразован
в 'usbRequest_t *' для лучшего дружественного для пользователя доступа
к параметрам.
 Для большей информации см. документацию в usbdrv/usbdrv.h.
*/

usbMsgLen_t usbFunctionSetup(uchar data[8])
{
usbRequest_t    *rq = (void *)data;

    if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS){    /* запрос HID class */
        if(rq->bRequest == USBRQ_HID_GET_REPORT){  /* wValue: ReportType (highbyte), ReportID (lowbyte) */
            /* поскольку мы имеем только один тип репорта, мы можем игнорировать репорт-ID */
            return USB_NO_MSG;  /* использование usbFunctionRead() для получения данных хостом от устройства */
        }else if(rq->bRequest == USBRQ_HID_SET_REPORT){
            /* поскольку мы имеем только один тип репорта, мы можем игнорировать репорт-ID */
            return USB_NO_MSG;  /* использование usbFunctionWrite() для получения данных устройством от хоста */
        }
    }
    //else{
        /* игнорируем запросы типа вендора, мы их все равно не используем */
    //}
    return 0;
}

/* ------------------------------------------------------------------------- */

int main(void)
{
uchar   i;

    wdt_enable(WDTO_1S);
    /* Даже если Вы не используете watchdog, выключите его здесь. На новых устройствах
     *  состояние watchdog (вкл/выкл, период) СОХРАНЯЮТСЯ ЧЕРЕЗ RESET!
     */
    DBG1(0x00, 0, 0);       /* отладочный вывод: стартует тело main */
    /* Состояние RESET: все биты порта работают как входы без нагрузочных резисторов (pull-up).
     *  Это то, что нужно для входов USB D+ и D-.
     */
    DDRB  = 0xFF;           /* конфигурируем порт PB для вывода данных */
    odDebugInit();
    usbInit();
    usbDeviceDisconnect();  /* запускаем принудительно реэнумерацию, делайте это, когда прерывания запрещены! */
    i = 0;
    while(--i){             /* эмулируем USB дисконнект на время > 250 мс */
        wdt_reset();
        _delay_ms(1);
    }
    usbDeviceConnect();
    sei();                  /* общее разрешение прерываний */
    DBG1(0x01, 0, 0);       /* отладочный вывод: вход в цикл main */
    for(;;){                /* цикл событий main */
      DBG1(0x02, 0, 0);   /* отладочный вывод: повторы цикла main */
      wdt_reset();

            ledon0(l0);
            ledoff0(255-l0);
            ledon1(l1);
            ledoff1(255-l1);
            ledon2(l2);
            ledoff2(255-l2);
            ledon3(l3);
            ledoff3(255-l3);
            ledon4(l4);
            ledoff4(255-l4);
            ledon5(l5);
            ledoff5(255-l5);

      usbPoll();
    }
    return 0;
}

/* ------------------------------------------------------------------------- */



В принципе, понимаю, что реализация топорная, может можно как-то улучшить, и вообще - будет ли такое работать? Такое ощущение, что все это дело будет нещадно тормозить :(
Только вот, зараза, не компилируется ни пса :( Выдает ошибку на последнюю строку 
Код

../main.c:261: error: expected declaration or statement at end of input

Прикладываю архив проекта на AVR Studio 4. Я правильно все делаю, или нет?

Спасибо.

Это сообщение отредактировал(а) zvyagaaa - 11.1.2011, 09:55

Присоединённый файл ( Кол-во скачиваний: 50 )
Присоединённый файл  main.rar 111,83 Kb
PM MAIL   Вверх
darksilence
Дата 12.1.2011, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.11.2010

Репутация: нет
Всего: нет



у тебя функция usbFunctionWrite не закончена.
в смысле закрывающую скобку "END" ты закомментировал. вот поэтому и error. 
ИМХО проще искать ошибки в ProgrammersNotepad, идущим в комплекте с WINAVR. собственно и компилировать от туда же. Я на AVRStudio в обиде. она без makefile откзаывается мне чето делать. а раз так, то лучше я не буду ей пользоваться и все =) 

А по счет программы.. мудрено как то все. можно и покрасивше написать, но если будет работать, то все здорово =) Не забудьте правильно фьюзы запрограммировать ;-)
PM MAIL   Вверх
zvyagaaa
Дата 12.1.2011, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.1.2008

Репутация: нет
Всего: нет



darksilence, огромное спасибо за то, что надоумили меня воспользоваться ProgrammersNotepad - тут хоть скобки можно проверить smile конечно, до delphi+CnWizard ему далеко, но все равно.
Там еще ошибки были. Поэтому выложу еще откомпилированный проект. Еле разобрался что этому компилятору надо, ну до чего же он не информативные сообщение выдает при ошибках, вот сиди и думай, что не так сделал smile
а, да, в железе еще не проверялась работа, пока просто откомпилировал.
Правда, пришлось все же оптимизировать код, как я и предполагал - код чисто индусский был smile памяти не хватило даже на сильной оптимизации: вот как я все включение/выключение светодиодов переделал:
Код

// функция ШИМ светодиодов
void led0(int led,int ms)
{
  PORTB &= ~_BV(led);
    delay_ms(ms);
  PORTB |= _BV(led);
     delay_ms(255-ms);
}

ну и соответственно ее вызываю:
Код

        led0(PB0,l0);
        led0(PB1,l1);
        led0(PB2,l2);
        led0(PB3,l3);
        led0(PB4,l4);
        led0(PB5,l5);

так-то оно ловчее будет smile

Это сообщение отредактировал(а) zvyagaaa - 12.1.2011, 08:22

Присоединённый файл ( Кол-во скачиваний: 55 )
Присоединённый файл  main.rar 147,59 Kb
PM MAIL   Вверх
darksilence
Дата 12.1.2011, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.11.2010

Репутация: нет
Всего: нет



у нас уже оффтоп пошел, на самом деле..
Я тебе советую разобраться сначала с ШИМом. сделай все тоже самое только без юсб и проверь в Proteus (программа эмулирует готовое устройство. очень удобная вещь). если твоя реализация будет работать, то все норм =) Мне влом в тоем коде разбираться, тем более что когда сам ошибки исправишь, поймешь лучше ;-)

P.S. не получиться в твое программе такое время моргания светодиодами, т.к. они у тебя последовательно моргают и период моргания одного светодиода = сумме всех delay в одном цикле. а у тебя там больше секунды может выйти. надо переделать =) 

Это сообщение отредактировал(а) darksilence - 12.1.2011, 19:22
PM MAIL   Вверх
mr_smit
Дата 2.2.2011, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 1
Всего: 4



Почитайте: http://avrhobby.ru/index.php?option=com_co...k&Itemid=53

Там 3 части. Подробнейшим образом всё описано. Особенно части 2 и 3.
PM MAIL   Вверх
pvabox
Дата 11.2.2011, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



 Хочу предложить замечательный сайт с аналогичным проектом, но с использованием 18 светодиодов. Все разработки на сайте представлены с открытым исходным кодом. Вообще, огромная благодарность автору за создание такого сайта. Ссылка
PM MAIL   Вверх
Juris
Дата 23.7.2011, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.7.2011

Репутация: нет
Всего: нет



Уважаемый Pvabox, доступна ли каким-то образом Ваша разработка плагина Winamp? Я неисправимый фанат разного рода цветомузык :) Кстати, конструкция по вашей предидущей ссылке замечательная вещь, я там даже продвигал кое-какие идеи в коментариях.
Буду признателен если возможно попробовать и Вашу разработку.
Спасибо!

Это сообщение отредактировал(а) Juris - 23.7.2011, 19:19
PM MAIL Skype   Вверх
pvabox
Дата 18.9.2011, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



 Было время, когда я мечтал собрать простейшее устройство для управления светодиодами через USB. Переписывался с Игорем Чешко, основателем программной реализации USB протокола на МК. Но он мне ничем не помог, намекнул, чтоб сам во всем разбирался. Благодаря чудесным разработкам от OBJECTIVE DEVELOPMENT Software GmbH для AVR - разобрался. Писал автору проекта http://shunmax.narod.ru/index.html чтоб помог разобраться с плагином, но ответ был точно таким же. Пришлось все изучать, во всем разбираться и экспериментировать.
 Меня цветомузыка интересует с детства, а сейчас столько возможностей для реализации! Но, к сожалению, нам устроили такую жизнь, что думаешь о том, как прокормить семью и на творчество времени не остается. Поэтому, вот уже два года я не усовершенствую свой проект. Что у меня получилось, можете посмотреть в прикрепленном файле, это dll-ка визуализации для Winamp-а. Я придумал совершенно новый алгоритм включения ламп в зависимости от музыкального произведения, но пока не реализовал его. Есть задумка написать прогу управления лампами от MIDI файла, где включением ламп управляют ноты. Это очень простой алгоритм. Кроме того, можно использовать отдельный трек для управления лампами, где ноты не воспроизводятся. Получается впечатляющая картина музыки и света. Будет время, поделюсь результатами.
 Будут новые идеи или предложения пишите, обсудим.

 Мой пример модуля визуализации под Winamp для моего проекта.

PS: Архив обновлен!

Это сообщение отредактировал(а) pvabox - 23.9.2011, 10:12

Присоединённый файл ( Кол-во скачиваний: 96 )
Присоединённый файл  vis_LED.rar 186,11 Kb
PM MAIL   Вверх
Juris
Дата 21.9.2011, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.7.2011

Репутация: нет
Всего: нет



Спасибо Pvabox за файл! Маленькое предупреждение если кто ещё будет пробовать: без подключенного деваиса при запуске плагина Windows (XP) будет засыплен бесконечными сообщениями об ошибке, придётса "убить" Winamp. Во всяком случае на моём компе так. Деваис ещё не спаял.
PM MAIL Skype   Вверх
pvabox
Дата 22.9.2011, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Цитата(Juris @  21.9.2011,  12:11 Найти цитируемый пост)
Маленькое предупреждение если кто ещё будет пробовать: без подключенного деваиса при запуске плагина Windows (XP) будет засыплен бесконечными сообщениями об ошибке, придётса "убить" Winamp.

Пардоньте, эта старая версия файла, для его работы нужен драйвер LptWdmIO, с помощью которого при отсутствии устройства USB, данные передаются в LPT порт. Ссылку перезалил последней версией. Проверял на другом компе - все прекрасно работает. Простите за не внимательность.
PM MAIL   Вверх
pvabox
Дата 23.9.2011, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Обновил и дополнил архив проекта в посте http://forum.vingrad.ru/index.php?showtopi...t&p=1996458
PM MAIL   Вверх
megabyte
Дата 25.9.2011, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 11.1.2007

Репутация: нет
Всего: нет



 Всем привет!
 Я работаю над полноскоростным обменом по USB . Пытаюсь разобраться по книге Агурова. Критику не могу в его адрес высказать, человек писал видимо, что знает. Я использую контроллеры AT90 c USB модулем на борту. В моем проекте нужна скорость 8Мбит/сек - а это USB2.0 . Над этим и бьюсь.
 Готовый вариант устройства обмена интересует в плане ''от чего то оттолкнуться ''. А так хочу все сам сделать. Кстати в Proteus есть модуль USB с отладчиком - показывает процесс обмена данными в режиме он-лайн, также в эта программа имеет драйвер (в примерах) который устанавливается как устройство и можно в полном объеме отлаживать устройство. Правда там поддерживаемых контроллеров не много.
 
 Так что если тема интересна - буду дальше писать о результатах.
  

Это сообщение отредактировал(а) megabyte - 25.9.2011, 16:56
PM MAIL   Вверх
UniBomb
Дата 25.9.2011, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



Цитата(megabyte @  25.9.2011,  17:54 Найти цитируемый пост)
Над этим и бьюсь

Слышали про lufa?


--------------------
PM MAIL ICQ Skype   Вверх
Juris
Дата 26.9.2011, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.7.2011

Репутация: нет
Всего: нет



Уважаемый Pvabox, могли бы Вы сделать screenshot работаещего плугина Winamp и предоставить сдесь? Дело в том, что даже если в английском Windows (XP) включить поддержку русских системных фонтов, всёравно вместо букв только "?". А так можно будет по картинке сориентироватся smile
Спасибо!
PM MAIL Skype   Вверх
pvabox
Дата 27.9.2011, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Juris, для отображения кириллицы воспользуйтесь прикрепленным файлом, а скриншот вот такой

user posted image

Присоединённый файл ( Кол-во скачиваний: 40 )
Присоединённый файл  Cyrillic.zip 1,20 Kb
PM MAIL   Вверх
Juris
Дата 27.9.2011, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.7.2011

Репутация: нет
Всего: нет



Спасибо, pvabox! Вы очень helpful  smile

P.S.: А это не Ваше? Похоже как то по оформлению.
http://shunmax.narod.ru/index.html

Это сообщение отредактировал(а) Juris - 27.9.2011, 14:54
PM MAIL Skype   Вверх
pvabox
Дата 27.9.2011, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Нет, я о нем писал в этом посте, хотя действительно, что-то взял из оформления его плагина. 
PM MAIL   Вверх
andreysh
Дата 29.10.2011, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 29.10.2011

Репутация: нет
Всего: нет



Только что разобрался с исходником с первой страницы.  HIDKomponente.zip smile 

Правда при разработке устройства заказывал 64бит буфер (с запасом)

!!!! пока не подправил на двойку не заработало 
......
ToWrite := CurrentDevice.Caps.OutputReportByteLength;
     
    for I := 0 to (ToWrite - 2) do

Я так понимаю CurrentDevice.Caps.OutputReportByteLength=65; 65-2=63; 63+0=64;  smile 

Ну да ладно планирую сделать свтильник, только не через шим а использовать микросхему ULN2003AN
Анод одного диода подключается сразу к двум ножкам контроллера, к одной прямо, второй через
ограничивающий резистор (подобрать на макетке по люксометру половину яркости).
Итого: 1-Полная яркость, 2-Пол Яркости, 3Выключен. 
2*3RGB=6ножек одного порта будет достаточно. Глаз не отличит яркости по шим, сильно большая пушка по воробьям IMHO
PM MAIL   Вверх
zvyagaaa
Дата 30.10.2011, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.1.2008

Репутация: нет
Всего: нет



pvabox
А исходником плагина поделитесь? Пожалуйста smile
PM MAIL   Вверх
Maks55
Дата 15.11.2011, 05:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 13.10.2011

Репутация: нет
Всего: нет



Парни подскажите, компонент jvhiddevicecontroller работает в вин7? А то при обращении к HID устройствам пишет "device cannot be opened". Пример идущий с компонентом не работает. :( 
PM MAIL   Вверх
hash666
Дата 15.11.2011, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 15.11.2011

Репутация: нет
Всего: нет



2 Maks55, а константы правильные стоят? ProductName, VendorID, ProductID.

PM MAIL   Вверх
Maks55
Дата 16.11.2011, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 13.10.2011

Репутация: нет
Всего: нет



У меня просто не получается вывести список HID устройств, вот код:

procedure TMainForm.HidCtlDeviceChange(Sender: TObject);
begin
  DeviceList.Clear;
  HidCtl.Enumerate;
end;

function TMainForm.HidCtlEnumerate(HidDev: TJvHidDevice;
  const Idx: Integer): Boolean;
begin
  DeviceList.Items.Add(
    Format('%.4x/%.4x', [HidDev.Attributes.VendorID,
      HidDev.Attributes.ProductID]));
  Result := True;
end;

В системе 6 HID устройств и при запуске программы я получаю 6 раз: Project  .exe raised exception class EControllerError with message "device cannot be opened",
т.е. я вообще нимогу от устройств никакой инфы получить.

Что я делаю не так? Прошу помощи!

ЗЫ  Заметил, что готовые кзешники из демо работают и отображают HID устройства, а после компиляции исходников device cannot be opened. Может у меня rad studio поломался???

Это сообщение отредактировал(а) Maks55 - 16.11.2011, 10:44
PM MAIL   Вверх
jekatj1
Дата 21.3.2012, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 27.12.2011

Репутация: нет
Всего: нет



В модуле SetupApi.pas строка 62
  ANYSIZE_ARRAY = 1;
замени на:
  ANYSIZE_ARRAY = 1024;

В модуле JvHidControllerClass.pas срока 1751
  FunctionClassDeviceData^.cbSize := SizeOf(TSPDeviceInterfaceDetailDataA);
заменить на:
  FunctionClassDeviceData^.cbSize := 5;

строка 149
  constructor Create(APnPHandle: HDEVINFO; ADevData: TSPDevInfoData; ADevicePath: PChar);
на:
  constructor Create(APnPHandle: HDEVINFO; ADevData: TSPDevInfoData; ADevicePath: AnsiString);

строка 1756
  PnPInfo := TJvHidPnPInfo.Create(PnPHandle, DevData, PChar(@FunctionClassDeviceData.DevicePath));
на:
  PnPInfo := TJvHidPnPInfo.Create(PnPHandle, DevData, FunctionClassDeviceData.DevicePath);

Это сообщение отредактировал(а) jekatj1 - 21.3.2012, 09:45
PM MAIL   Вверх
inpotseluev
Дата 30.7.2012, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 30.7.2012

Репутация: нет
Всего: нет



Уважаемые господа программеры!

Помогите, кто сможет. На 7 Delphi написан кусок программы с использованием HID. При первом включении все нормально. Когда USB перевтыкаешь, то HID.Enumerate возвращает ноль, так как в JvHidDeviceControllerClass.pas возвращает в TJvHidDevice(FList[I]).IsPluggedIn false. То есть он не увидел включения и события Arrival не произошло со всеми вытекающими. Пробовал объект уничтожать и создавать, вообще фигня происходит. Может надо как-то обрабатывать HIDDeviceUnplug.

Заранее спасибо!
PM MAIL   Вверх
ru775
Дата 8.12.2013, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 29.1.2013

Репутация: нет
Всего: нет



Привет, ALL!
Разработал прогу работающую со сканером штрихкода через COM порт, все отлично работает, и решил расширить функционал, и поработать с различными железяками через HID. И тут начались грабли...
Я не могу понять, можно целиком перенаправлять входящие данные со сканера работающего в режиме эмуляции клавы в свою программу? можно ли при появлении данных генерировать событие?


И самое главное, я переворошил кучу примеров, но нет ни одного рабочего где-бы данные принимались!
Если есть у кого наработки дайте, плиз.  
PM MAIL   Вверх
pvabox
Дата 30.12.2013, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



 Хочу поделиться своим проектом - светодинамической установкой для Winamp-а. Целью этого проекта было желание научиться создавать простые устройства, использующие протокол HID USB для обмена данными с компьютером. Весь проект имеет подробные пояснения и позволяет быстро разобраться новичкам в принципах работы устройства. Данный проект не претендует на оригинальность, но может быть взят за основу для разработки других устройств. В оригинальном виде, он может свободно распространяться, но только с сылкой на автора. Данное устройство можно использовать как usb-игрушку на дискотеках. Пользуйтесь, кому интересно!



Это сообщение отредактировал(а) pvabox - 19.9.2014, 19:12

Присоединённый файл ( Кол-во скачиваний: 104 )
Присоединённый файл  LED_Dynamic_USB_Device.rar 783,09 Kb
PM MAIL   Вверх
pvabox
Дата 30.12.2013, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Фото девайса.

Это сообщение отредактировал(а) pvabox - 31.12.2013, 20:00

Присоединённый файл ( Кол-во скачиваний: 55 )
Присоединённый файл  Foto_LED_Dynamic_Device.rar 734,02 Kb
PM MAIL   Вверх
pvabox
Дата 30.12.2013, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Если нужно видео работы, вышлю ссылку на youtube.

Это сообщение отредактировал(а) pvabox - 31.12.2013, 20:05
PM MAIL   Вверх
mr_smit
Дата 3.1.2014, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 1
Всего: 4



Выкладывай
PM MAIL   Вверх
radan
Дата 6.1.2014, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 26.1.2011

Репутация: нет
Всего: нет



и я видео жду!
PM MAIL   Вверх
pvabox
Дата 30.1.2014, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Обновил пост, ссылка на видео youtub работы устройства внутри архива с файлами проекта



Это сообщение отредактировал(а) pvabox - 19.9.2014, 19:22
PM MAIL   Вверх
pvabox
Дата 24.4.2014, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



А этот проект с использованием бинарной кодовой модуляции (BCM-метод), позволяющей плавно управлять восемью светодиодами.

Ссылка на видео youtub работы устройства внутри архива с файлами проекта

Это сообщение отредактировал(а) pvabox - 19.9.2014, 19:24

Присоединённый файл ( Кол-во скачиваний: 52 )
Присоединённый файл  BCM_Dynamic_USB_Device.rar 669,68 Kb
PM MAIL   Вверх
Juris
Дата 17.7.2014, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.7.2011

Репутация: нет
Всего: нет



Спасибо Pvabox за вариант с плавной сменой яркости! Может есть у Автора ещё какие интересные свето-эффектные штучки чем можно поделится с другими? smile
PM MAIL Skype   Вверх
pvabox
Дата 22.7.2014, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Cвето-эффектных больше нет, есть из других областей электроники.

Очень был бы признателен за отзывы, критику и новые идеи!
PM MAIL   Вверх
Juris
Дата 26.7.2014, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.7.2011

Репутация: нет
Всего: нет



Уважаемый Pvabox, если у Вас сейчас нет интереса по развитию светомузыкального плагина, может возможно дать мне подсказки и короткие наводки как можно покопаться в кодах, как потом скомпилировать (я плох в программировании, только общие поверхностные знания)? Как первое, я бы хотел перевести надписи в установочном окне на английский язык. Потом это можно конечно выложить для других кому нужно,  сдесь и на "Lightportal". Спасибо заранее!
PM MAIL Skype   Вверх
pvabox
Дата 29.7.2014, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Чем тут я могу помочь? Все мои исходники полностью открыты, комминтариев в исходниках более чем достаточно. Изучайте языки программирования. Google в помощь.  smile 
PM MAIL   Вверх
Juris
Дата 29.7.2014, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.7.2011

Репутация: нет
Всего: нет



Спасибо, понимаю. Спрошу иначе: если я новичок, данный проект мне подойдёт для ковыряния, или там могу быстро обломатся в сложностях? smile
PM MAIL Skype   Вверх
pvabox
Дата 8.8.2014, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



 Когда я увидел в интернете подобный проект М. Бакулина для LPT порта и статью И. Чешко о программной реализации USB на МК Atmel, то сразу же связался с ними с просьбой о помощи. Они, мягко сказать, послали меня самому во всем разбираться. Я был таким же новичком как и Вы. В итоге у меня получился свой проект такой, о каком я мечтал. Но цель была не только в проекте, но и в возможности самому во всем разобраться, понять как что работает и применить эти знаниня для реализации других устройств. Я начинал с нуля, а у Вас в руках готовое описание с комментариями и Вы еще спрашиваете: "данный проект мне подойдёт для ковыряния, или там могу быстро обломатся в сложностях?". Для ковыряния подойдет любой проект, а быстрота обломатся в сложностях зависит от желания и настойчивости.     smile 

Не, на самом деле это все для начинающих, там все элементарно!
PM MAIL   Вверх
Juris
Дата 8.8.2014, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.7.2011

Репутация: нет
Всего: нет



Спасибо за моральную поддержку! Ну чтож, "наберусь храбрости" и попробую. smile
PM MAIL Skype   Вверх
pvabox
Дата 8.10.2015, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Цитата(Juris @  8.8.2014,  21:50 Найти цитируемый пост)
Спасибо за моральную поддержку! Ну чтож, "наберусь храбрости" и попробую.


Ну что, есть результаты?
PM MAIL   Вверх
simon2012
Дата 22.6.2017, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 22.6.2017

Репутация: нет
Всего: нет



Да, мне тоже интересно. А ветка жива вообще? Последнее сообщение в 2015 году было.
PM MAIL   Вверх
pvabox
Дата 3.7.2017, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



Наверно, все уже разобрались во всем. В моем проекте все подробно расписано, думаю вопросов быть не должно.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.5967 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.