Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > помогите с проектом под Delphi дл работы с HID USB |
Автор: CROC 26.10.2008, 20:57 |
Ищу простенький проект под Delphi для работы с HID USB устройствами.. |
Автор: Mazzi 27.10.2008, 09:54 |
Тебе поможет книга Агурова "Практика программирования USB". |
Автор: CROC 27.10.2008, 21:34 | ||
вот как раз я не могу запустить проек из этой книги ![]() |
Автор: Mazzi 28.10.2008, 09:54 |
Поконкретней пожалуйста, что именно не получается? |
Автор: Mazzi 6.11.2008, 09:58 | ||||
Если точнее, то at89c5131. Ну и как операционка догадается, что нужно делать с устройством если для него нет никаких программ? |
Автор: LessNik 7.11.2008, 10:26 | ||
Драйвера в операционке есть (я про винду), в некоторых случаях может дополнительно понадобится только inf файл. Какие драйвера использовать, операционка может решить по дескрипторам, которые устройство передаёт хосту в процессе энумерации (мы же на usb мышь или клавиатуру дрова не ставим), если не поймёт, то нужно использовать inf файл, в котором будет прописана необходимая информация, но это в случае более "сложных" устройств, чем мышь или клава. |
Автор: Mazzi 7.11.2008, 11:54 | ||||
А если это не клава, а некое нестандартное устройство? Как получить доступ к его функциям без написания своей программы? |
Автор: xvr 7.11.2008, 13:01 | ||||||||
Тогда это не HID устройство - они все стандартные (для того и придумывались) Если устройство не способно прикинутся одним из HID классов, то увы, придется писать для него полноценный драйвер на хосте.
|
Автор: Mazzi 7.11.2008, 13:30 | ||||||||||
Перечислю типы HID - устройств упомянутые в книге Агурова. 1) клавиатуры и указатели 2) кнопки управления, переключатели, задвижки 3) устройства управления в видеомагнитофонах, телефонах, игровых приставках 4) устройства не требующие взаимодействия с человеком, термометры, вольтметры Что скажете? |
Автор: LessNik 7.11.2008, 15:45 | ||||
Скажу, что на одну страницу ниже в главе 6.Класс HID Агурова (стр 147) написано, что :
а также много другого полезного. |
Автор: Mazzi 7.11.2008, 16:20 | ||||||
Ну хорошо, с помощью репорта происходит обмен, а дальше что? Как этим репортом воспользоваться без программы верхнего уровня, если у меня самодельное устройство HID? |
Автор: LessNik 7.11.2008, 17:58 | ||
Я понял, что вы имели ввиду: работать с HID устройством наподобии как с COM портом. Ну тогда, после того как операционка САМА поймёт, что это HID устройство и САМА установит нужные драйвера, то можно писать приложение верхнего уровня: получить дескриптор HID устройства для того, чтобы суметь его открыть, а дальше работать как с файлом(read, write и т.д.). P.S. Подумал, что проблема в драйверах. |
Автор: arzamax 14.11.2008, 13:26 |
Добрый день! Я тоже столкнулся с данной проблемой (и тоже по книге Агурова). Дело в том что в книге приводится конкретная программа для микропроцессора, после залития которой в него, он передает в систему некоторые данные генерирующиеся непрерывно. На диске к книге представленна откомпилированная программа на DELPHI которая читает эти данные, также там имеется исходник для этой программы откомпилировать который получается только после добавления в папку SetupApi.pas и еше парочки библиотек. Далее после компиляции программа не хочет работать вообще. Хотя откомпилированный якобы, агуровым код работает прекрасно. Т.е. Агуров поступил интересно: показал что такое может быть, а дальше делайте чего хотите ![]() P.S. Ужасно разочарован книгами агурова. Не разобравшись в вопросе досконально, возомнил себя гением и полез писать книги. В первой дофига косяков: мало того что про микропроцессоры рассказывается не все (по его словам существует всего две разновидности микропроцессора at89c5131: at89c5131-L и at89c5131-M. Всего их как оказалось три: "at89c5131", "at89c5131-L" и "at89c5131-M". Описывает он два последних, а структурную схему включения приводит для первого. У двух последних на две ножки больше: 18 и кажется 25, которые в первом не использовались.), так еще на диске нет и половины нужной информации, файлов и исходников, а та что есть на столько каличная что не знеш к куда ее приткнуть. Вторая книга полная аналогия первой, ну добавлено пара глав и возможно исправлено пара косяков (кстати структурная схема включения микропоцессора не исправлена и в этой ![]() Желаю всем приятного прочтения!!!!! А вопрос с написанием программы для HID устройства остался открытым. Все советуют использовать модуль SetupApi.pas из библиотеки JEDI но как его конкретно применять не обьясняется. Если кто нибудь сталкивался с подобной проблемой и успешно ее разрешил, обьясните пожалуйста каким образом. |
Автор: xvr 14.11.2008, 21:12 | ||
Нашел у себя в закромах какой то исходник |
Автор: arzamax 17.11.2008, 18:42 |
Пасиба, попробую! Надо бы полностью описать работу с данным микропоцессором: начиная от простой структурной схемы и заканчивая конечным устройством с управлением от компа - было бы не плохо (мысли вслух). |
Автор: arzamax 2.2.2009, 19:59 |
xvr, Наконец-то просмотрел твои исходники: получше чем у Агурова на диске. Твои исходники читают передаваемую в хост информацию на ура. У меня возникла проблема с передачей данных от хоста устройству, к слову в книге Агурова этот вопрос рассматривается по принципу: "Есть такая возможность, давайте дальше...". В этих исходниках есть возможность передавать данные устройству, но видимо я чего-то не до конца понимаю в программировании микроконтроллеров для приема данных. Если кто сталкивался с подобной проблемой - поделитесь вашими наработками, мнением, исходным кодом для МК AT89C5131. Заранее спасиба всем откликнувшимся! |
Автор: DimonSDA 28.4.2009, 20:18 |
Два года назад делал дипломный проект "USB Контроллер Системы Сбора Информации" в институте, причем собирал устройство писал все программы (прошивку, драйвер и интерфейс) и теоретическую часть - чертежи, пояснительную записку и много еще чего. Сами понимаете время на все это дело давалось примерно 5 мес. В итоге защитил на отлично, причем с демонстрацией работающего макета. В общем вот Вам выкладываю исходники надеюсь разберетесь. Багов там наверное миллион, так что не ругайте ![]() Но я не уверен, что это самые последние версии программ, в процессе разработки их накопилось много, и я просто не помню какая из них самая последняя :(. Но там есть и чтение данных из устройства и запись в него (у Агурова примеров записи нет вообще!!!). Схема также имеет кучу багов, но следует помнить что устройство собиралось из того, что было. Прошивка написана в Keil uVision, интерфейс на Delphi 7. Схема в PCAD-2002. Драйвер изночально писался с использованием DDK, но при работе с тремя конечными точками происходило падение системы, с одной - работало. Было решено использовать пакет Jungo WinDriver или Jungo KernelDriver (точно не помню). С ним все работает на ура. Может кону-нибудь пригодится. |
Автор: mr_smit 30.5.2009, 21:46 |
http://www.obdev.at/products/vusb/projects.html |
Автор: QuickWitted 15.6.2009, 11:56 |
Продублирую тему в качестве своего вопроса - "помогите с проектом под Delphi для работы с HID USB, поиск простенького проекта" Есть готовый проект на СИ, но хотелось бы достучаться до HID USB с Delphi... читал много - только запутался... Неподскажиче чем дело с адаптацией исходников от Агурова кончилось? |
Автор: mr_smit 15.6.2009, 13:14 |
Я собрал схему по приведенной мною выше ссылке (там их много разных, но смысл один). Вам там дают готовую библиотеку и нужно только поправить код под свои нужды. На Delphi (с помощью компонента что то там THID... не помню) написал программу. Смысл такой: нажал кнопку (мышкой) - лампочка загорелась (на плате), ещё раз нажал - погасла. Долго мучился с этим, но получилось. А книга Агурова мне не очень нравится. Практики в ней нет. Я предпочитаю практические примеры. Как мой. Пожалуйста, цепляй вместо светодиода релюшку и включай/выключай настольную лампу не отрывая руки от мыши. А можно это и на "горячие клавиши" повесить. Будет даже на буке работать. USB ведь... ![]() |
Автор: QuickWitted 15.6.2009, 13:45 | ||
у меня 8 релюшек и ИР на слае уже год живут... (управляются как от компа, так и автономно от обученного пульта) Задача слезть с IgorPlug.dll (и за одно с комплектного драйвера)... т.е. нужна прога общающаяся с HID без дров и по возможности без библиотек. первое решение - прикинимся HID джойстиком - реализовали... недостатки в джой данные передать нельзя... второе решение - поищем аналог. нашли, только прога на СИ и на железе нет приёма данных из компа... вот теперь думаю как на дэльфи перевести.... (а приём данных потом допишем) ЗЫ: в теме только один исходник... и он зверски ругается при старте и при закрытии если не найдёт устройство.... может, у кого рабочий есть? (не сильно паникующий без железа?) |
Автор: mr_smit 15.6.2009, 16:16 | ||||
Использовал этот компонент: http://ifolder.ru/12653480 Его тут уже выкладывали. Я не делал никакие проверки. Это работает в том случае если к ПК в данный момент подключено 1 HID устройство. Если несколько - надо искать наше (по VID и PID) и обращаться к нему. На отсутствие железа не ругается. |
Автор: QuickWitted 16.6.2009, 09:24 | ||
отправился мучать исходник... а с поиском (по VID и PID) не у кого готового нет? |
Автор: mr_smit 16.6.2009, 20:40 | ||
В примерах которые идут с компонентом есть. Что то типа этого:
Я только пока не пойму как потом к нужному устройству обратиться. Надо разбираться. |
Автор: QuickWitted 17.6.2009, 14:14 | ||
вот в этом и проблема... не всё понятно, рабочий исходник бы... |
Автор: mr_smit 18.6.2009, 11:56 | ||
Исходник который идет с компонентом - рабочий. Бегло посмотрел. Они там ищут устройства и найденные добавляют в Listbox как objects и потом работают с нужным.
|
Автор: pvabox 24.9.2009, 19:03 | ||
|
Автор: rpuH 8.10.2009, 15:34 | ||||
Добрый день!!! Если не затруднит скиньте пожалуйста исходники этой программы, а было бы вообще замечательно если в совокупностим с предыдущей программой. Спасибо зараннее. |
Автор: pvabox 16.10.2009, 23:10 | ||||
Пример моего проекта работы с HID устройством на базе V-USB от Objective Development Схема ![]() Основная программа микроконтроллера main.c
ВНИМАНИЕ! Не забудьте отредактировать файл конфигурации usbconfig.h !!!! Далее - тестовая программа на Delphi 7 main.pas
PS: Программа использует JvHidControllerClass библиотеки JEDI, не забудьте установить! Будут вопросы - не стесняйтесь, постараюсь ответить. |
Автор: pvabox 16.10.2009, 23:25 |
По многочисленным просьбам на e-mail, выкладываю пример моего проекта для микроконтроллера с описанием под WinAVR. PS: Внимание! Архив обновлен и дополнен. |
Автор: joint931 12.12.2009, 01:23 |
Ктонибудь может кинуть пример как с помощью компонента JvHidController ПРИНИМАТЬ данные? Как девайс найти и послать пакеты все ясно, а вот как его опросить... ниче не ясно... Заранее спасибо. |
Автор: 197102 18.12.2009, 08:24 | ||||||
Скажите, а где найти пресловутый JvComponentBase? JvHidControllerClass установил, а этого найти не могу. |
Автор: mr_smit 19.12.2009, 12:54 |
Кинь на форму сам "HID компонент" и он добавит нужные uses |
Автор: pvabox 24.12.2009, 13:08 | ||
Замени в тексте программы на Delphi включения SetFeature на GetFeature, данные будут помещаться в буфер Buf. Добавлено через 3 минуты и 37 секунд Пробовал кто собирать подобный девайс, есть замечания по работе? Напишите свое мнение. |
Автор: Alexeyslav 25.12.2009, 14:33 | ||
Такая книга заставляет задуматься, искать ошибки исправлять их - в этом процессе и приходят знания. Научившись же копировать - знаний не будет, и никогда до конца не поймете как это все работает. От незнания возникают всевозможные глюки - устройство работает только в определенных условиях, чуть что (в примере упустили проверки на ошибки например) и все летит к чертям, приложение вываливается а драйвер вешает систему... а Вы долго-долго ищите причину. |
Автор: svetodiod 25.12.2009, 14:56 | ||
Прошу прощения за дурацкий вопрос, откуда девайс знает, что он
где это задается (если задается) в прошивке микроконтроллера? |
Автор: alfrerd 3.1.2010, 00:23 | ||||||
Попробовал, лампочки конечно работают (если добавить "DDRB = 255;"). а вот с буфером проблема. не выводит. Делал изменения в
По логике вещей, каждая функция вызывается один раз и за этот период мы должны сохранить переданные данные в какой-то промежуточный буфер и провести их обработку. Но не идет. сделал просто индикацию показа светодиода, если код хоть раз выполнит процедуру. Где ошибся и у кого пошло? |
Автор: alfrerd 3.1.2010, 02:03 |
подчистил файл проекта от лишних модификаций, полученных в результате множества опытов, попил чайку, подумал и получил следующий результат: 1. Дополнительный буфер не особо то и нужен. это обусловлено тем, что используется только один тип репорта (занчит одной длинны все данные в нем) и контроллер его запишет в том же самом месте. При повторном вызове данных должен перезаписаться только заголовок. хотя может я и не прав. нужно просмотреть весь код обработки. 2. из Дельфи приложения функция usbFunctionWrite не вызывается. почему? есть одно предположение, но это позже. 3. если вызвать функцию, например через usbtool, то диод загорается (данные записаны!), но(!) при анализе, что вернула GetFeature() и что записывалось видно очень большое различие. 4. если usbFunctionRead возвращает значение отличное от 1, то устройство просто не работает. ЗЫ: по поводу 2 может быть такая вешь, что просто не включена обработка. в usbFunctionSetup записано "/* игнорируем запросы типа вендора, мы их все равно не используем */". То есть если наше приложение посылает запрос по вендору, а не по классу, то этот запрос банально игнорируется. Сделал проверку, не по вендору тоже. Но помимо вендора и класса есть еще standard и reserved. 1 проверить тоже не получилось. поскольку при внесении дополнительного кода в usbFunctionWrite и usbFunctionRead код просто не работает ни с одной из перечисленных программ. Есть у меня смутные сомнения, что вероятно объявленный статичный (и нестатичный) массив располагается во флэш памяти. в CodeVision для этих целей используется специальная директива в декларации. Вероятно и в WinAVR тоже, только не знаю какая. |
Автор: pvabox 28.10.2010, 09:29 | ||||
Эта строка уже добавлна при инициализации микроконтроллера
Добавлено через 6 минут Написал недавно плагин под Winamp на Delphi для вышеприведенной схемы с дополнительным усилителем тока и мощными светодиодами, получилась замечательная цветомузыка. Ее можно использовать как usb игрушку. |
Автор: mr_smit 1.11.2010, 08:48 |
pvabox, давно мечтаю сделать что то подобное. Насмотрелся на ютубе на кубы из светодиодов.... класс... Выложи хотя бы фото своего устройства...!!!!! Жутко интересно посмотреть!!! Очень заинтересовало. |
Автор: mr_smit 1.11.2010, 09:06 | ||||||
Да и ещё, объясните эту конструкцию, я чего то не понимаю:
Понятно что LEDs это байт, т.е. 8 бит. Причем тут 1,2,4,8,16,32,64,128. С "делфи битами" не приходилось работать. а если:
то что тогда????? Может лучше так:
Или глупость написал? |
Автор: xvr 1.11.2010, 11:35 |
Состояние набора checkbox'ов переводится в битовую шкалу Это степени двойки. В бинарном виде это будет 00000001 00000010 00000100 00001000 00010000 00100000 01000000 Если эти значения сложить, то в соответствующей позиции суммы появятся единички У Индусов подсмотрели? Работать будет, но где то раз в 100 медленнее |
Автор: tans 1.11.2010, 21:59 |
А кто-нибудь знает как реализовать передачу данных в c++ buildere. В билдере отсутствует тип TReportData, в какой тип нужно положить передаваемые данные? |
Автор: mr_smit 2.11.2010, 10:08 | ||
Спасибо за объяснение. Чего то сам не догадался. Точно.
Ни у кого я не смотрел, сам написал. |
Автор: AlexART 2.11.2010, 15:10 | ||||||
Фрагмент файла USBConfig.h:
Добавлено через 2 минуты и 55 секунд И сразу вопрос: Подскажите, пожалуйста, как передавать БОЛЬШЕ одного бита? Просто менять состояние PORTB.0? |
Автор: mr_smit 3.11.2010, 10:40 |
Может байта? Шли друг за другом байты и всё. А если нужна скорость, то лучше не заморачиваться с HID и использовать USB <-> RS232 переходник. |
Автор: pvabox 4.11.2010, 22:47 | ||||||||||
xvr правильно ответил. Чтобы не заморачиваться и уменьшить количество машинного кода и вычислений, я работаю и передаю в микроконтроллер десятичное число. При записи этого числа в порт PORTB микроконтроллер сам устанавливает соответствующие биты на выходе. 0 - соответствует состоянию 00000000, а 255 - соответственно 11111111. Для включения n-го светодиода, я увеличиваю переменную LEDs на 2 в степени n (n=0..7).
Не понятен вопрос, мы вроде передаем уже 8 бит (1 байт), может имелось ввиду как передавать БОЛЬШЕ одного байта?
Ну да, смотря для чего использовать. Для цветомузыки, например, скорость переключения в 10 мс это весьма большая скорость. Я в своем плагине для Winamp-а использовал эффект стробирования, работает на ура, с яркими светодиодами по глазам бьет конкретно. Можно даже увеличить длину репорта и передавать информацию о яркости свечения светодиода (через ШИМ), тогда время переключения увеличится до 100 мс и для плавных переключений это будет совершенно незаметно. |
Автор: pvabox 5.11.2010, 00:10 | ||
Пожалста ![]() |
Автор: AlexART 8.11.2010, 21:21 |
Извиняюсь, больше одного байта. Всё, уже понял, спасибо. |
Автор: mr_smit 9.11.2010, 15:49 | ||||
А в работе? Видео хотелось бы. Хоть на телефон сними. |
Автор: pvabox 11.11.2010, 15:32 |
Хорошо, чуть позже выложу. Но световые эффекты сильно зависят от программы управления и внешнего оформления. У меня девайс работает как прожектор, а в кубе смотрелось бы иначе. В плагине под Winamp у меня реализовано несколько режимов работы светодиодов: зеркальный, частотный, амплитудный, одиночный, а так же добавлены эффекты: инверсия и стробирование. К сожалению, все светодиоды работают в режиме "горит - не горит". Если будет время, думаю ввести режим управления яркостью светодиода, в зависимости от музыкального сопровождения. Хотя, можно немного доработать программу МК и реализовать режим плавного погасания светодиода. Причем скорость погасания будет зависеть от времени свечения. При быстрой музыке этот эффект не будет заметно проявляться, а при медленной получится необычайная световая картина. |
Автор: darksilence 21.12.2010, 21:09 |
У меня проблема следующего рода: На контроллере висит кнопка, по нажатию этой кнопки КОНТРОЛЛЕР должен передать какие то данные в ХОСТ. Как сделать это. че в Делфе где прописано должно быть. прерывание слушать. Как вариант конечно можно постоянно хостом опрашивать девайс. но это плохой вариант. Как быть? =) |
Автор: mr_smit 22.12.2010, 15:03 | ||
Ну во-первых кто тебе сказал что это плохой вариант??? Я с кнопкой так и делал. А во-вторых вот: http://www.radiokot.ru/circuit/digital/pcmod/16/ Там и исходники есть. |
Автор: darksilence 22.12.2010, 16:18 |
Это не то. там программа хоста постоянно опрашивает, а не контроллер сам инициализирует передачу данных хосту. Я нашел получше пример, но он у меня не запускается. щас буду его мучать http://radioelectronika.ru/?mod=full_cxema&cxemi_id=465 Благо он разобран детально. и мне придется самому строить HID дескриптор. |
Автор: AlexART 23.12.2010, 13:36 |
Модератор: Сообщение скрыто. |
Автор: KoTeKoT 25.12.2010, 04:58 |
Приветствую всех! Возможно не туда (если что перенаправьте) , но я уже просто не знаю что делать и в чем искать причину! Уже несколько месяцев пользую проект "hid-data" подкоректировав его под свои нужды в связке с Delphi. И все шло норм, Но после очередной поездки на работу с платой этой - врубаю а ЮСБ пишет "Устройство не опознано" Как так? ПереПрозвонил по 20 раз уже все. Обрывов нет, коротких тоже... Ради интереса позаливал разные варианты прошивок и из "hid-custom-rq" и разные модификации "hid-data" - Все равно не опознано! Но прошивается без ошибок (тоесть с кварцом и кондерами я так понял все в норме) и если прописать "DDRB = 0xFF;" между "DBG1(0x00, 0, 0);" и "odDebugInit();" то светятся диоды как и положено. НО ЮСБ "не опознано". Подтолкните плз в какую сторону рыть... уже 3-й день над девайсом этим сижу... |
Автор: darksilence 25.12.2010, 19:19 |
В другой комп пробовал ставить девайс? Как вариант сгорел стабилитрон, если ты на нем схему делал, т.е. по шинам данных идет 5В вместо 3-х. |
Автор: KoTeKoT 25.12.2010, 20:19 |
Пробовал с 3-мя компами (2 ХР и 1 Win7) одно и тоже... Делал на диодах (прозвонил - не пробитые): http://s2.ipicture.ru/Gallery/Viewfull/2769911.html И кстати замерял напругу - такое впечатление что ни R1 ни R2 нет... (тоесть между выводом USB1 и PD2 = USB1 и USB3 = 4,93 В) а (между выводом USB4 и PD4 = USB4 и USB2 = 2,97 В) Но при этом резюки исправно показывают 68 Ом. А между PD2 и PD4 так же как и между USB2 и USB3 = 2,95 В. |
Автор: darksilence 25.12.2010, 22:52 | ||
впринципе R2 и R1 особо на схему и не влияют. Но как факт, что МК должен питаться от 3,6В не больше. и выдавать на ножки PD2,PD4 должен такое же напряжение. Я толком не понял вашу запись
Напряжение нужно мерить относительно общего провода. А то что вы написали USB1 и PD2 = USB1 и USB3 = 4,93 В. напряжение относительно земли: USB1 = 5V USB2=USB3=3.3V~3.6V USB4 = 0V VCC = ~3.7 V - вот это важно вобщем думаю проблема в разводке. вполне мог какой то прводник отвалиться. также советую проверить фьюзы и попробовать прошить другую аналогичную МК. |
Автор: KoTeKoT 25.12.2010, 23:07 |
Пардон за непраильное обьяснение. Напряжение на PD4 относительно земли 2,98 В на PD2 относительно земли 0,03 В, а относительно питания 4,98 В Вроде бы правильно написал.. И повотрюсь - это устройство уже работало на это й же плате и этим же МК.... я уже на невероятные вещи грешил (мож каким макаром статика на МК вдарила)... но он же прошивается нормально! |
Автор: darksilence 25.12.2010, 23:30 |
Кстати о прошиввании. Какой у вас программатор? если типа AVR910, то он сам шлет меандр и ему не нужен тогда внешний кварц на прошиваемом МК для программирования. =) с фьзами все норм? Все таки попробуйте атмегу поменять. |
Автор: KoTeKoT 25.12.2010, 23:41 |
Та нет , программатор 5 проводков )) но шил на нем 2 атмеги без проблемм. Может кварц не заводится... осцилографа нет, а как без него проверить без понятия... Ну а если перепрошивается отлично (мигает светиками с другой прошивкой) то кварц с кондерами в норме??? А с фьюзами вроде все в норме, я как makefile исправил сначала, так и не менят его и прошивал с ним через AVR-Dude несколько раз без проблемм. Лады, сейчас поменяю атмегу! --- Прошил другую Атмегу8 - тоже самое! Не опознано! Но прошылась нормально (после подключения в ЮСБ засветились светодиоыды, как и написано в программе зашивал ЭТУ: http://forum.vingrad.ru/index.php?showtopic=233737&view=findpost&p=2050245 )... выходит в пайке или с компонентами что то не так... но только что проверил еще ра - обрывов и коротких точно нет!!! Что ж компоненты по одному менять? Маразм... мистика... |
Автор: zvyagaaa 27.12.2010, 18:47 |
а можно ли как-то управлять еще и яркостью светодиодов по этой схеме? я так понимаю, что нужно организовать ШИМ, а вот как - не знаю, может подскажите? |
Автор: darksilence 27.12.2010, 23:11 |
Если не сильно вникая, то проще через CodeVisionAVR. там есть утилита встроенная - автокомпоновщик или как ее еще назвать. вобщем там выбрать использование таймера для ШИМ. из него взять регистры настройки таймера (TCCR,TCNT,OCR) и скопировать в ваш проект. А лучше разобраться по даташиту. На сайте Атмеля есть аппноуты с примерами для WinAVR. Главное если будете использовать прерывания таймера не задеть прерывание USB протокола, если использовать ненулевые конечные точки. |
Автор: zvyagaaa 29.12.2010, 10:03 |
я к чему спрашиваю, а вообще, это реально чтобы в проект, который выкладывался тут, добавить на все 8! портов программный шим? Просто то, что я в сети встречал, сделано, обычно на меге 8, 48 и т.д., т.е. на более серьезных контроллерах, с большим объемом памяти и прочее... |
Автор: darksilence 29.12.2010, 18:40 |
Я так понимаю особого опыта работы с МК нет да и знания слабые, никого не хочу обидеть. В атемеге8 всего 2 порта по 8 пинов и 1 порт с 7-ью пинами. В проекте VUSB нам оставлено суммарно 18 пинов (касательно ATMEGA8, если не использовать аппратной возможности отключения от USB). Как хотите так и управляйте ими, особых ограничений нет. прерываниями таймера вы программу не собьете, единственно, что не советуется - выключать прерывания вообще(т.е. использовать комманду cli()). |
Автор: zvyagaaa 29.12.2010, 19:48 |
да, к сожалению, ни опыта ни знаний по работе с мк пока нету, кроме как прошивки при помощи программатора и PonyProg. :( сам-то принцип как шим организуется на микроконтроллере я понимаю, а как это в код оформить - не понимаю... вот помог бы кто-нибудь что конкретно нужно написать в исходнике. |
Автор: darksilence 30.12.2010, 01:18 | ||
и в проект USB все вставляется в этом же роде. Если в вашем проекте используется только нулевая конечная точка, то проблем вообще не должно возникнуть |
Автор: zvyagaaa 2.1.2011, 21:01 |
для тиньки не хватит памяти, люди говорят ![]() |
Автор: darksilence 4.1.2011, 19:20 |
ну если для тиньки CDC проекты катят (которые USB-COM), то уж ШИМ с USB сделать памяти много не надо |
Автор: zvyagaaa 11.1.2011, 07:13 | ||||
Похоже, что начал по-тихоньку вникать, что да как в МК этих, много читаю, примеры смотрю и прочее: Посмотрите код - похоже на правду, что я написал? Мне нужно на базе Attiny 2313 сделать 6 управляемых через USB светодиодов, регулируемые ШИМом. Так как аппаратных, как я понял, можно использовать только 2, то я попробовал его сделать через программную реализацию. Реализовал я его вот так:
В принципе, понимаю, что реализация топорная, может можно как-то улучшить, и вообще - будет ли такое работать? Такое ощущение, что все это дело будет нещадно тормозить :( Только вот, зараза, не компилируется ни пса :( Выдает ошибку на последнюю строку
Прикладываю архив проекта на AVR Studio 4. Я правильно все делаю, или нет? Спасибо. |
Автор: darksilence 12.1.2011, 02:55 |
у тебя функция usbFunctionWrite не закончена. в смысле закрывающую скобку "END" ты закомментировал. вот поэтому и error. ИМХО проще искать ошибки в ProgrammersNotepad, идущим в комплекте с WINAVR. собственно и компилировать от туда же. Я на AVRStudio в обиде. она без makefile откзаывается мне чето делать. а раз так, то лучше я не буду ей пользоваться и все =) А по счет программы.. мудрено как то все. можно и покрасивше написать, но если будет работать, то все здорово =) Не забудьте правильно фьюзы запрограммировать ;-) |
Автор: zvyagaaa 12.1.2011, 07:11 | ||||
darksilence, огромное спасибо за то, что надоумили меня воспользоваться ProgrammersNotepad - тут хоть скобки можно проверить ![]() Там еще ошибки были. Поэтому выложу еще откомпилированный проект. Еле разобрался что этому компилятору надо, ну до чего же он не информативные сообщение выдает при ошибках, вот сиди и думай, что не так сделал ![]() а, да, в железе еще не проверялась работа, пока просто откомпилировал. Правда, пришлось все же оптимизировать код, как я и предполагал - код чисто индусский был ![]()
ну и соответственно ее вызываю:
так-то оно ловчее будет ![]() |
Автор: darksilence 12.1.2011, 17:44 |
у нас уже оффтоп пошел, на самом деле.. Я тебе советую разобраться сначала с ШИМом. сделай все тоже самое только без юсб и проверь в Proteus (программа эмулирует готовое устройство. очень удобная вещь). если твоя реализация будет работать, то все норм =) Мне влом в тоем коде разбираться, тем более что когда сам ошибки исправишь, поймешь лучше ;-) P.S. не получиться в твое программе такое время моргания светодиодами, т.к. они у тебя последовательно моргают и период моргания одного светодиода = сумме всех delay в одном цикле. а у тебя там больше секунды может выйти. надо переделать =) |
Автор: mr_smit 2.2.2011, 14:56 |
Почитайте: http://avrhobby.ru/index.php?option=com_content&view=article&id=88:vusbex1&catid=34:projectsmk&Itemid=53 Там 3 части. Подробнейшим образом всё описано. Особенно части 2 и 3. |
Автор: pvabox 11.2.2011, 13:58 |
Хочу предложить замечательный сайт с аналогичным проектом, но с использованием 18 светодиодов. Все разработки на сайте представлены с открытым исходным кодом. Вообще, огромная благодарность автору за создание такого сайта. http://bascom.at.ua/publ/cvetomuzykalnyj_medalon_koshachij_glaz_cat_39_s_eye/1-1-0-40 |
Автор: Juris 23.7.2011, 17:10 |
Уважаемый Pvabox, доступна ли каким-то образом Ваша разработка плагина Winamp? Я неисправимый фанат разного рода цветомузык :) Кстати, конструкция по вашей предидущей ссылке замечательная вещь, я там даже продвигал кое-какие идеи в коментариях. Буду признателен если возможно попробовать и Вашу разработку. Спасибо! |
Автор: pvabox 18.9.2011, 11:11 |
Было время, когда я мечтал собрать простейшее устройство для управления светодиодами через USB. Переписывался с Игорем Чешко, основателем программной реализации USB протокола на МК. Но он мне ничем не помог, намекнул, чтоб сам во всем разбирался. Благодаря чудесным разработкам от OBJECTIVE DEVELOPMENT Software GmbH для AVR - разобрался. Писал автору проекта http://shunmax.narod.ru/index.html чтоб помог разобраться с плагином, но ответ был точно таким же. Пришлось все изучать, во всем разбираться и экспериментировать. Меня цветомузыка интересует с детства, а сейчас столько возможностей для реализации! Но, к сожалению, нам устроили такую жизнь, что думаешь о том, как прокормить семью и на творчество времени не остается. Поэтому, вот уже два года я не усовершенствую свой проект. Что у меня получилось, можете посмотреть в прикрепленном файле, это dll-ка визуализации для Winamp-а. Я придумал совершенно новый алгоритм включения ламп в зависимости от музыкального произведения, но пока не реализовал его. Есть задумка написать прогу управления лампами от MIDI файла, где включением ламп управляют ноты. Это очень простой алгоритм. Кроме того, можно использовать отдельный трек для управления лампами, где ноты не воспроизводятся. Получается впечатляющая картина музыки и света. Будет время, поделюсь результатами. Будут новые идеи или предложения пишите, обсудим. Мой пример модуля визуализации под Winamp для моего проекта. PS: Архив обновлен! |
Автор: Juris 21.9.2011, 12:11 |
Спасибо Pvabox за файл! Маленькое предупреждение если кто ещё будет пробовать: без подключенного деваиса при запуске плагина Windows (XP) будет засыплен бесконечными сообщениями об ошибке, придётса "убить" Winamp. Во всяком случае на моём компе так. Деваис ещё не спаял. |
Автор: pvabox 22.9.2011, 22:38 | ||
Пардоньте, эта старая версия файла, для его работы нужен драйвер LptWdmIO, с помощью которого при отсутствии устройства USB, данные передаются в LPT порт. Ссылку перезалил последней версией. Проверял на другом компе - все прекрасно работает. Простите за не внимательность. |
Автор: pvabox 23.9.2011, 10:19 |
Обновил и дополнил архив проекта в посте http://forum.vingrad.ru/index.php?showtopic=233737&view=findpost&p=1996458 |
Автор: megabyte 25.9.2011, 16:54 |
Всем привет! Я работаю над полноскоростным обменом по USB . Пытаюсь разобраться по книге Агурова. Критику не могу в его адрес высказать, человек писал видимо, что знает. Я использую контроллеры AT90 c USB модулем на борту. В моем проекте нужна скорость 8Мбит/сек - а это USB2.0 . Над этим и бьюсь. Готовый вариант устройства обмена интересует в плане ''от чего то оттолкнуться ''. А так хочу все сам сделать. Кстати в Proteus есть модуль USB с отладчиком - показывает процесс обмена данными в режиме он-лайн, также в эта программа имеет драйвер (в примерах) который устанавливается как устройство и можно в полном объеме отлаживать устройство. Правда там поддерживаемых контроллеров не много. Так что если тема интересна - буду дальше писать о результатах. |
Автор: UniBomb 25.9.2011, 17:56 |
Слышали про http://www.fourwalledcubicle.com/LUFA.php? |
Автор: Juris 26.9.2011, 21:38 |
Уважаемый Pvabox, могли бы Вы сделать screenshot работаещего плугина Winamp и предоставить сдесь? Дело в том, что даже если в английском Windows (XP) включить поддержку русских системных фонтов, всёравно вместо букв только "?". А так можно будет по картинке сориентироватся ![]() Спасибо! |
Автор: pvabox 27.9.2011, 12:20 |
Juris, для отображения кириллицы воспользуйтесь прикрепленным файлом, а скриншот вот такой http://savepic.su/29613.htm |
Автор: Juris 27.9.2011, 14:35 |
Спасибо, pvabox! Вы очень helpful ![]() P.S.: А это не Ваше? Похоже как то по оформлению. http://shunmax.narod.ru/index.html |
Автор: pvabox 27.9.2011, 17:09 |
Нет, я о нем писал в http://forum.vingrad.ru/index.php?showtopic=233737&view=findpost&p=2403511 посте, хотя действительно, что-то взял из оформления его плагина. |
Автор: andreysh 29.10.2011, 16:17 |
Только что разобрался с исходником с первой страницы. HIDKomponente.zip ![]() Правда при разработке устройства заказывал 64бит буфер (с запасом) !!!! пока не подправил на двойку не заработало ...... ToWrite := CurrentDevice.Caps.OutputReportByteLength; for I := 0 to (ToWrite - 2) do Я так понимаю CurrentDevice.Caps.OutputReportByteLength=65; 65-2=63; 63+0=64; ![]() Ну да ладно планирую сделать свтильник, только не через шим а использовать микросхему ULN2003AN Анод одного диода подключается сразу к двум ножкам контроллера, к одной прямо, второй через ограничивающий резистор (подобрать на макетке по люксометру половину яркости). Итого: 1-Полная яркость, 2-Пол Яркости, 3Выключен. 2*3RGB=6ножек одного порта будет достаточно. Глаз не отличит яркости по шим, сильно большая пушка по воробьям IMHO |
Автор: zvyagaaa 30.10.2011, 21:13 |
pvabox А исходником плагина поделитесь? Пожалуйста ![]() |
Автор: Maks55 15.11.2011, 05:43 |
Парни подскажите, компонент jvhiddevicecontroller работает в вин7? А то при обращении к HID устройствам пишет "device cannot be opened". Пример идущий с компонентом не работает. :( |
Автор: hash666 15.11.2011, 13:25 |
2 Maks55, а константы правильные стоят? ProductName, VendorID, ProductID. |
Автор: Maks55 16.11.2011, 06:48 |
У меня просто не получается вывести список 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 поломался??? |
Автор: jekatj1 21.3.2012, 09:26 |
В модуле 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); |
Автор: inpotseluev 30.7.2012, 14:52 |
Уважаемые господа программеры! Помогите, кто сможет. На 7 Delphi написан кусок программы с использованием HID. При первом включении все нормально. Когда USB перевтыкаешь, то HID.Enumerate возвращает ноль, так как в JvHidDeviceControllerClass.pas возвращает в TJvHidDevice(FList[I]).IsPluggedIn false. То есть он не увидел включения и события Arrival не произошло со всеми вытекающими. Пробовал объект уничтожать и создавать, вообще фигня происходит. Может надо как-то обрабатывать HIDDeviceUnplug. Заранее спасибо! |
Автор: ru775 8.12.2013, 19:50 |
Привет, ALL! Разработал прогу работающую со сканером штрихкода через COM порт, все отлично работает, и решил расширить функционал, и поработать с различными железяками через HID. И тут начались грабли... Я не могу понять, можно целиком перенаправлять входящие данные со сканера работающего в режиме эмуляции клавы в свою программу? можно ли при появлении данных генерировать событие? И самое главное, я переворошил кучу примеров, но нет ни одного рабочего где-бы данные принимались! Если есть у кого наработки дайте, плиз. |
Автор: pvabox 30.12.2013, 16:33 |
Хочу поделиться своим проектом - светодинамической установкой для Winamp-а. Целью этого проекта было желание научиться создавать простые устройства, использующие протокол HID USB для обмена данными с компьютером. Весь проект имеет подробные пояснения и позволяет быстро разобраться новичкам в принципах работы устройства. Данный проект не претендует на оригинальность, но может быть взят за основу для разработки других устройств. В оригинальном виде, он может свободно распространяться, но только с сылкой на автора. Данное устройство можно использовать как usb-игрушку на дискотеках. Пользуйтесь, кому интересно! |
Автор: pvabox 30.12.2013, 16:34 |
Фото девайса. |
Автор: pvabox 30.12.2013, 16:34 |
Если нужно видео работы, вышлю ссылку на youtube. |
Автор: mr_smit 3.1.2014, 16:23 |
Выкладывай |
Автор: radan 6.1.2014, 21:57 |
и я видео жду! |
Автор: pvabox 30.1.2014, 23:45 |
Обновил http://forum.vingrad.ru/index.php?showtopic=233737&view=findpost&p=2595266, ссылка на видео youtub работы устройства внутри архива с файлами проекта |
Автор: pvabox 24.4.2014, 22:14 |
А этот проект с использованием бинарной кодовой модуляции (BCM-метод), позволяющей плавно управлять восемью светодиодами. Ссылка на видео youtub работы устройства внутри архива с файлами проекта |
Автор: Juris 17.7.2014, 17:04 |
Спасибо Pvabox за вариант с плавной сменой яркости! Может есть у Автора ещё какие интересные свето-эффектные штучки чем можно поделится с другими? ![]() |
Автор: pvabox 22.7.2014, 09:55 |
Cвето-эффектных больше нет, есть из других областей электроники. Очень был бы признателен за отзывы, критику и новые идеи! |
Автор: Juris 26.7.2014, 12:43 |
Уважаемый Pvabox, если у Вас сейчас нет интереса по развитию светомузыкального плагина, может возможно дать мне подсказки и короткие наводки как можно покопаться в кодах, как потом скомпилировать (я плох в программировании, только общие поверхностные знания)? Как первое, я бы хотел перевести надписи в установочном окне на английский язык. Потом это можно конечно выложить для других кому нужно, сдесь и на "Lightportal". Спасибо заранее! |
Автор: pvabox 29.7.2014, 16:09 |
Чем тут я могу помочь? Все мои исходники полностью открыты, комминтариев в исходниках более чем достаточно. Изучайте языки программирования. Google в помощь. ![]() |
Автор: Juris 29.7.2014, 19:56 |
Спасибо, понимаю. Спрошу иначе: если я новичок, данный проект мне подойдёт для ковыряния, или там могу быстро обломатся в сложностях? ![]() |
Автор: pvabox 8.8.2014, 14:03 |
Когда я увидел в интернете подобный проект М. Бакулина для LPT порта и статью И. Чешко о программной реализации USB на МК Atmel, то сразу же связался с ними с просьбой о помощи. Они, мягко сказать, послали меня самому во всем разбираться. Я был таким же новичком как и Вы. В итоге у меня получился свой проект такой, о каком я мечтал. Но цель была не только в проекте, но и в возможности самому во всем разобраться, понять как что работает и применить эти знаниня для реализации других устройств. Я начинал с нуля, а у Вас в руках готовое описание с комментариями и Вы еще спрашиваете: "данный проект мне подойдёт для ковыряния, или там могу быстро обломатся в сложностях?". Для ковыряния подойдет любой проект, а быстрота обломатся в сложностях зависит от желания и настойчивости. ![]() Не, на самом деле это все для начинающих, там все элементарно! |
Автор: Juris 8.8.2014, 21:50 |
Спасибо за моральную поддержку! Ну чтож, "наберусь храбрости" и попробую. ![]() |
Автор: pvabox 8.10.2015, 11:18 | ||
Ну что, есть результаты? |
Автор: simon2012 22.6.2017, 13:05 |
Да, мне тоже интересно. А ветка жива вообще? Последнее сообщение в 2015 году было. |
Автор: pvabox 3.7.2017, 11:51 |
Наверно, все уже разобрались во всем. В моем проекте все подробно расписано, думаю вопросов быть не должно. |