Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры 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. Просмотров 6327. Ответов 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
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
28.05.2014, 01:03 2
Поколдовав с настройками файлов из проекта для Attiny2313 смог получить hex-файл для Atmega328P
Хотя по сути меняется все навсего название используемого мк
регистры то другие. Вы хидер меняли на мегу 328?

как и следовало ожидать устройство не было найдено
рекомендуется также подтянуть дополнительно D+ к плюсу питания через 1 мегаом. Второй стабилитрон посадить на PD2. Reset МК подтянуть к плюсу через 10 кОм.
1
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
28.05.2014, 14:31  [ТС] 3
Насчет хедер-файлов, я в них долго рылся. То что смог понять - менял. Но судя по всему мои познания слшиком малы для таких глубоких настроек, именно поэтому я использовал проект взятый из статьи на хабре (прикрепил в стартовом посте) Там достаточно всего лишь в среде AtmelStudio в настройках указать тип используемого МК, выбрав название из списка (в моем случае Atmega328P), а затем скомпилировать проект, забрать hex-файл из папки проекта и "залить" в МК. Автор статьи на хабре создал этот проект для Atmega32. Для проверки, я вначале указал в настройках Attiny2313 и "залил" в Attiny2313 - она заработала. А вот с Atmega328P фокус не удался. Я так понимаю AtmelStudio сама генерирует все необходимые изменения в файлах, опираясь на указанный тип МК.

По поводу второго стабилитрона да, в данный момент на указанном мной сайте ошибка, но когда я брал схему оттуда, то этой ошибки небыло: один стабилитрон на D- другой на D+. Так что причина не в этом.

Насчет резисторов 1МОм и 10 КОм, завтра... тоесть уже сегодня обязательно попробую и отпишусь о результате. Возможно действительно из-за их отсутствия происходит сбой при опознании. Вероятно Attiny2313 не так капризен.

Добавлено через 12 часов 58 минут
Подпаял резистор 1МОм между D+ и минусом питания (в посте вы указали что на плюс питания, но в нескольких схемах в инете садится именно на минус, вероятно Вы просто опечатались). Насчет вывода RESET, насколько я понял из описания к МК этот вывод используется при программировании МК. А так как процесс "заливки" hex-файла проходит успешно судя по отчету SinaProg, и при подключении к этот вывод "в воздухе", то резистор здесь, я так понимаю, опознанию не поможет. В общем пока что результат не изменился, продолжаю поиски в инете других проектов на этом МК, если что отпишусь.
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
28.05.2014, 20:35 4
...схемах в инете садится именно на минус, вероятно Вы просто опечатались)
учитывая, что через мои руки прошло не одно HID устройство, то весьма вероятно ваши тырнет-схемы неверны.

В моих реализациях:
USB.HID на Atmega328P не распознается
USB.HID на Atmega328P не распознается

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


Насчет вывода RESET, насколько я понял из описания к МК этот вывод используется при программировании МК. А так как процесс "заливки" hex-файла проходит успешно судя по отчету SinaProg, и при подключении к этот вывод "в воздухе", то резистор здесь, я так понимаю, опознанию не поможет.
не опознанию, а старту МК. Процесс заливки может и успешен. Проводилась ли вами верификация залитого? Считываете то, что только что залили и через diff сравниваете дамп с исходным HEX.
1
28.05.2014, 20:35
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
29.05.2014, 02:28  [ТС] 5
Вероятно все таки проблема как Вы и сказали в схеме. Потому как тот самый проект с хабра (расчитаный изначально под Atmega32 и частоту 12МГЦ) я без труда настроил и залил в Attiny2313 вначале под частоту 12МГЦ, затем заменил кварц на 16МГц, указал в настройках 16МГц, залил в Attiny2313 - опознается и работает, управляется с хоста без проблем. А с Atmega328P пока не удается. Причем нашел готовые hex-файлы других проектов использующих V-USB, результат тотже. Попробую извлечь пользу из приведенной Вами схемы и поэкспериментировать с электрической частью.
Хотя остается все же небольшая тень сомнения, что дело может быть в SinaProg. Изначально она не позволяла прошивать фьюзы Atmega328P, хотя в списке этот МК значился. Нашел статью в которой автор столкнулся с той же проблемой (не было возможности изменить установку фьюзов, хотя hex прошивался без проблем), все решилось небольшой модернизацией файлов в самой SinaProg. Файлы тщательно перепроверял, врядли проблема в неправильной прошивке фьюзов Sino-й. Но может она както коряво заливает hex? Верификацию проводил с помощью SinaProg, вроде в норме, но.... если заливает коряво, может и проверять также?
Покачто буду "колдовать" со схемой.

Добавлено через 44 минуты
Кстати заметил еще одну любопытную вещь. Во время экспериментов с Atmega328P, попробовал залить "неправильную" прошивку, т.е. в настройках проекта указывал другую частоту МК, или вообще другой тип МК. Так вот с таким залитым hex-ом, как только подключаю контроллер к USB то сообщение о неопознанном и неправильно работающем USB устройстве выдает буквально через секунду после подключения, а если "правильную" то сообщение выдает только спустя 7-8 секунд. Т.е. пытается какое-то время его "разжевать" и лишь потом "сдается".
Так вот что это? Неправильная работа SinaProg и как следствие "корявая" прошивка? или все же сбой из-за неполноценной электрической схемы?
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
29.05.2014, 07:48 6
...чего гадать, правильная-неправильная. Слейте дамп из записанного и сравните.
0
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
29.05.2014, 18:38  [ТС] 7
Экспериментировал со схемами подключения, собрал и Ваш вариант: результат тот же. Пробовал сливать и сравнивать hex-ы, размеры отличаются. Попробовал тот же фокус с Attiny2313: слил только что залитый hex, сравнил размеры - отличаются, залил слитый обратно- все равно работает. Выходит то что hex скомпилированный в AtmelStudio и тот что слил с МК отличаются размерами это норма.
Сравнивал отчеты SinaProg после заливки с отчетами в среде AtmelStudio после компиляции: кол-во байтов совпадает. Выходит связка SinaProg-программатор работает нормально.

Такое впечатление что компилятор WinAVR неправильно компилирует hex именно для Atmega328P. А других компиляторов, которые можно подключить к AtmelStudio не нарыл, было бы здорово, если бы можно было проверить на другом. Утомил меня меня этот МК.

Появилась одна идея, с помощью которой можно проверить рабоатет ли сам МК при подключении его к USB: можно использовать таймер для "мигания" на одном из портов и таким образом при подключении станет видно "заводится" ли МК и если да, то не происходит ли сбой через те самые 7-8 секунд, когда появляется сообщение о неопознном и неправильно работающем USB устройстве. С таймерами Attiny я уже разобрался, думаю с мегавскими тоже разберусь.
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
29.05.2014, 18:52 8
сравнивать hex-ы, размеры отличаются. Попробовал тот же фокус с Attiny2313: слил только что залитый hex, сравнил размеры - отличаются, залил слитый обратно- все равно работает. Выходит то что hex скомпилированный в AtmelStudio и тот что слил с МК отличаются размерами это норма.
извините, но это бред.
0
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
29.05.2014, 18:54  [ТС] 9
Спасибо за качественную оценку. А какие действия были бы не бредом?
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
29.05.2014, 19:55 10
Бред - не действия, а разные дампы.
0
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
29.05.2014, 20:52  [ТС] 11
Наверное я не достаточно подробно объяснил мои манипуляции: При компиляции проекта (генерировании hex-файла) в среде AtmelStudio в нижней части окна создается отчет о ходе компиляции. Так вот там есть строка:

Program Memory Usage : 1592 bytes 4,9 % Full (насколько я понимаю - это размер именно самой прошивки, т.е. тот объем флэш-памяти МК, который будет занят прошивкой)

Если теперь открыть свойства этого hex-файла, то Windows показывает, что размер файла - 4150 байт, на диске - 8192 байт.
При "заливке" SinaProg в МК справа есть окошко с отчетом о ходе "заливки", в котором есть подобная строка:

avrdude: 1592 bytes of flash verified

То есть, насколько я могу судить, прошивается тот же объем информации что находится в исходном hex-файле. При "сливании" hex-файла из памяти МК (т.е. чтении того что записано во флэш-памяти МК и записи этого содержимого в hex-файл) образуется другой hex-файл. Если теперь открыть свойства этого файла, то Windows показывает, что размер файла - 3847 байт, на диске - 4096 байт. Но в отчете SinaProg о чтении о размере файла ничего не сказано:

avrdude -C avrdude.conf -c usbasp -p m328p -U flash:r:"C:\Under\VUSB.hex":i -q
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x1e950f
avrdude: reading flash memory:
avrdude: writing output file "C:\Under\VUSB.hex"
avrdude: safemode: Fuses OK
avrdude done. Thank you.

Но если теперь залить этот hex-файл обратно в МК, то в отчете будет все таже строка:

avrdude: 1592 bytes of flash verified

То есть насколько я могу судить - объем самой прошивки не изменился. А то что правильность прошивки при этом не изменилась я могу судить по аналогичному опыту с Attiny2313, где все работало без изменений в обоих hex-файлах хотя размеры для Windows тоже были разными.

Наверняка такой мазахизм кажется опытным людям смешным, но на данный момент я другого способа не знаю.
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
29.05.2014, 20:56 12
...вы знаете про системную утилиту diff? А тотал под рукой есть? Испробуйте функцию - файлы/сравнить по содержимому.
1
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
29.05.2014, 21:42  [ТС] 13
Да, совет с тоталом конечно полезен. Воспользовался, отличаются почти в два раза по объему и почти полностью (% так на 95, судя по результатам сравнения) Если интересно могу выложить файлы. Но вот в чем "штука": тоже самое проделал с Attiny2313, не смотря на схожие различия (и по размеру и по отличию содержимого), повторюсь: тайни работает все также.

Добавлено через 5 минут
Тоесть SinaProg просто как то иначе записывает hex при чтении чем это делает WinAVR при компиляции, но функциональность прошивки не меняется. Поэтому сложно понять глючит SinaProg при записи прошивки в Atmega328P, или изначально глючит WinAVR и сина лишь заливает неправильную прошивку.

Добавлено через 12 минут
Вспомнил, где-то в инете писали, что для проверки правильности прошивки достаточно лишь провести верификацию. Но ее я делал и раньше, все время пишет что все отлично...
В общем, сделаю опыт с миганием светодиода таймером, а там будет видно, либо получится разобраться, либо легче будет другой тип МК найти.
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
29.05.2014, 22:19 14
Сравнивать нужно одинаковые форматы, к примеру при записи и считывании использовать IntelHEX. Содержимое не может быть разным.
0
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
29.05.2014, 22:51  [ТС] 15
Ну незнаю... Вот два файла, оба .hex это вариант для Attiny2313. Привожу их, потому что они оба работают, и оба в отчетах имеют одинаковое кол-во байтов (при компиляции и во время прошивки).
Тот что FromWinAVR.hex получен путем выбора команды "build" в среде разработки AtmelStudio6.1, а тот что FromSinaProg.hex получен нажатием кнопочки Read в SinaProg (при этом предлагается выбрать два типа сохраняемого файла: All Files (*.*) и Hex file (*.hex) третьего не дано.)

Судя по содержимому файлы записаны в разных форматах, но как в SinaProg или WinAVR-AtmelStudio изменить формат записи hex-файлов я пока не знаю, попробую поразбираться, но наверное уже не сегодня.
0
Вложения
Тип файла: rar Attiny2313.rar (3.8 Кб, 8 просмотров)
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
29.05.2014, 22:53  [ТС] 16
Да... в общем, благодарю за участие в этом мазахизме и терпение.
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
30.05.2014, 15:57 17
...сравнивать имеет смыcл только одинаковые форматы/
0
GradX
21 / 21 / 8
Регистрация: 17.11.2012
Сообщений: 124
11.06.2014, 16:07  [ТС] 18
Прошу прощения за долгую паузу, не до этого было. В общем нашел время. Сделал как и планировал: использовал в коде прошивки внутренний таймер МК, при этом каждые 3 секунды на порте PB0 то подается напряжение на светодиод, то снимается. При подключении к компу, устройство сразу же (без заметной) задержки начинает мигать светодиодом с частотой один раз в 3 секунды. Спустя 15-16 секунд (ранее я указывал на время около 7 секунд, тогда не засекал по часам, теперь засек) комп попрежнему выдает сообщение о неопознанном USB устройстве, но светодиод на порте мигает без изменений, значит МК "заводится" и продолжает работать без сбоев. Время 15 секунд до появления сообщения похоже на время чтения всей флэш-памяти МК (32КБ), после чего комп не находит там того что нужно для правильной идентификации устройства.

Добавлено через 10 минут
Наверное отложу этот МК на неопределенный срок. Планирую заменить Atmega16. Надеюсь с ним проблем не будет.
0
locm
2224 / 943 / 121
Регистрация: 28.10.2011
Сообщений: 3,122
Записей в блоге: 6
14.06.2014, 21:43 19
Может все таки проблема в прошивке (например, допущена ошибка при переносе с Attiny2313 на ATmega328P)?
Попробуйте прошивку из вложения (она проверена в железе с ATmega328P). Схема устройства (не обращайте внимания на ATmega8, она совместима по выводам с 328P) и программа для ПК так же в архиве.
Удачи.
1
Вложения
Тип файла: zip Device_IO_m328p.zip (42.0 Кб, 40 просмотров)
sserg_ey
12 / 12 / 0
Регистрация: 05.11.2011
Сообщений: 31
15.06.2014, 08:53 20
Большая вероятность того, что контроллер запускается не от кварца! Уж очень схожие симптомы.
0
15.06.2014, 08:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2014, 08:53

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

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

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


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

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

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