Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.94/32: Рейтинг темы: голосов - 32, средняя оценка - 4.94
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
1

USB.HID на Atmega328P не распознается

27.05.2014, 19:45. Просмотров 6393. Ответов 35
Метки нет (Все метки)

Пару недель назад набрел на сайт http://openrobo.ru/control/usb. До этого не имел дела с программированием микроконтроллеров. Эксперименты с Attiny2313 прошли успешно, и я задумал проект посерьезней, но для него памяти под прошивку в Attiny2313 (2КБ) оказалось маловато. Из доступных вариантов подвернулась Atmega328P. Схему подключения этого мк использовал ту же что и для Attiny2313, лишь немного подкорректировав ее с учетом выводов Atmega328P (распиновку выводов этого мк брал из даташита). Оба мк "прошивал" через простенький программатор AVR USBASP (в списке поддерживаемых мк значились и Attiny2313 и Atmega328P) с помощью SinaProg. Поколдовав с настройками файлов из проекта для Attiny2313 смог получить hex-файл для Atmega328P, но при подключении к USB-порту , высветилось сообщение от операционки: "Одно из подключенных USB устройств работает неправильно, и Windows не удается распознать его". Проигнорировав сообщение системы, запустил ПО хоста, но как и следовало ожидать устройство не было найдено. В диспетчере устройств среди контроллеров USB значилось: Unknown Device. Зайдя в свойства обнаружил в значениях VID и PID нули, вместо положенных 16c0 и 05df, поэтому неудивительно, что ПО хоста контроллера тоже не увидело.

Дальнейшее "колдовство" с настройками файлов имеющегося проекта проблему не решило, и я отправился на дальнейшие поиски в инете. Нашел статью на хабре: http://habrahabr.ru/post/210736/. Автор тоже новичек в этом деле, но пользу из статьи я извлек:

1) hex-файл теперь получал путем компилирования проекта в AtmelStudio. А в качестве исходного проекта для firmware испльзовал проект автора, естественно слегка модернезировав код под свои нужды, и в настройках указав используемый мной МК.
2)ПО хоста создал с помощью знакомого мне С#, использовав рекомендуемую автором LibUsbDotNet C# USB Library.

И опять 25... Для Attiny2313 все работает, все распознается. А для Atmega328P снова "Unknown Device". Хотя по сути меняется все навсего название используемого мк, т. к. используемая мной частота для обоих мк 12 МГц, одни и те же порты под внешний генератор частоты. Предпринял следующее:
1) Еще раз проверил правильность печатной платы и правильность подключенных выводов. Замерял напряжение на ножках питания мк и на входах D- и D+ Все правильно, все в норме.
2) еще раз подробно почитал о назначении каждого из фьюзов, поэкспериментировал с установкой фьюзов. Пришел к выводу что проблема не во фьюзах.
3) В прошивке в функцию main добавил строку устанавливающую на порте B0 логическую единицу

C
1
PORTB |= _BV(0);
4) Подключил контроллер к USB и мультиметром померял напряжение на порте B0: 5В. Значит при подключении устройства и подаче на него питания через USB, функция main выполняется, а следовательно проблема лишь в том что мк "не сообщает" операционной системе ПК и ПО хоста свои PID и VID, и поэтому не удается подключиться к устройству через ПО хоста.
5) Замена мк ничего не изменила.

К сожалению знакомых знатоков-электронщиков у меня нет, надеюсь кто-нибудь в состоянии понять суть проблемы.
Прикрепляю архив проекта AtmelStudio. В папке Debug содержится hex-файл, который я "заливаю" в Atmega328P.
0
Вложения
Тип файла: rar firmware.rar (150.5 Кб, 35 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2014, 19:45
Ответы с готовыми решениями:

HID Class на V-USB (статья USB для AVR. Часть 2.)
Здравствуйте. Решил перейти от библиотеки Libusb на HIDlibrary и как раз нашел эту статью. Но...

USB для AVR. Часть 2. HID Class на V-USB
Прочитал статью "USB для AVR. Часть 2. HID Ctoss на V-USB", решил собрать все по примеру и все...

FreeRTOS+USB-HID
Добрый день форумчане! Пытаюсь подключить freertos и usb-hid с помощью библиотеки от stm. Но при...

hid класс на v-usb
Всем доброе утро. Я собрал схему с этой статьи http://we.iosyitistromyss.ru/itistro-an ......

HID Class на V-USB
Доброго всем времени суток. Хочу освоить USB на avr, и первый же блин комом. Прочитал статьи на...

35
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
15.06.2014, 16:07  [ТС] 21
Цитата Сообщение от sserg_ey Посмотреть сообщение
Большая вероятность того, что контроллер запускается не от кварца!
На сколько я понимаю, внешний генератор на кварцевом резонаторе задает тактовую частоту МК. Когда я использовал внутренний таймер МК в прошивке для мигания светодиодом, то расчетная частота мигания светодиода (при кварце на 16МГц) совпала с фактической, а значит МК запускается именно от внешнего генератора (хоть опыта у меня немного, но с фьюзами я успел разобраться). Да и к тому же при попытке установить во фьюзах "не ту" частоту или установить "не тот" кварц что указан в прошивке, сообщение о неопознанном USB устройстве высвечивается практически сразу, а в моем случае задержка в 15 секунд.

To locm. По поводу прошивки: она изначально написана для Atmega32 (взята со статьи на хабре), мной удачно портирована на Attiny2313, а вот Atmega328P не удается запустить. Так что врядли ошибка именно "ручная".
Благодарю за выложенный архив. Попробовал поэкспериментировать:
1. Использовал вашу прошивку на моей схеме (кварц поменял на 12МГц) - сообщение о неопознанном... выдало сразу же.
2. Подключил МК по вашей схеме, прошил вашей прошивкой - результат тот же.
3. Использовал вашу схему но с моей прошивкой (та что с таймером), естественно изменил при этом настройки в прошивке под кварц 12МГц, сообщение о неопознанном... выдает через все те же 15 секунд, светодиод "запускается" почти сразу.
Заметил что переход с кварца 12МГц на 16МГц не влияет на время выдачи сообщения. И еще один "симптом": установил частоту мигания светодиода 3Гц, и заметил что через 4-5секунд, затем через 9-10секунд после подключения устройства на светодиоде наблюдается секундное "зависание", после чего мигание возобновляется с прежней частотой. При чем результат что с вашей что с моей схемой подключения одинаков, значит проблема не в схеме однозначно. Ваша прошивка позволяет исключить из возможных проблем использованный мной компилятор и студию. Остается программатор и синапрог. Скорее всего синапрог не дружит с этим МК...
0
locm
2196 / 956 / 121
Регистрация: 28.10.2011
Сообщений: 3,199
Записей в блоге: 6
15.06.2014, 16:57 22
Цитата Сообщение от GradX Посмотреть сообщение
Остается программатор и синапрог. Скорее всего синапрог не дружит с этим МК...
Читал что эта оболочка неправильно пишет фьюзы в МК. Попробуйте другую.
0
sserg_ey
12 / 12 / 0
Регистрация: 05.11.2011
Сообщений: 31
23.06.2014, 13:26 23
Попробуйте еще одну штуку - программно отключить wdt, вместо wdt_enable(WDTO_1S) написать wdt_disable() и закоментировать wdt_reset().
0
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
04.07.2014, 02:16  [ТС] 24
Короче пробовал я другую оболочку (AVR Born-O-Mat) - фьюзы шить удобнее, но результат тотже....может дело не в оболочке а в самом ядре AVRdude, хотя если проблема только у меня то ХЗ... Набрел в инете на предписания по разработке, ну типа: длины линий D- и D+ должны быть по возможности одинаковыми, и как можно короче. А так как я испльзовал длину USB кабеля около метра, укоротил его до 40см - результат не изменился. Собрал схему на Atmega16, так она без проблем и без сбоев работает при длине кабеля 1,5 м. В общем я сдаюсь , учитывая что Atmega16 в моем случае вполне справляется с поставленными задачами, то желания дальше разбираться с Atmega328P у меня нет.
0
04.07.2014, 02:16
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
20.07.2014, 01:43  [ТС] 25
В общем как уже не раз убеждался, если не разобраться с проблемой, то вероятно столкнешся с ней вновь.

Речь пойдет об Atmega16, но очень похоже что проблема таже, что и в этой теме, так что решил запостить здесь. Как писал в постах выше, заменил я Atmega328P на Atmega16. МК у меня управляет драйверами ШД, собранными на полевых транзисторах и драйверах к ним. Все было круто, все работало, прошивки менял, экспериментировал, и все бы ничего.... но в один "прекрасный" момент мой комп стал распознавать Atmega16 как неопознанное и неправильно работающее USB-устройство, чему я очень удивился, т. к. ни разу этот МК не давал сбой при работе. После первого такого раза помогло просто переподключение кабеля USB, и я было уже подумал что проблемы и нет. Но при последующем подключении - опять неопознанное.. На этот раз переподключение USB-кабеля не помогло, но помогло с пятого раза замыкание Reset МК на минус. Тут я подумал, что быть может "подпалил" каким-то образом МК и он стал "глючить". В общем еще несколько подключений и МК уже не получалось ничем "реанимировать". Проверил печатную плату и кабель на предмет плохого контакта - все в норме. Проверил напряжения на стабилитронах - все в норме, проверил конденсаторы - тоже в норме.

Подумал, точно "спалил", хотя это странно, т. к. почти две недели активно юзал его и ни одного сбоя. Т. к. Atmega16 у меня в смд варианте, то поменять ее на другую удовольствия мало. Попробовал сначала подключить к ноуту (там стоит WindowsXP, т. к. ничего современне он не тянет), тот распознал его без проблем. В свойствах в Диспетчере устройств VID и PID устройства указаны правильно, короче: все в норме.

А на основном компе (там установлена Windows7) в Диспетчере устройств - вообще неопознанное устройство без каких либо VID и PID. Подключение к другим разъемам USB ничего не меняло. В общем решил перепоять на новую Atmega16, перепоял, прошил, подключил - и тоже самое, подключил к ноуту - тот все норм видит. Остается вариант переустановить виндовс на основном компе, но учитывая количество установленного софта хотелось бы обойтись без переустановки операционки. В общем: пока в размышлениях. Хотелось бы услышать мнения как можно исправить этот глюк без переустановки ОС, тем более уверенности на 100% в том что это поможет у меня нет.
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
20.07.2014, 10:50 26
...подозреваю, проблема со службой HID в вашей ОС Win7 и, возможно, с записями реестра. Проверьтесь на "живность", откатитесь по времени назад, если созданы контрольные точки.
1
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
21.07.2014, 16:42  [ТС] 27
Откаты непомогли, не помогла и переустановка драйверов. Переустановил винду...(((. Не помогло. Я в шоке.... Что делать? Собирать на другом МК? А потом еще на другом? Манипуляции в диспетчере устройств типа удаления устройства и установка ничего не дают.
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
21.07.2014, 19:19 28
Переустановил винду...
а какую? Семерка сборка?
1
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
21.07.2014, 20:06  [ТС] 29
Ультимейт. Но это уже не важно! Эврика товарищи программисты! Разобрался. Но все по порядку.

Глюк (а именно неустойчивое распознавание МК) появился после последней прошивки. Упрощенно суть прошивки в том, что по определенным тикам таймера меняются значения на портах МК (подается и снимается логическая единица). Так вот прежде чем устанавливать "боевую" частоту смены пинов на портах, я для теста правильности прошивки делал эту частоту порядка двух герц, специально для наглядности и подключал спайку из четырех светодиодов. При этом очень удобно наблюдать правильность смены пинов на портах (напомню, что МК управляет ШД). В общем в последней прошивке я пытался повысить частоту смены пинов. Глюка небыло при частоте смены пинов до 1000 Гц, но в последнем варианте прошивки я увеличил эту частоту до 22500 Гц, и вуаля: глюк при подключении. Кварцевый резонатор в схеме установлен 12 МГц, предделитель 16-ти битного таймера 256. При попытке каждые два тика таймера менять пины на портах - МК распознается как неправильно работающее USB устройство. Жаль что в ближайшее время нет возможности протестить Atmega328P.

Добавлено через 9 минут
Видно суть проблемы в том, что микроконтроллеры этой серии тратят много ресурсов на поддержку протокола USB, и когда возрастает нагрузка на проц МК это вызывает неустойчивость распознавания МК компом. WindowsXP вероятно менее капризна.
0
woodstock
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 3
24.11.2014, 21:57 30
Я тоже столкнулся с подобной проблемой.
Имею микроконтроллер ATmega328P в DIP корпусе. Пытаюсь ее подключить к компу по USB, схему взял со стабилитронами на 3.6В,
с питанием +5В от USB (см. схему во вложении). Кварц на 16МГц. Использую библиотеку LibUsbDotNet - V-USB для контроллера и libusb-win32 для компа (комп под виндой 7 работает) Взял от туда пример с custom request.
Без подключения к USB прошил в контроллер простую программу мигания светодиодом - все работает. Из фьюзов убрал только деление частоты на 8 и установил тактовый сигнал от внешнего кварца.
Подключаю к компу по USB, устройство не определяется, никак, даже как "неизвестное устройство".
Измеряю напряжение на выводе D-, там не держится постоянное напряжение! Оно секунду есть, секунду нет, как будто импулься примерно 1Гц.
Отключаю выводы D+ и D- от микроконтроллера - на компе определяется "неизвестное устройство".
Пробовал поставить вместо меги ATtiny2313 - с ней сработало, устройство определилось как HID сразу и без проблем. И светодиодом получается управлять с компа, как в примере.
Поставил ATtiny45 - таже бага, как с мегой, только пульсации чаще - примерно 0.5Гц.
Все эксперименты проводил на макетке, заменяя только контроллер, остальные детали не трогал.
Я так понимаю, что из-за пульсаций на D- и не происходит определение устройства на компе.
Но у меня, в отличии от автора темы, в програме МК ничего нет кроме вызова usbPoll(); в бесконечном цикле. WDT отключаю сразу при старте программы вызовом wdt_disable().
Что происходит не пойму.
0
Миниатюры
USB.HID на Atmega328P не распознается  
woodstock
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 3
24.11.2014, 22:10 31
GradX, а Вы разрешили эту проблему раз и навсегда, или сталкиваетесь с ней до сих пор и ограничиваете частоту? Мне нужно решить, или решить проблему или отказаться от меги328 и заменить чем то другим, может вообще перейти на atmega32u4 или аналогичный с аппаратным USB.
0
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
25.11.2014, 20:39  [ТС] 32
Вообще то, в теме я писал, что отказался от Atmega328P, заменил на Atmega16. Повышать частоту не было необходимости, поэтому не разбирался.
По поводу Atmega328P - так и лежит в долгом ящике.
По поводу МК с аппаратной поддержкой USB - в моем случае выбрал МК без аппаратной поддержки т. к. больше информации доступной для абсолютного новичка в микроконтроллерах смог найти именно для этих МК. При равном количестве доступно написанной инфы о МК без аппаратной поддержки USB и МК с аппаратной поддержкой USB, выбрал бы второй вариант. Мои эксперименты с МК в основном касаются логики программы хоста, поэтому меня вполне устраивает и МК без аппаратной поддержки USB, хотя прикупил и AT90USB, но так и не использовал их.
Если есть возможность (знакомые или доступно написанная инфа) - советую осваивать МК с аппаратной поддержкой USB.
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
25.11.2014, 20:42 33
...может китайцы стали подделывать и 328-ю. Как вот с FTDI.

Если есть возможность (знакомые или доступно написанная инфа) - советую осваивать МК с аппаратной поддержкой USB.
часто дешевле и быстрее поставить CP2102, а при необходимости скоростей PL-ку или FTDI, но дороже.
1
woodstock
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 3
26.11.2014, 09:34 34
raxp, и GradX, спасибо за советы.
Пробовал atmega16, но похоже что то напутал с фьюзами. Первый раз прошил ее - комп выдал "неизвестное устройство". Решил поправить источник тактовой частоты (у меня внешний кварц на 16МГц), изменил только lfuse через avrdude - после этого изменения моя мега перестала запускаться и "дудка" моего МК не видит. Поэтому отложит 16 мегу в сторону, буду скорее всего использовать atmega32u4 с аппаратным USB. Ранее имел опыт уже с at90usb162 - проблем нет, впаял, подключил и работай. Сейчас точно не вспомню, там только драйвер какой то нужен.
0
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
30.01.2017, 03:35  [ТС] 35
В общем, уже сколько лет спустя, нашел время снова "вспомнить молодость" и поэксперементировать с микроконтроллерами. Начал вспоминать на Attiny2313 и уже только на виндовс 7. И обнаружил что если я использую функцию _delay_ms() в прошивке МК, то прошивка работает (судя по мигающему светодиоду - мигает от таймера), но устройство не распознается точно так же как было с Atmega328p. Я попробовал простую прошивку без таймера для Atmega328p - устройство распознается, с программы-хоста управляется - при чем, использовал старую плату без каких либо изменений (а эти МК в количестве 5 штук так и пылились с того времени, теперь у них будет вторая жизнь). Более сложные прошивки не пробовал еще, но использование одного из таймеров в прошивке очевидно может влиять на распознавание устройства в виндовс 7, похоже это и была причина, возможно это как-то связано с прерываниями используемыми USB.

Отдельно еще набрел одну проблему и нашел ее решение в инете:

Суть проблемы: на Виндовс 7 х64 даже если устройство распознается как USB HID и его VID и PID правильно показаны в диспетчере устройств, то оно может не находится программой-хост на LibUsbDotNet.

Решение: Подключаете устройство, жмете Пуск = Все программы = LibUsbDotNet = libUsb-win32 = Filter Wizard; выбираете свое устройство из списка и жмете установить фильтр для него. После этого программа хост видит устройство.

Возможно кому пригодится.
0
TimonKMV
0 / 0 / 0
Регистрация: 26.01.2017
Сообщений: 1
01.02.2017, 11:19 36
Можно пример рабочего проекта под Atmega328p в AtmelStudio.
0
01.02.2017, 11:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2017, 11:19

V-USB, hid-устройство
Доброго времени суток. Собрал схему для работы с V-USB. Делаю все по данному мануалу:...

Реализация USB HID на ATMega8
люди подскажите как осуществить простое hid usb на ATMega8

USB Hid Atmega 8a. Нужна помощь!
Всем привет! Такая вышла у меня проблема: нужно реализовать USB Hid на проце Atmega 8a. Примерчик ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru