Макетная плата AVR-USB-MEGA16 Печать
Добавил(а) microsin   

Эта отладочная плата позволяет разрабатывать устройства USB. Идеально подходит для новичков в протоколе USB.

avr-usb-mega16-sch.jpg AVR-USB-MEGA16-topside.JPG AVR-USB-MEGA16-botside.JPG
avr-usb-mega16-IMG_8082.JPG avr-usb-mega16-IMG_8085.JPG avr-usb-mega16-IMG_8080.JPGavr-usb-mega16-IMG_8098.JPG

Макетная плата 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 (порты микроконтроллера выведены на двухрядную линейку контактов).

AVR-USB-MEGA16-pinout

Порты микроконтроллера 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).

Контакт платы Имя порта Описание возможностей
P1 PA0 ADC0 - эта ножка может работать как входной канал 0 АЦП. Каналы ADC1..ADC7 несут аналогичную функцию. Подробнее про работу с АЦП см. статью "ATmega16 (32): аналого-цифровой преобразователь (ADC)".
P2 PA1 ADC1 - входной канал 1 АЦП.
P3 PA2 ADC2 - входной канал 2 АЦП.
P4 PA3 ADC3 - входной канал 3 АЦП.
P5 PA4 ADC4 - входной канал 4 АЦП.
P6 PA5 ADC5 - входной канал 5 АЦП.
P7 PA6 ADC6 - входной канал 6 АЦП.
P8 PA7 ADC7 - входной канал 7 АЦП.
P9 PB1 T1 - эта ножка может работать как тактовый вход для таймера/счетчика 1 (Timer/Counter1 External Counter Input). Подробнее см. в статье "Использование 16-bit Timer/Counter1 для измерения и подсчета импульсов".
P10 PB2 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). Обычно используется для отладки, или как как порт вывода данных для внешних устройств.
P19 PD3 INT1 - вход для внешнего прерывания 1 (External Interrupt 1 Input).
P20 PD5 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.

khazama03

Для программирования больше всего подходит 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.
image

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, запускающую программирование. Программируется кристалл очень быстро, за несколько секунд.
image
После окончания программирования красный светодиод погаснет, и начнет выполняться Ваша программа с адреса 0 (которую Вы только что записали).

4. Снимите перемычку между ножками 4 и 6 коннектора U1 ISP.
image

Для начала процитирую типичную переписку:

"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 все ненужные галочки).

Khazama162 program options

[Лицензии]

Все программное обеспечение, используемое для разработки, доступно под лицензией GPL, что освобождает Вас от выплат (но не освобождает от публикации исходных кодов Вашего программного обеспечения). Если у Вас нет возможности для публикации проекта (что требует лицензия GPL), обратитесь напрямую в OBJECTIVE DEVELOPMENT, либо напишите мне (я могу опубликовать Ваш проект на моем сайте). На пакет V-USB имеется также и коммерческая лицензия, подробности см. на сайте авторов библиотеки.

Для устройств USB необходимы также идентификаторы производителя (vendor ID, или VID) и продукции (product ID, или PID). Компания OBJECTIVE DEVELOPMENT предлагает такие пары как с бесплатными, так и с коммерческими лицензиями. Предлагаемые значения VID и PID и указания по их выбору имеются в документации на библиотеку, см. [11].

Пошаговые инструкции для начала работы с библиотекой V-USB читайте в [7]. Это позволит Вам быстро установить все необходимое для работы с библиотекой, и начать разрабатывать собственные устройства USB.

[Ссылки]

1. Как работать с платой AVR-USB-MEGA16 из Visual Studio (версия 2003). На примере описано управление светодиодом на макетной плате из кода на C++.
2. AVR-USB-MEGA16: новая жизнь старого «Милихрома» - как работать с платой AVR-USB-MEGA16 из C# (Visual Studio Express Edition 2008).
3. Класс C# (для Visual Studio Express Edition 2008) и соответствующая прошивка, позволяющие быстро сделать USB HID устройство и написать для него приложение для компьютера. Вы управляете микроконтроллером прямо из кода на C# (дергаете его ножками, читаете регистры и т. п.).
4. Projects Based on V-USB site:obdev.at - проекты, которые основаны на V-USB. Все эти проекты можно реализовать на макетной плате AVR-USB-MEGA16 (описания на английском языке). См. также [5].
5. Проекты, основанные на плате AVR-USB-MEGA16, описания на русском языке. См. также [4].
7. Разработка устройства USB - как начать работу с библиотеками AVR USB (V-USB) и libusb.
8. AVR-USB-MEGA16: USB bootloader USBasp для микроконтроллера ATmega32.
9. 100711bootloadHID.2008-11-26.zip - исходники и скомпилированные прошивки проекта BootloadHID, модифицированные для использования с макетной платой AVR-USB-MEGA16. В код BootloadHID я добавил управление красным светодиодом макетной платы D1 - для индикации процесса работы загрузчика (активизация и запись памяти). Статья с описанием работы с загрузчиком bootloadHID.
10. AVR-USB-MEGA16: управление устройством USB из GCC, Visual Studio CPP, VB6, Python, Delphi.
11. Download V-USB site:obdev.at - библиотека V-USB с документацией и комментариями в коде на английском языке. Архив avr-usb-russian.rar - библиотека V-USB на русском языке.
12. LibUSB site:sourceforge.net - библиотека LibUSB для *nix. LibUSB-win32 site:sourceforge.net - версия для Windows.
13. Программаторы для AVR.
14. usbasp-windriver.2011-05-28.zip - драйвер для программатора и загрузчика USBasp.
15. Как отключить проверку цифровой подписи драйвера в Windows 7 site:winitpro.ru.
16. Как самостоятельно подписать драйвер для Windows 7 site:winitpro.ru.
17141122Khazama162.zip - утилита Khazama162, драйвер программатора USBasp для Windows XP, Windows Vista, Windows 7, Windows 8, прошивки загрузчика USBasp для различных микроконтроллеров.
18AVR-USB-MEGA16, V-USB, FAQ: переписка по вопросам программирования.
19Как установить драйвер для программатора USBasp в Windows 8 и Windows 10.