PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Программирование микроконтроллеров » Простое USB HID устройство на ATmega32U4 (Arduino Pro Micro)


Простое USB HID устройство на ATmega32U4 (Arduino Pro Micro)

Сообщений 1 страница 8 из 8

1

В предыдущей статье было рассмотрено несложное USB HID устройство на микроконтроллере ATmega8. В нем нет аппаратного модуля USB и ресурсов микроконтроллера хватает для поддержки сравнительно медленной версии USB 1.1 со скоростью обмена 1,5 Мбит/с (Low-Speed). Существуют микроконтроллеры семейства AVR фирмы Atmel имеющие встроенный аппаратный модуль USB, который как правило поддерживает USB 2.0 и обеспечивает скорость обмена 12 Мбит/с (Full-Speed). Например AT90USB162, AT90USB1287, ATmega16U4, ATmega32U4 и т. д. Их преимущество кроме увеличенной скорости обмена еще в том что процессор микроконтроллера не участвует в приеме и дешифрации USB пакетов, а значит его ресурсы можно использовать для других целей повысив общую производительность микроконтроллера по сравнению с программной реализацией.
Одним из недостатков этих микроконтроллеров - отсутствие вариантов в DIP корпусе. В продаже можно найти различные платы с микроконтроллером и его обвязкой (цепи питания и сброса, цепи тактирования, USB и т. д.) Одна из таких плат это Arduino Pro Micro с микроконтроллером ATmega32U4.
Выглядит плата так.

http://s019.radikal.ru/i600/1602/ff/9e91c95e81c4.jpg

Прошивается это "чудо" по USB. В микроконтроллере нестандартный загрузчик (не тот что по умолчанию с завода, а от Arduino). Он активируется при сбросе микроконтроллера и ждет начала программирования в течение нескольких секунд. Если за это время программирование не началось, работа загрузчика завершается и микроконтроллер начинает выполнять основную программу. Во время работы загрузчика в системе присутствует виртуальный COM порт с именем "Arduino Leonardo bootloader (COMx)", где COMx это номер COM порта, присвоенный системой.
Прошивка выполняется программной Boot32u4.exe.

http://s017.radikal.ru/i404/1602/fb/ad092d876a50.png

В программе нужно указать путь к прошивке формата HEX и выбрать COM порт загрузчика. Его можно узнать в диспетчере устройств в момент активности загрузчика. Как писал выше у него имя "Arduino Leonardo bootloader (COMx)", где COMx это номер COM порта, присвоенный системой.
Т. к. загрузчик активен всего несколько секунд, то для упрощения прошивки в программе введен режим ожидания появления виртуального порта с таймаутом 20 секунд.
Последовательность прошивки такова.
1. Необходимо запустить программу Boot32u4.exe и при необходимости указать путь к прошивке и номер порта, а затем нажать на кнопку "Прошить".
2. В течение 20 секунд после этого необходимо перезагрузить микроконтроллер кратковременно замкнув на плате выводы RST и GND.
3. Ожидать завершения прошивки.

Теперь о тестовой прошивке и программе для компьютера. Они как и в прошлой статье были написаны на BASCOM-AVR (прошивка) и PureBasic (программа для ПК). Компьютерная программа осталась без изменений и для тестирования ее можно взять из прошлой статьи.
Светодиод использован находящийся на плате, а кнопку нужно подключить к выводам 2 и GND платы.

Скачать тестовую прошивку и программу для компьютера. http://pure-basic.narod.ru/forum_files/ … _16MHz.zip


Дальнейшее развитие темы - USB HID устройство на STM32F103C8T6 Простое USB HID устройство на STM32F103C8T6

0

2

Пётр написал(а):

Скачать тестовую прошивку и программу для компьютера. http://pure-basic.narod.ru/forum_files/ … _16MHz.zip

Спасибо, отличная работа! Поделитесь, пожалуйста, исходником прошивки на BASCOM-AVR.

0

3

Исходник выложить могу, но он без USB библиотеки бесполезен. Библиотеку выложить не могу т. к. не являюсь ее автором и не имею права на ее публикацию.

0

4

Пётр написал(а):

Исходник выложить могу, но он без USB библиотеки бесполезен. Библиотеку выложить не могу т. к. не являюсь ее автором и не имею права на ее публикацию.

Вы хоть намекните, кто автор, как называется, может я найду как связаться с ним, оч. нужно именно на Bascom работать с аппаратным USB, все что нашел, это Kleine Usb -Bibliothek Version: 1.2 (01/06/13), но там все по-немецки и ничего не понятно.
Скиньте, что можете, пожалуйста, можно в ЛС. Заранее благодарю за любую информацию.

0

5

Разобрался с немецкой библиотекой и даже заставил ее работать с репортами в 64 байта (нашел модифицированную версию usb_lib_hid_v1_3), но никак не могу понять что за глюки происходят. Алгоритм работы программ такой: "ПК отправляет даные МК > МК их обрабатывает и отсылает ПК ответ > ПК получает ответ" и так по циклу. Через 1-10-60-120 минут МК виснет наглухо, помогает только резет. Bascom 2.0.7.6, PB 5.40LTS, неделю бьюсь, не пойму что глючит. Зависание на этапе "отправка данных в ПК". Если упростить программу до "МК тупо всегда шлет данные, а ПК их получает и ничего не шлет в ответ", то не виснет. Не пойму где косяк, в коде ПК или МК и вообще из-за чего это может быть.
Железо - arduino leonardo ProMicro 13

Отредактировано Shade (25.08.2016 08:57:02)

0

6

Здравствуйте! Уточните новичку, пожалуйста:

1) Boot42U4 позволяет (без Arduino IDE) загружать hex в плату Arduino Pro Micro, в котором имеется загрузчик. Так?  И он при этом не стирается?

2) Подсоединил плату, в диспетчере сразу есть COM 22. Запускаю утилиту... Какой номер КОМ порта сразу указать? После "Прощить" он может что ли смениться на 20 сек? И как быть, если номер больше 20? Спасибо.

0

7

dim3740 написал(а):

1) Boot42U4 позволяет (без Arduino IDE) загружать hex в плату Arduino Pro Micro, в котором имеется загрузчик. Так?  И он при этом не стирается?

Не стирается. Загрузка производится тем же методом что в Arduino IDE.

dim3740 написал(а):

2) Подсоединил плату, в диспетчере сразу есть COM 22. Запускаю утилиту... Какой номер КОМ порта сразу указать?

Тот что был присвоен Arduino Pro Micro. Я об этом писал.

Пётр написал(а):

Во время работы загрузчика в системе присутствует виртуальный COM порт с именем "Arduino Leonardo bootloader (COMx)", где COMx это номер COM порта, присвоенный системой.

Если у порта номер 22, то следует задать порт COM22.

dim3740 написал(а):

И как быть, если номер больше 20?

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

0

8

Пётр написал(а):

1. Необходимо запустить программу Boot32u4.exe и при необходимости указать путь к прошивке и номер порта, а затем нажать на кнопку "Прошить".

Под номером порта следует понимать порт буатлодера, а не тот "что был присвоен Arduino Pro Micro".... тогда все прошивается. Спасибо. Думаю, я просто недопонял(((

Отредактировано dim3740 (25.01.2019 13:12:29)

0


Вы здесь » PureBasic - форум » Программирование микроконтроллеров » Простое USB HID устройство на ATmega32U4 (Arduino Pro Micro)