Макетная плата AVR-USB-TINY45 позволяет разрабатывать на основе микроконтроллера ATtiny45 (или ATtiny85) и открытой библиотеки V-USB (старое название AVR-USB, см. Википедию) простые и маленькие USB-устройства.
Размеры платы с макетным полем 42.4 x 12.3 мм, без макетного поля 23.4 x 12.3 мм (для уменьшения размеров макетное поле можно отрезать). Толщина платы вместе с монтажом 11.5 мм (определяется самым высоким элементом на плате - ISP коннектором, он выступает над поверхностью TOP платы на 9 мм).
На плате есть необходимый минимум для макетирования и отладки - разведено макетное поле и разъем ISP для программирования микроконтроллера ATtiny45. Плата спроектирована таким образом, что по окончании разработки ненужные части платы (USB-коннектор, коннектор ISP, и даже макетное поле) можно обрезать, уменьшив тем самым габариты устройства.
Хороший пример использования макетной платы AVR-USB-TINY45 - USB-устройство, которое работает как USB-HID клавиатура и посылает время от времени случайные нажатия. Незаметно вставив такое устройство в порт USB, можно неплохо над кем-нибудь подшутить (если что, я этого Вам не советовал =).
Код и схема взяты из проекта [5], идея [6]. Исходный код и прошивку, слегка подправленную мной (я увеличил скорость выдачи случайных нажатий) можно также скачать по ссылке [7].
[Дополнительные возможности портов ввода-вывода ATtiny85 (ATtiny45)]
Все порты микроконтроллера ATtiny85 могут работать не только как простые ножки ввода вывода GPIO. Они также могут нести дополнительные функции, привязанные к богатой внутренней аппаратуре ядра AVR. В таблице ниже представлено краткое описание этих функций (полное описание см. в даташите на микроконтроллер ATtiny85).
Порт |
Функции |
Описание |
PB0(1) |
MOSI AIN0 OC0A ~OC1A DI SDA AREF PCINT0 |
MOSI: сигнал данных интерфейса SPI, выход мастера, вход подчиненного устройства (Master Data Output / Slave Data Input). AIN0: неинвертирующий вход аналогового компаратора (Analog Comparator, Positive Input). OC0A: выход сигнала события сравнения A таймера/счетчика 0 (Timer/Counter0 Compare Match A output). ~OC1A: комплементарный выход сигнала события сравнения A таймера/счетчика 1 (Complementary Timer/Counter1 Compare Match A Output). DI: вход данных универсального последовательного интерфейса в трехпроводном режиме (USI Data Input, Three Wire Mode). SDA: вход данных универсального последовательного интерфейса в двухпроводном режиме (USI Data Input, Two Wire Mode) AREF: внешнее опорное напряжение для АЦП (External Analog Reference). PCINT0: вход 0 прерывания по изменению логического уровня (Pin Change Interrupt 0, Source 0). |
PB1 |
MISO AIN1 OC0B OC1A DO PCINT1 |
MISO: сигнал данных интерфейса SPI, вход мастера, выход подчиненного устройства (SPI Master Data Input / Slave Data Output). AIN1: инвертирующий вход аналогового компаратора (Analog Comparator, Negative Input). OC0B: выход сигнала события сравнения B таймера/счетчика 0 (Timer/Counter0 Compare Match B Output). OC1A: выход сигнала события сравнения A таймера/счетчика 1 (Timer/Counter1 Compare Match A Output). DO: выход данных универсального последовательного интерфейса, трехпроводный режим (USI Data Output, Three Wire Mode). PCINT1: вход 1 прерывания по изменению логического уровня (Pin Change Interrupt 0, Source 1). |
PB2(1) |
SCK ADC1 T0 USCK SCL INT0 PCINT2 |
SCK: тактовый сигнал SPI (Serial Clock Input). ADC1: вход канала 1 АЦП (ADC Input Channel 1). T0: тактовый вход таймера/счетчика 0 (Timer/Counter0 Clock Source). USCK: такты универсального последовательного интерфейса в трехпроводном режиме (USI Clock, Three Wire Mode). SCL: такты универсального последовательного интерфейса в двухпроводном режиме (USI Clock, Two Wire Mode). INT0: вход внешнего прерывания 0 (External Interrupt 0 Input). PCINT2: вход 2 прерывания по изменению логического уровня (Pin Change Interrupt 0, Source 2). |
PB3 |
XTAL1 CLKI ADC3 ~OC1B PCINT3 |
XTAL1: вход тактового генератора для подключения резонатора (Crystal Oscillator Input). CLKI: внешний тактовый вход (External Clock Input). ADC3: вход канала 3 АЦП (ADC Input Channel 3). ~OC1B: комплементарный выход сигнала события сравнения B таймера/счетчика 1 (Complementary Timer/Counter1 Compare Match B Output). PCINT3: вход 3 прерывания по изменению логического уровня (Pin Change Interrupt 0, Source 3). |
PB4 |
XTAL2 CLKO ADC2 OC1B PCINT4 |
XTAL2: выход тактового генератора для подключения резонатора (Crystal Oscillator Output). CLKO: выход тактового сигнала ядра (System Clock Output). ADC2: вход канала 2 АЦП (ADC Input Channel 2). OC1B: выход сигнала события сравнения B таймера/счетчика 1 (Timer/Counter1 Compare Match B Output). PCINT4: вход 4 прерывания по изменению логического уровня (Pin Change Interrupt 0, Source 4). |
PB5(2) |
~RESET dW ADC0 PCINT5 |
~RESET: вход сброса (Reset Pin). dW: сигнал однопроводного интерфейса для отладки (debugWIRE I/O). ADC0: вход канала 0 АЦП (ADC Input Channel 0). PCINT5: вход 5 прерывания по изменению логического уровня (Pin Change Interrupt, Source 5) |
Примечания:
(1) Если задействовано подключение к USB, то порты PB0 и PB2 использовать нельзя, потому что они обслуживают сигналы USB D- и D+ соответственно. (2) Порт PB5 по умолчанию работает как ножка сброса (~RESET) или как вход для подключения отладчика debugWIRE. Чтобы можно было его использовать как порт ввода/вывода, или задействовать как ADC0 или PCINT5, то нужно разрешить это программированием фьюзов микроконтроллера.
Сигналы совпадения таймера OC0A, ~OC1A, OC0B, OC1A, ~OC1B, OC1B могут использоваться для генерации постоянного аналогового уровня и звуковых сигналов с помощью ШИМ (PWM). Сигнал совпадения выдается, когда содержимое счетчика таймера совпало с предопределенным заранее значением. Подробнее см. статью - "ATmega16 - PWM с помощью T/C0, T/C1, T/C2" и даташит на ATtiny85.
[Обработка USB bus reset]
Часто пользователи спрашивают - "почему после перезагрузки компьютера, если макетная плата была воткнута, то операционная система её не видит?". Это происходит потому, что со стороны платы был некорректно обработан спецсигнал от хоста USB - так называемый сигнал USB bus reset, сигнал сброса по шине USB. Он нужен для того, чтобы заново провести энумерацию всех устройств на шине USB. Устройство USB должно обнаружить этот сигнал, и правильно отвечать на него - временно отключившись от шины USB. Чтобы такое отключение можно было осуществить программно (библиотека V-USB это поддерживает), микроконтроллер должен иметь возможность отключать нагрузочный резистор от +питания (для AVR-USB-TINY45 это верхний конец резистора R1).
Николай Москалюк предложил сделать соответствующую доработку схемы. К сожалению, для этого придется задействовать драгоценный порт микроконтроллера ATtiny85. Дословно цитирую письмо Николая:
Высылаю схему моей модификации (в прикрепленном файле). Нужно всего-то отсоединить R1 от VCC и подключить его ко второй ножке контроллера (PB3). Таким образом, резистор не всегда будет сидеть на плюсе, а только тогда, когда укажет драйвер AVR-USB. Для этого в нем реализованы все необходимые функции, которые, кстати, выполняются автоматически, ничего в твоей прошивке (кроме двух параметров файла usbconfig.h) менять не надо. В конфигурационном файле usbconfig.h обязательно нужно указать два параметра:
#define USB_CFG_PULLUP_IOPORTNAME B
#define USB_CFG_PULLUP_BIT 3
Т.е. мы всего лишь указываем драйверу какая ножка контроллера будет управлять резистором R1.
[Ссылки]
1. Projects Based on V-USB site:obdev.at - проекты, основанные на библиотеке V-USB. Здесь можно найти много интересного, связанного с разработкой USB-устройств на основе библиотеки AVR-USB. 2. Автокликер. 1.1 Лайт site:workshop.stiff.ru. Устройство, которое эмулирует мышь, и генерирует нажатия на левую кнопку. В автокликере используется другой микроконтроллер - ATtiny2313, фьюзы для него FUSE_L = 0xEF, FUSE_H = 0xDB. 3. Keyboard Scan Code Specification (scancode.doc) - скан-коды обычных и USB-клавиатур. 4. Как портировать проекты V-USB с ATmega16 (ATmega32) на ATtiny45 (ATtiny85). 5. The Haunted USB Cable site:imakeprojects.com. Используется микроконтроллер - ATtiny45 (можно использовать ATtiny85), фьюзы для него FUSE_L = 0xD1, FUSE_H = 0xDD. 6. Stealth USB CapsLocker site:macetech.com. 7. Исходный код и прошивка Haunted USB Cable для макетной платы AVR-USB-TIN45. |
Комментарии
microsin: не знаю, какой класс USB реализован в HASP. Если там класс HID или CDC, и если достаточно спецификации USB 1.1, то наверняка можно HASP сделать.
microsin: см. статью "Программатор AVR vusbtiny" http://microsin.net/programming/avr-working-with-usb/vusbtiny-avr-programmer.html, раздел [Ссылки].
microsin: позволяет. У ATtiny45/ATtiny85 всего 4 канала АЦП, и Вы их все можете использовать, если не используете USB. Если USB задействовано, то можно использовать только 3 канала АЦП, потому что вход ADC1 используется под сигнал D+ интерфейса USB.
microsin: согласен с Вами, лучше фольгу "экрана" на противоположной контактам USB стороне платы отодрать. На новых платах так и сделано, этой фольги уже нет. А вот что будет на самом деле: если материнская плата старая, у которой нет ограничения по току от +5V по шине USB, то сработает защита в блоке питания, и компьютер выключится. Иногда на старых платах может выгореть порт USB. Если же материнская плата новая, то ничего не произойдет, сработает ограничение по току в порте USB.
microsin: можно прошивать только по ISP и debugWire (оба способа через коннектор ISP). Через USB прошивать нельзя, так как готового загрузчика (bootloader) для чипа ATtiny нет, и архитектура этого чипа вообще загрузчик не предусматривает (нет секции бутлоадера, в отличие от чипов ATmega16 и ATmega32, например). Теоретически такой USB бутлоадер сделать все равно можно, однако программа пользователя (которая работает в памяти и будет загружена по USB) должна поддерживать его наличие.
microsin: нужно в makefile проекта поменять DEVICE = attiny45 на DEVICE = attiny85, сделать make clean и make hex.
microsin: для USB-приложений памяти ATtiny25 недостаточно. Используйте ATtiny45 и ATtiny85.
RSS лента комментариев этой записи