Эта отладочная плата позволяет разрабатывать устройства USB. Идеально подходит для новичков в протоколе USB.
Макетная плата AVR-USB-MEGA16 предназначена для быстрой разработки низкоскоростных (low-speed) устройств USB на микроконтроллере ATmega16 (или ATmega32. Сейчас на готовые макетные платы устанавливаются микроконтроллеры ATmega32A, но если Вы купили пустую плату, то можете установить любой микроконтроллер - или ATmega16, или ATmega32A, цоколевка в корпусе TQFP44 у них одинаковая), при этом протокол USB реализован программно, без использования дополнительных специализированных чипов. Это решение хорошо подходит для проектирования таких периферийных устройств для компьютера, которые не требуют высоких скоростей обмена по шине USB (подключение датчиков, устройств ввода, специализированных программаторов для чипов). Программная реализация протокола USB значительно упрощает принципиальную схему и снижает стоимость устройства в целом. Новичок в протоколе USB может легко спроектировать свое устройство USB и программу компьютера (ПО хоста) для него, поскольку имеются простые примеры работающих устройств (USB HID - управление портами, передача данных, есть даже пример мыши) с подробными комментариями на русском языке.
С июля 2010 года макетная плата AVR-USB-MEGA16 поставляется в новой модификации - с микроконтроллером ATmega32 и прошитым загрузчиком кода по USB - usbasploader. Это позволяет начинающим программистам загружать в макетную плату программу без использования программатора. Все, что Вам нужно - только макетная плата и подключение по USB к компьютеру. Загрузчик usbasploader с исходниками, простая инструкция по использованию доступна по ссылке [8].
Для варианта макетной платы с микроконтроллером ATmega16 лучше подойдет другой загрузчик - bootloadHID. Загрузчик bootloadHID с исходниками можно скачать по ссылке [9], там же есть ссылка на статью с описанием работы загрузчика bootloadHID.
Значения фьюзов по умолчанию, которые прошиты в платы - LOW FUSE BYTE: 0xCF, HIGH FUSE BYTE: 0x98, LOCKOPT BYTE: 0xEF.
[Аппаратура]
Краткое описание основных особенностей платы:
1. Имеется макетное поле 8x11 с шагом между отверстиями 2.54 мм, разъем MINI USB, индикационный светодиод (используется в демонстрационных программах, поставляемых с платой), микроконтроллер ATmega32A в корпусе TQFP44, тактовая частота 12 МГц (или 16 МГц, в зависимости от того, какой кварц используется).
2. Размеры платы с макетным полем 64.8 x 30.7 мм, без макетного поля 45.4 x 30.7 мм (для уменьшения размеров макетное поле можно отрезать). Толщина платы вместе с монтажом 11.5 мм (определяется самыми высокими элементами на плате - ISP и JTAG коннекторами, они выступают над поверхностью TOP платы на 9 мм). USB-коннектор выступает за край платы на 2 мм.
3. Программирование микроконтроллера возможно прямо на плате через стандартный (цоколевка Atmel) 6-контактный разъем U1 для ISP-программатора. Через этот же коннектор возможна отладка через интерфейс debugWIRE (с помощью аппаратного отладчика/программатор JTAGICE mkII или AVR Dragon).
4. Для программирования и отладки программы микроконтроллера имеется 10-контактный JTAG-коннектор U3 (цоколевка Atmel, может использоваться аппаратный отладчик/программатор JTAGICE mkII или AVR Dragon).
5. Из аппаратных ресурсов микроконтроллера для реализации протокола USB используется только прерывание INT0.
6. Из ресурсов памяти программ для простых примеров используется 1464..2090 байт (зависит от типа устройства, опций оптимизации и версии компилятора), что составляет не более 13% памяти программ ATmega16. Утилизация времени процессора зависит от интенсивности потока данных через интерфейс USB (если он используется).
7. Питание платы осуществляется от 5 вольт шины USB.
8. Из 32 линий ввода/вывода ATmega16 занято 10 (2 - под сигналы USB, 1 для светодиода, 3 для программатора ISP, 4 для подключения JTAG-эмулятора), свободно для нужд пользователя 22 (порты микроконтроллера выведены на двухрядную линейку контактов).
Порты микроконтроллера ATmega32A, не выведенные на контакты P1..P22, перечислены в таблице.
Порт
Назначение
Примечание
PB0
LED
Индикационный светодиод. Можно использовать в программе пользователя.
PB5
MOSI, ISP U1 выв. 4, ножка 1 ATmega32A
Ножка PB5 используется при включении питания как вход для определения условия активации бутлоадера - на PB5 лог. 0 (установлена перемычка на контакты 4 и 6 коннектора ISP U1), то USB бутлоадер запускается, если лог. 1, то запускается программа пользователя.
PB6
MISO, ISP U1 выв. 1, ножка 2 ATmega32A
Можно использовать в программе пользователя как порт ввода/вывода, или в составе аппаратуры SPI.
PB7
SCK, ISP U1 выв. 3, ножка 3 ATmega32A
PC2
TCK, JTAG U3 выв. 1, ножка 21 ATmega32A
Фьюзы установлены таким образом, что эти ножки используются исключительно как JTAG. Чтобы задействовать их как порты ввода/вывода, нужно перепрограммировать фьюз JTAGEN (установить его в 1).
PC3
TMS, JTAG U3 выв. 5, ножка 22 ATmega32A
PC4
TDO, JTAG U3 выв. 3, ножка 23 ATmega32A
PC5
TDI, JTAG U3 выв. 9, ножка 24 ATmega32A
PD2
D+ USB, ножка 11 ATmega32A
Эти выводы микроконтроллера задействованы исключительно для сигналов данных интерфейса USB.
PD4
D- USB, ножка 13 ATmega32A
[Дополнительные возможности портов ввода-вывода ATmega32A (ATmega16)]
Все порты микроконтроллера ATmega32A могут работать не только как простые ножки ввода вывода GPIO. Они также могут нести дополнительные функции, привязанные к богатой внутренней аппаратуре ядра AVR. В таблице ниже представлено краткое описание этих функций (полное описание см. в даташите на микроконтроллер ATmega32A).
AIN0, INT2. Эта ножка может выполнять две дополнительные функции. AIN0 - положительный вход аналогового компаратора (Analog Comparator Positive Input). INT2 - вход для внешнего прерывания 2 (External Interrupt 2 Input).
P11
PB3
AIN1, OC0. Эта ножка может выполнять также две дополнительные функции. AIN0 - отрицательный вход аналогового компаратора (Analog Comparator Negative Input). OC0 - выход сигнала события совпадения таймера/счетчика 0 (Timer/Counter0 Output Compare Match Output).
P12
PB4
~SS, этот вывод может работать как аппаратная выборка внешних подчиненных устройств, подключенных к интерфейсу SPI (SPI Slave Select Input).
P13
PC0
SCL, это сигнал тактов для внешнего подчиненного устройства шины I2C/TWI (Two-wire Serial Bus Clock Line).
P14
PC1
SDA, это двунаправленный сигнал данных для внешнего подчиненного устройства шины I2C/TWI(Two-wire Serial Bus Data Input/Output Line).
P15
PC6
TOSC1, вход для подключения резонатора для дополнительного генератора (Timer Oscillator Pin 1). Если ножка используется в режиме TOSC1, то этот вывод работает как вход внутреннего инвертирующего усилителя (сюда подключают кварцевый или керамический резонатор).
P16
PC7
TOSC2, выход для подключения резонатора для дополнительного генератора (Timer Oscillator Pin 2). Если ножка используется в режиме TOSC2, то этот вывод работает как выход внутреннего усилителя (сюда подключают кварцевый или керамический резонатор).
P17
PD0
RXD, вход последовательного порта UART (USART Input Pin). Обычно используется как порт ввода данных от внешних устройств, или для отладки.
P18
PD1
TXD, выход последовательного порта UART (USART Output Pin). Обычно используется для отладки, или как как порт вывода данных для внешних устройств.
OC1A - сигнал события совпадения A таймера 1 (Timer/Counter1 Output Compare A Match Output).
P21
PD6
ICP1, вход для захвата внешних импульсов (Timer/Counter1 Input Capture Pin). Может использоваться для измерения длительностей сигнала с помощью таймера 1.
P22
PD7
OC2 - сигнал события совпадения таймера 2 (Timer/Counter2 Output Compare Match Output).
LED
PB0
T0, XCK. К этой ножке на макетной плате подключен светодиод. Ножка могла бы использоваться как T0 - вход тактового сигнала для таймера 0 (Timer/Counter0 External Counter Input), или как XCK - вход тактов для порта USART (USART External Clock Input/Output).
В таблице не показаны порты ATmega32A, задействованные под интерфейсы JTAG и ISP. Пользоваться этими портами как GPIO нельзя, если не перепрограммировать фьюзы микроконтроллера.
Сигналы совпадения таймера OC0, OC2, OC1A, OC1B могут использоваться для генерации постоянного аналогового уровня и звуковых сигналов с помощью ШИМ (PWM). Сигнал совпадения выдается, когда содержимое счетчика таймера совпало с предопределенным заранее значением. Подробнее см. статью - "ATmega16 - PWM с помощью T/C0, T/C1, T/C2" и даташит на ATmega32A.
[Программное обеспечение]
Для ATmega16 (или ATmega32) используется пакет V-USB (старое название AVR-USB), разработанный компанией OBJECTIVE DEVELOPMENT Software GmbH. Пакет распространяется по лицензии GPL, см. [11].
Для компьютера (назовем его для краткости хост, как предлагает OBJECTIVE DEVELOPMENT) используется библиотека libusb-win32 для операционной системы Windows (2000, 2003, XP) и libusb для операционных систем семейства *nix (Mac OS, Linux и т. д.). Библиотека также поставляется по лицензии GPL, см. [12].
Примеры программ для ATmega16 - USB-устройство пользовательского класса, класса HID, HID-мышь (для HID-устройств USB не нужны драйвера в операционных системах Windows), см. папку examples пакета V-USB. Программное обеспечение предназначено для компиляции с помощью gcc, есть также порт на систему IAR Embedded Workbench for Atmel AVR (заголовочный файл).
Примеры программ для компьютера (ПО хоста) - управляющие программы устройств USB, см. папку examples пакета V-USB. Программное обеспечение предназначено для компиляции с помощью gcc (и под Windows, и под *nix).
Плата поставляется с тестовой прошивкой, реализующей работу устройства HID (драйвер для такого USB-устройства в Windows 2000 и XP не требуется), см. описание работы этой прошивки в [1]. Возможна прошивка платы другим firmware, например Сергея Кухтецкого, см. [3] - по желанию пользователя.
[Чем программировать?]
Прошивать программу (firmware) в память микроконтроллера макетной платы удобнее всего с помощью программы Khazama [8], через интерфейс USB. Не нужен никакой программатор, нужен только компьютер с установленным программным обеспечением (Khazama и драйвер программатора USBasp). Это возможно благодаря тому, что в память микроконтроллера ATmega32A, установленного на макетной плате AVR-USB-MEGA16, записан бутлоадер, эмулирующий протокол USBasp.
Для программирования больше всего подходит Khazama версии v1.6.2, так как она наиболее совместима с бутлоадером USBasp. Бутлоадер позволяет только перезаписать память программ FLASH (фьюзы перезаписать нельзя), причем это можно делать практически неограниченное количество раз. Для работы с бутлоадером в операционной системе Windows необходимо установить драйвер программатора USBasp. Драйвер есть на сайте автора программатора USBasp, также см. [14]. В статье [8] подробно описана работа с бутлоадером USBasp. Процесс прошивки прост - установите перемычку, активирующую бутлоадер, подключите макетную плату AVR-USB-MEGA16 к компьютеру, запустите программу Khazama, выберите микроконтроллер AVR ATMEGA32, через меню File -> Load FLASH file to Buffer загрузите прошивку firmware в HEX-формате, и нажмите кнопку Auto Program. Через несколько секунд программа будет записана в память микроконтроллера платы AVR-USB-MEGA16. Теперь можно снять перемычку, и использовать плату уже с новой программой.
Примечание: в принципе программа Khazama 1.6.2 портабельна, т. е. она не требует установки, достаточно сделать копию папки уже установленной программы. Вы можете так и поступить, и скачать уже установленную программу вместе с драйвером в архиве [17]. Распакуйте из архива папку Khazama162 в любое место на диске (например, прямо в корень C: или в папку Program Files), создайте ярлычок для исполняемого файла Khazama AVR Programmer.exe, и установка на этом завершена.
Кроме того, плату AVR-USB-MEGA16 можно прошивать стандартными ISP и JTAG программаторами [13], для этого имеются коннекторы ISP U1 и JTAG U3 соответственно. Через эти коннекторы можно не только прошивать firmware в память FLASH, можно также работать с памятью EEPROM и управлять значением перемычек (фьюзов) микроконтроллера ATmega32A. В радиолюбительской практике это обычно не требуется.
Здесь короткое описание, предполагается, что драйвер USBasp Вы уже установили (подробно см. [8], там также описана процедура установки драйвера USB):
1. Поставьте перемычку между ножками 4 и 6 коннектора U1 ISP.
2. Подключите макетную плату к компьютеру по USB. На макетной плате загорится красный светодиод, и в системе Windows обнаружится программатор USBasp.
3. Запустите программу Khazama AVR Programmer версии 1.6.2 (с другой версией возможны сообщения об ошибке). В настройках уберите опцию очистки памяти кристалла (Command -> Program Options -> снимите галку Erase Chip). Выберите из выпадающего списка Ваш чип (ATMEGA32). Загрузите hex-файл прошивки (через меню File -> Load FLASH file to Buffer). Нажмите большую кнопку Auto Program, запускающую программирование. Программируется кристалл очень быстро, за несколько секунд.
После окончания программирования красный светодиод погаснет, и начнет выполняться Ваша программа с адреса 0 (которую Вы только что записали).
4. Снимите перемычку между ножками 4 и 6 коннектора U1 ISP.
"Q. Почему-то не получается загрузить программу в память микроконтроллера. Установил перемычку, поставил драйвер USBasp. Использую Khazama - ID чипа успешно определяется, но при попытке загрузить программу или стереть чип - USBasp "отваливается", светодиод гаснет. Khazama сообщает что не может найти USBasp. Аналогичная ситуация и c BASCOM AVR. С чем это может быть связано?
A. Привет, Роман. Загрузчик умеет делать одну и только одну операцию - программирование памяти FLASH, и ничего более. Поэтому даже не пытайтесь делать какие-то другие операции: стереть чип, прочитать/записать фьюзы и т.д. это бессмысленно, будет только приводить к недоразумениям и ошибкам. Постарайтесь действовать точно по инструкции, убедитесь, что у Вас версия Khazama 1.6.2, уберите в настройках все галочки и попробуйте еще раз. Если что-то не получается, то пожалуйста подробно опишите Ваши действия (со скриншотами) и проблему (что именно пошло не так, как ожидалось).
Q. Спасибо, разобрался. Во FLASH грузит, простейшая мигалка работает.
A. Я рад. Где косяк поначалу был?
Q. Не сообразил, что загрузчик делает только одну операцию. Если сразу грузить во FLASH, то все получается."
Это самая частая проблема с загрузчиком - пользователь не сразу понимает, что загрузчик работает не совсем так же, как и программатор USBasp, который он эмулирует, и имеются определенные ограничения. Итак, теперь список основных причин проблем с загрузчиком:
Не установлен драйвер USBasp. В этом случае подключенная с перемычкой плата будет отображаться в Диспетчере Устройств со знаком вопроса. Проблема решается установкой драйвера, который следует искать на сайте автора программатора USBasp (найти легко, прогуглите). Иногда драйвер не получается установить на Windows 7 или 8 из-за проблем с безопасностью - не подписанный серитификат. Обойти это можно отключением проверки сертификатов при установке драйвера (как это делается, можно найти в Интернете). См. также хорошую статью [19], где подробно описана установка драйвера на Windows 8 и Windows 10.
Неправильно используете утилиту программирования. Это как раз тот случай, который был у Романа. Либо у Вас Khazama не той версии (не 1.6.2), либо пытаетесь делать какие-то посторонние операции, кроме прошивки FLASH (снимите в настройках Khazama все ненужные галочки).
[Лицензии]
Все программное обеспечение, используемое для разработки, доступно под лицензией GPL, что освобождает Вас от выплат (но не освобождает от публикации исходных кодов Вашего программного обеспечения). Если у Вас нет возможности для публикации проекта (что требует лицензия GPL), обратитесь напрямую в OBJECTIVE DEVELOPMENT, либо напишите мне (я могу опубликовать Ваш проект на моем сайте). На пакет V-USB имеется также и коммерческая лицензия, подробности см. на сайте авторов библиотеки.
Для устройств USB необходимы также идентификаторы производителя (vendor ID, или VID) и продукции (product ID, или PID). Компания OBJECTIVE DEVELOPMENT предлагает такие пары как с бесплатными, так и с коммерческими лицензиями. Предлагаемые значения VID и PID и указания по их выбору имеются в документации на библиотеку, см. [11].
Пошаговые инструкции для начала работы с библиотекой V-USB читайте в [7]. Это позволит Вам быстро установить все необходимое для работы с библиотекой, и начать разрабатывать собственные устройства USB.
У вас написано "libusb для операционных систем семейства *nix (Mac OS, Linux и т. д.). Библиотека также поставляется по лицензии GPL, см. [12]." Однако ссылки под номером 12 просто нет. Где взять саму библиотеку и документацию (мануал) на нее?
microsin: в пункте [12] Ссылок дана не ссылка, а ключевые слова для поиска Google.
Как различить два устройства с vid=0x16c0 pid=0x5df (у которых VID и PID совпадают)?
microsin: несмотря на то, что VID и PID могут совпадать, устройства USB все равно должны как-то отличаться друг от друга дескрипторами, чтобы к ним ПО хоста могло обращаться по отдельности. Обычно дополнительные различия создаются с помощью текстовых дескрипторов (String Descriptor), они должны отличаться в устройствах с одинаковыми VID и PID. Например, это может быть или серийный номер, или описатель устройства. См. в примерах библиотеки V-USB файл usbconfig.h -> USB_CFG_DEVICE_NAME, USB_CFG_SERIAL_NUMBER. Серийный номер в операционных системах Windows используется с устройствами класса USB CDC для назначения имени виртуального COM-порта (COM5, COM6 и т. д.), при этом они могут иметь одинаковые VID и PID.
Устройства можно также отличать по идентификатору порта хоста USB, в который устройство USB подключено. Но обычно так никто не делает, потому что это связано с неудобствами - нужно знать не только идентификаторы портов, но еще и в какой порт какое устройство подключено.
Скажите а почему вы в прошивке которая в плате по умолчанию стоит указали vid=0x16c0 pid=0x5df. Теперь я пытаюсь закинуть новую прошивку с помощью avrdude а он пишет что could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc. Что с этим делать пока ума не приложу.
microsin: эти VID и PID не я придумал, а компания Obdev.at, которая разработала библиотеку V-USB и соответственно примеры, один из которых (hid-custom-rq) и прошит по умолчанию в память чипа ATmega32 макетной платы AVR-USB-MEGA16. Если Вас что-то не устраивает, напишите ЛЮБУЮ свою программу (или возьмите готовую), с ЛЮБЫМИ понравившимися Вам VID и PID, и прошейте её в память чипа либо с помощью бутлоадера USBasp, либо с помощью generic-программатора ISP, либо с помощью тривиальнейшего JTAG-отладчика Atmel Dragon или JTAGICE MkII.
Дело такого рода, плата AVR-USB-MEGA16 c Mega32, компилирую прошивку указываю в настройках make чип atmega32 и частоту 12000000 компилируется на отлично но комп выдает постоянно что usb устройство не опознано, причем любые прошивки которые есть на сайте, может я что то не так делаю?
microsin: да, скорее всего что-то не так делаете. Причин может быть несколько. Либо фьюзы установлены неправильно, либо неправильно пришиваете, либо кварц у Вас не на 12 МГц, а на другую частоту, либо неправильно компилируете. Прогуглите "Почему не работает библиотека V-USB".
Если я например возьму hid.dll (microsoft) или USB CDC, то как построить firmware? Т. е. реализовать те же возможности что и класс обертка Сергея.
microsin: во-первых, не мешайте все в одну кучу: библиотека hid.dll предназначена для взаимодействия с устройствами класса USB HID. Устройства USB CDC не требуют для доступа библиотеку hid.dll, работают с такими устройствами точно так же, как с обычным COM-портом. Во-вторых, если Вы задаете такие вопросы, то однозначно другого пути нет, кроме как взять готовые примеры кода, изменить их под свои задачи и использовать.
А возможно ли работать с этой макетной платой без V-USB и libUSB?
microsin: конечно, можно работать с макетной платой без V-USB, но тогда Вы не сможете разрабатывать на ней устройства USB. Бутлоадер будет также нормально работать, и Вы сможете загружать в память микроконтроллера макетной платы любые программы.
Есть также другие библиотеки для программной реализации интерфейса USB на AVR, но V-USB все-таки самая удобная для использования.
Меня интересует реализация возможностей обертки Сергея Кутехцого - съем данных с датчиком и управление шаговым двигателем. Но не хотелось бы использовать V-USB или какие то сторонние библиотеки. Возможно ли это реализовать на этой макетной плате или стоит посмотреть в сторону макетных плат с аппаратным USB?
microsin: Вы можете без библиотек на стороне ПО хоста использовать только класс USB CDC (виртуальный COM-порт), и ничего более (причем не имеет значения, "аппаратно" или "софтварно" устроен интерфейс у Вашего USB-устройства). Если же Вам нужен USB HID или пользовательский класс/драйвер, то использовать библиотеки все равно придется - либо libusb, либо HID.dll (Microsoft), либо какие-то еще, другого выхода нет (причем опять-таки не имеет значения, "аппаратно" или "софтварно" устроен интерфейс у Вашего USB-устройства).
Что же касается класса-обертки C# Сергея Кухтецкого, то: 1. Этот класс использует внутри себя обращения к функциям libusb, но скрывает это внутри класса, т. е. непосредственно к функциям libusb программисту обращаться не нужно, нужно всего лишь обращаться напрямую к регистрам микроконтроллера ATmega16 через методы класса. Таким образом, просто необходимо, чтобы библиотека libusb была установлена на компьютере, где работает программа, и на USB-устройство установлен драйвер фильтра, и все. 2. Для низкоскоростного съема данных с датчиков (например, с АЦП) класс-обертка подойдет хорошо. Однако для управления шаговым двигателем - это медленное решение, и высокой точности и скорости в управлении шаговым двигателем не достичь.
А возможно ли работать с этой макетной платой без V-USB и libUSB?
microsin: конечно, можно работать с макетной платой AVR-USB-MEGA16 без использования V-USB, но тогда Вы не сможете разрабатывать на ней устройства USB. Бутлоадер будет также нормально работать, и Вы сможете загружать в память микроконтроллера макетной платы любые программы.
Есть также другие библиотеки для программной реализации интерфейса USB на AVR, но V-USB все-таки самая удобная для использования.
Комментарии
Можете помочь?
microsin: к сожалению, я не спец по тренажерам, и прошивки для этого тренажера у меня нет.
microsin: в пункте [12] Ссылок дана не ссылка, а ключевые слова для поиска Google.
microsin: для ATmega32A в корпусе LQFP44 это выводы 6, 18, 28, 39 (ножки микроконтроллер а, которые на схеме помечены меткой GND).
microsin: конечно можно, никаких проблем нет.
microsin: несмотря на то, что VID и PID могут совпадать, устройства USB все равно должны как-то отличаться друг от друга дескрипторами, чтобы к ним ПО хоста могло обращаться по отдельности. Обычно дополнительные различия создаются с помощью текстовых дескрипторов (String Descriptor), они должны отличаться в устройствах с одинаковыми VID и PID. Например, это может быть или серийный номер, или описатель устройства. См. в примерах библиотеки V-USB файл usbconfig.h -> USB_CFG_DEVICE_ NAME, USB_CFG_SERIAL_ NUMBER. Серийный номер в операционных системах Windows используется с устройствами класса USB CDC для назначения имени виртуального COM-порта (COM5, COM6 и т. д.), при этом они могут иметь одинаковые VID и PID.
Устройства можно также отличать по идентификатору порта хоста USB, в который устройство USB подключено. Но обычно так никто не делает, потому что это связано с неудобствами - нужно знать не только идентификаторы портов, но еще и в какой порт какое устройство подключено.
microsin: эти VID и PID не я придумал, а компания Obdev.at, которая разработала библиотеку V-USB и соответственно примеры, один из которых (hid-custom-rq) и прошит по умолчанию в память чипа ATmega32 макетной платы AVR-USB-MEGA16. Если Вас что-то не устраивает, напишите ЛЮБУЮ свою программу (или возьмите готовую), с ЛЮБЫМИ понравившимися Вам VID и PID, и прошейте её в память чипа либо с помощью бутлоадера USBasp, либо с помощью generic-программатора ISP, либо с помощью тривиальнейшего JTAG-отладчика Atmel Dragon или JTAGICE MkII.
microsin: да, скорее всего что-то не так делаете. Причин может быть несколько. Либо фьюзы установлены неправильно, либо неправильно пришиваете, либо кварц у Вас не на 12 МГц, а на другую частоту, либо неправильно компилируете. Прогуглите "Почему не работает библиотека V-USB".
microsin: во-первых, не мешайте все в одну кучу: библиотека hid.dll предназначена для взаимодействия с устройствами класса USB HID. Устройства USB CDC не требуют для доступа библиотеку hid.dll, работают с такими устройствами точно так же, как с обычным COM-портом. Во-вторых, если Вы задаете такие вопросы, то однозначно другого пути нет, кроме как взять готовые примеры кода, изменить их под свои задачи и использовать.
Меня интересует реализация возможностей обертки Сергея Кутехцого - съем данных с датчиком и управление шаговым двигателем. Но не хотелось бы использовать V-USB или какие то сторонние библиотеки. Возможно ли это реализовать на этой макетной плате или стоит посмотреть в сторону макетных плат с аппаратным USB?
microsin: Вы можете без библиотек на стороне ПО хоста использовать только класс USB CDC (виртуальный COM-порт), и ничего более (причем не имеет значения, "аппаратно" или "софтварно" устроен интерфейс у Вашего USB-устройства). Если же Вам нужен USB HID или пользовательски й класс/драйвер, то использовать библиотеки все равно придется - либо libusb, либо HID.dll (Microsoft), либо какие-то еще, другого выхода нет (причем опять-таки не имеет значения, "аппаратно" или "софтварно" устроен интерфейс у Вашего USB-устройства).
Что же касается класса-обертки C# Сергея Кухтецкого, то:
1. Этот класс использует внутри себя обращения к функциям libusb, но скрывает это внутри класса, т. е. непосредственно к функциям libusb программисту обращаться не нужно, нужно всего лишь обращаться напрямую к регистрам микроконтроллер а ATmega16 через методы класса. Таким образом, просто необходимо, чтобы библиотека libusb была установлена на компьютере, где работает программа, и на USB-устройство установлен драйвер фильтра, и все.
2. Для низкоскоростног о съема данных с датчиков (например, с АЦП) класс-обертка подойдет хорошо. Однако для управления шаговым двигателем - это медленное решение, и высокой точности и скорости в управлении шаговым двигателем не достичь.
microsin: конечно, можно работать с макетной платой AVR-USB-MEGA16 без использования V-USB, но тогда Вы не сможете разрабатывать на ней устройства USB. Бутлоадер будет также нормально работать, и Вы сможете загружать в память микроконтроллер а макетной платы любые программы.
Есть также другие библиотеки для программной реализации интерфейса USB на AVR, но V-USB все-таки самая удобная для использования.
RSS лента комментариев этой записи