просмотров 18 541

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

Для своего CarPC озадачился вопросом — сделать регулятор громкости в виде ручки крутилки, как на обычных магнитолах.

Очевидное решение, это припаять переменный резистор между звуковой картой и усилком. Этот вариант исползовать не стал, все-таки неохота применять в цифровой технике аналоговые решения.

Поиск в интернете по теме выдал статью Подключение поворотного энкодера к компьютеру через USB. Читаю. Понятно откуда начинать плясать.

После прочтения статьи и анализа понимаю, что вариант передачи данных через виртуальный COM порт (CDC) мне почему-то не нравится. Решаю сделать,  как предложено в конце статьи, HID устройство.

Для опытов закупаю две платы AVR-USB-MEGA16 и  AVR-USB-TINY45

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

Подключаю к макеткам энкодеры в соответствии с приведенными схемами

        AVR-usb-tiny45

И читаю на этом сайте(http://microsin.ru/документацию по библиотеке V-USB и HID  устройствам на ее основе. Не нравится, что для того чтобы программа на компе работала с устройством необходимо устанавливать и настраивать библиотеку libusb(что не есть удобно), но замечаю оговорку что с HID устройствам можно работать при помощи встроенной в windows hid.dll только это сложно, но мы не ищем легких путей.

Гуглим дальше. Находим  , USB для AVR. Часть 1. ВводнаяUSB для AVR. Часть 2. HID Class на V-USB. Теперь становится понятно, как строится часть ПО хоста для взаимодействия с HID устройством.

Пытаюсь реализовать найденное. В результате выясняется, что вариант управления звуком предложенный в статье по подключению энкодера не подходит для Win7. Поэтому гуглим дальше и находим How do I change the master volume in Windows Vista

Комбинируя вышенайденное получаем Исходники . Проекты написаны с использованием AVR Studio 5.0 и Embarcadero RAD studio XE C++ Builder. Энкодер к микроконтроллеру подключается в соответствии со схемой. В варианте платы Mega16 энкодер подключается к пинам PORT A, PIN 0,1,2 (их можно менять в encoler.h), в варианте Tiny45 PORT B, PIN 3,4,1 (менять не на что).

Программа для хоста не требует установки. Достаточно запустить ее и она висит а трее. При необходимость следует выбрать аудио устройство, чью громкость она будет регулировать. Работает только на Vista и старше. При первом запуске может выдавать страшные ошибки. Не обращайте внимания, просто необходимо выбрать звуковое устройство

Позже расскажу как сделать регулятор звука, который не требует ПО на хосте. Просто воткнул в USB и все заработало.

P.S. Для подавления дребезга необходимо повесить кондеры на каждый контакт энкодера и землю

[Ссылки]

  1. Подключение поворотного энкодера к компьютеру через USB
  2. Макетная плата AVR-USB-MEGA16
  3. Макетная плата AVR-USB-TINY45
  4. USB для AVR. Часть 1. Вводная
  5. USB для AVR. Часть 2. HID Class на V-USB
  6. Пример управления звуком в Windows Vista & 7
  7. Исходники
  8. USB регулятор громкости ver.2

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