Программирование AVR Макетная плата AVR-USB-TINY45 Sun, December 08 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Макетная плата 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.

 

Комментарии  

 
+4 #23 Arioch 20.05.2019 20:25
Два года назад появились "бездрайверные" ключи HASP, которые представлены в виде USB HID устройства. Но дальше там проприетарный зашифрованный протокол. Раньше ключи HASP HL представляли из себя хаб + два USB устройства, оба проприетарных, старое и новое. И главное, разумеется, не интерфейс ключ-компьютер, а именно данные внутри этого зашифрованного протокола, atmega тут не поможет.
Цитировать
 
 
+1 #22 masterpaiki 05.12.2013 17:15
Прикольная вещь, а HASP можно сделать?

microsin: не знаю, какой класс USB реализован в HASP. Если там класс HID или CDC, и если достаточно спецификации USB 1.1, то наверняка можно HASP сделать.
Цитировать
 
 
-7 #21 Волька 15.11.2013 20:06
Есть для этой платы готовый проект, делающий из неё программатор для AtTiny?

microsin: см. статью "Программатор AVR vusbtiny" http://microsin.net/programming/avr-working-with-usb/vusbtiny-avr-programmer.html, раздел [Ссылки].
Цитировать
 
 
-1 #20 Alex 09.11.2013 18:23
Скажите пожалуйста, плата AVR-USB-TINY45 позволяет ли сделать АЦП? Если да - то сколько каналов АЦП можно на ней реализовать?

microsin: позволяет. У ATtiny45/ATtiny85 всего 4 канала АЦП, и Вы их все можете использовать, если не используете USB. Если USB задействовано, то можно использовать только 3 канала АЦП, потому что вход ADC1 используется под сигнал D+ интерфейса USB.
Цитировать
 
 
+1 #19 Sfeed 13.10.2013 14:18
Купил плату все отлично работает :-) оперативно отправил спасибо
Цитировать
 
 
+1 #18 Александр 06.06.2013 23:30
Купил платку в сборе. Все отлично! Все работает! Доставили в Питер. Рекомендую! :D
Цитировать
 
 
+3 #17 mega_mozg 22.01.2013 09:05
Как отреагирует железо компа, если по невнимательност и воткнуть плату не контактной стороной, а луженым экраном (см.картинку "USB устройство, вид снизу")? Фейерверка не будет?

microsin: согласен с Вами, лучше фольгу "экрана" на противоположной контактам USB стороне платы отодрать. На новых платах так и сделано, этой фольги уже нет. А вот что будет на самом деле: если материнская плата старая, у которой нет ограничения по току от +5V по шине USB, то сработает защита в блоке питания, и компьютер выключится. Иногда на старых платах может выгореть порт USB. Если же материнская плата новая, то ничего не произойдет, сработает ограничение по току в порте USB.
Цитировать
 
 
+3 #16 Andrey 27.10.2011 04:35
Возможна ли прошивка контроллера по USB?

microsin: можно прошивать только по ISP и debugWire (оба способа через коннектор ISP). Через USB прошивать нельзя, так как готового загрузчика (bootloader) для чипа ATtiny нет, и архитектура этого чипа вообще загрузчик не предусматривает (нет секции бутлоадера, в отличие от чипов ATmega16 и ATmega32, например). Теоретически такой USB бутлоадер сделать все равно можно, однако программа пользователя (которая работает в памяти и будет загружена по USB) должна поддерживать его наличие.
Цитировать
 
 
+2 #15 Сергей 07.09.2011 12:04
Подскажите пожалуйста как адаптировать программу Haunted USB Cable под ATTiny85, просто изменить в проекте? При таком варианте компилируется с предупреждением .

microsin: нужно в makefile проекта поменять DEVICE = attiny45 на DEVICE = attiny85, сделать make clean и make hex.
Цитировать
 
 
-3 #14 Сергей 12.08.2011 19:04
А хватит ли памяти в ATtiny25?

microsin: для USB-приложений памяти ATtiny25 недостаточно. Используйте ATtiny45 и ATtiny85.
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page