просмотров 96 517

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

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

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

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

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

        AVR-usb-tiny45

Для того чтобы регулятор определялся как устройство управления мультимедиа клавишами был использован соответствующий 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

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

  1. Всем день добрый.
    Выложите схему для 45 с диодами.
    Просто когда схему сверху увеличиваешь открывается стандартная схема,без диодов.

    • Не совсем понял про какие диоды идет речь. Если про светодиод, который виден на маленькой схеме, то он не нужен и даже будет мешать. Т.к. это схема стандартной макетной платы, а в реальной схеме энкодера он отсутствует.

      • Понятно спасибо за ответ.
        Пробовал прошить МК программатором 5проводков и НЕХ файлом из папки default почему то всегда ошибки выдаёт.
        Один раз прошилось нормально но комп находит его как неизвестное устройство, Виндовс7.

        И хотелось бы узнать как у вас выставлены Fuse и в какой программе .
        Просто я прошиваю Uniprof.

        • //FUSE_L = 0xD1, FUSE_H = 0xDD
          Я прошивал программатором USBasp и программой Khazama, так что про Uniprof сказать ничего не могу. А не определяться в Винде вполне могло из-за неверно выставленных фьюзов.

  2. Скрин смогу послать только вечером. Советую воспользоваться программой SinaProg. В ней фьюзы так и выставляются шестнадцатеричными кодами
    FUSE_Low = 0xD1, FUSE_High = 0xDD

  3. Спасибо.
    Просто в некоторых программах нужно фьюзы инвертировать…
    Поэтому и спросил.
    Огромное спасибо за помошь.
    И респект за разработку 🙂

  4. Блин что за лажа.
    Развёл печатку.
    Собрал .Соплей нигде нет.
    Прошиваю.Прошивка проходит удачно.Выставляю фьюзы.
    Подключаю девайс к компу.А он мне выдаёт ,,неизвестное устройство,,
    НЕХ файл брал из папки default контролер тинька 45.
    Виталий а вы мне фьюзы для какого МК дали?

    http://postimage.org/image/7hxigjmwr/

  5. Проблему нашол.
    Между VCC и Reset повесил ризистор.
    И один косяк был при прошивке в юнипроф надо было галочку одну убрать.
    Девайс заработал.
    Только всё равно есть косячок.
    Когда кручу налево он увеличивает громкость а должен уменьшать:)

    Не знаете как убрать?
    Или проблема в энкодере?

  6. Проблему решил.
    Мой энкодер не подходит для сей игрушки.
    Просто перенёс его на обратный слой печатки и всё заработало нормально:)

      • Есть пожелание сделать отдельный девайс, как проигрователь музыки выскокачественной в машине, на платформе Raspberry Pi, управлять этим с помощью данного энкодера!!!

  7. собрал эту штуку из трех деталей на основе платы на мега32, прошил тем что в комплекте, но устройство не определяется в винде. Раньше этот девайс с прошивкой другого устройства работал, т.е. фьюзы стоят как надо. Что еще может быть, что посмотреть?

  8. Hi

    I am very please with your volume control thank you from the UK ! 🙂
    what part of the code do i change to adjust the percentage ? At the moment i have to turn the knob 4 rotations to get 100% volume.
    I would like it so that i turn the knob 1.5-2 revolutions to get 100% on the Volume scale.

    Thanks
    koogar

  9. Доброго времени суток будьте добры подскажите есть ли возможность реализации данного устройства на attiny13A, просто под рукой на данный момент нет attiny45.

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