просмотров 109 489

USB регулятор громкости на энкодере и микроконтроллере AVR ver.2

В предыдущей статье я рассказал, как сделать регулятор громкости подключаемый к компьютеру по USB. Основной

недостаток такого решения это то, что такое устройство относится к Generic HID классу. И хотя для работы такого устройства не требуется установка драйверов однако требуется установка на компьютер программного обеспечения, которое будет управлять звуковым устройством. Избавиться от необходимости установки программы на компьютер можно если устройство будет опознаваться компьютером как мультимедийная клавиатура, в которой предусмотрены клавиши регулировки громкости звука. Тогда громкость будет регулироваться средствами самой операционной системы без использования дополнительных программ.

Для реализации этого решения беру те же самые платы AVR-USB-MEGA16 и  AVR-USB-TINY45 . 

Макетная плата AVR USB MEGA16                      Макетка AVR USB TINY45

И те же схемы подключения энкодера.

        AVR-usb-tiny45

!!!!! Опубликованная ниже прошивка для ATMega16 настроена на работу с кварцем 12 МГц, а не 16 МГц как на схеме.

Для того чтобы регулятор определялся как устройство управления мультимедиа клавишами был использован соответствующий USBHidReportDescriptor, взятый из USB дескриптора мультимедиа клавиатуры, и написан соответствующий код обработки.

Пример USB дескриптора
PROGMEM char usbHidReportDescriptor[25] = { /* USB report descriptor */
 0x05, 0x0c, // USAGE_PAGE (Consumer Devices)
 0x09, 0x01, // USAGE (Consumer Control)
 0xa1, 0x01, // COLLECTION (Application)
 0x85, 0x01, // REPORT_ID (1)
 0x19, 0x00, // USAGE_MINIMUM (Unassigned)
 0x2a, 0x3c, 0x02, // USAGE_MAXIMUM (AC Format)
 0x15, 0x00, // LOGICAL_MINIMUM (0)
 0x26, 0x3c, 0x02, // LOGICAL_MAXIMUM (572)
 0x95, 0x01, // REPORT_COUNT (1)
 0x75, 0x10, // REPORT_SIZE (16)
 0x81, 0x00, // INPUT (Data,Var,Abs)
 0xc0 // END_COLLECTION};

Рабочие примеры firmware для макеток находятся в исходниках написанных с использованием AVR Studio 5.0.

P.S. Устатовка FUSE битов

Для ATMega32: FUSE_L = 0xCF, FUSE_H = 0x18, LOCKOPT BYTE: 0x3F.

Для ATTyny85: FUSE_L = 0xD1, FUSE_H = 0xDD

P.P.S. Предупреждение! Регулятор собранный на ATTiny45, может не определяться после выключения компьютера, если во время включения он подключен к USB порту. Приходится его переподключать.

P.P.P.S 16.02.2015 Решена проблема с тем, что регулятор собранный на ATTiny45 не определялся после перезагрузки или выключения компьютера. Описание решения смотреть в статье. Исходные коды качать по ссылке [3].

[Ссылки]

  1. Исходные коды.
  2. Исходные коды вер.2. Можно увеличить скорость изменения громкости заданием в коде значения переменной AdditionalKeyPress.
  3. Исходные коды вер. 3. Решена проблема для устройств без кварца (ATTiny45, ATTiny85), которые не определялись после перезагрузки.
  4. USB регулятор громкости ver.1
  5. Макетная плата AVR-USB-MEGA16
  6. Макетная плата AVR-USB-TINY45
  7. blyat

108 thoughts on “USB регулятор громкости на энкодере и микроконтроллере AVR ver.2

  1. Ну в итоге заработала на 32 меге и без стабилитронов, на 16 меге не хотит, хотя по идее они ж только количеством памяти отличаются. Может при компиляции в хексе какие то регистры для разных контроллеров по разному прописываются?

    • значит для 16 меги надо перекомпилировать проект, если очень хочется. А стабилитроны строго рекомендуются, т.к. по стандарту на информационных линиях напряжение не должно превышать 3.3 В. Можно пожечь порт или устройство будет нестабильно работать.

      • Та вот знаю, что надо ставить и всегда ставил а тут полтергейст какой то. Ладно, разберемся. Спасибо за помощь и за проект в целом.

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