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

Макетная плата AVR-USB-TINY45 позволяет разрабатывать на основе микроконтроллера ATtiny45 (или ATtiny85) и открытой библиотеки V-USB (старое название AVR-USB, см. Википедию) простые и маленькие USB-устройства.

AVR-usb-tiny45.JPG Вид сверху hntd-tiny45-8178.jpg hntd-tiny45-8173.jpg hntd-tiny45-8167.jpg

Размеры платы с макетным полем 42.4 x 12.3 мм, без макетного поля 23.4 x 12.3 мм (для уменьшения размеров макетное поле можно отрезать). Толщина платы вместе с монтажом 11.5 мм (определяется самым высоким элементом на плате - ISP коннектором, он выступает над поверхностью TOP платы на 9 мм).

На плате есть необходимый минимум для макетирования и отладки - разведено макетное поле и разъем ISP для программирования микроконтроллера ATtiny45. Плата спроектирована таким образом, что по окончании разработки ненужные части платы (USB-коннектор, коннектор ISP, и даже макетное поле) можно обрезать, уменьшив тем самым габариты устройства.

hntd-tiny45-8177scissors.jpg

Хороший пример использования макетной платы AVR-USB-TINY45 - USB-устройство, которое работает как USB-HID клавиатура и посылает время от времени случайные нажатия. Незаметно вставив такое устройство в порт USB, можно неплохо над кем-нибудь подшутить (если что, я этого Вам не советовал =).

hntd-tiny45-8184.jpg hntd-tiny45-8186.jpg hntd-tiny45-8190.jpg

Код и схема взяты из проекта [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.

AVR-usb-tiny45-add-USB-bus-reset-support

[Ссылки]

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.