Регулятор Громкости Для Компьютера Usb
USB регулятор громкости на энкодере и микроконтроллере AVR ver.2
В предыдущей статье я рассказал, как сделать регулятор громкости подключаемый к компьютеру по USB. Основной недостаток такого решения это то, что такое устройство относится к Generic HID классу. И хотя для работы такого устройства не требуется установка драйверов однако требуется установка на компьютер программного обеспечения, которое будет управлять звуковым устройством. Избавиться от необходимости установки программы на компьютер можно если устройство будет опознаваться компьютером как мультимедийная клавиатура, в которой предусмотрены клавиши регулировки громкости звука. Тогда громкость будет регулироваться средствами самой операционной системы без использования дополнительных программ.
И те же схемы подключения энкодера.
Для того чтобы регулятор определялся как устройство управления мультимедиа клавишами был использован соответствующий USBHidReportDescriptor, взятый из USB дескриптора мультимедиа клавиатуры, и написан соответствующий код обработки.
Рабочие примеры 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. Решена проблема с тем, что регулятор собранный на ATTiny45 не определялся после перезагрузки или выключения компьютера. Описание решения смотреть в статье. Исходные коды качать по ссылке [3].
Ремонт наушников с микрофоном.
Дата: 18.05. | Раздел: Ремонтируем сами
Здравствуйте уважаемые читатели сайта sesaga.ru. По этому поводу уже была писана статья о ремонте наушников для компьютера. но только в ней было показано, как отремонтировать наушники, у которых провода были просто вырваны из регулятора громкости.
На этот раз появилась другая проблема, впрочем, она возникает со всеми наушниками после определенного времени эксплуатации, это когда в них появляется треск, периодически пропадает слышимость или не всегда Вас слышно, когда общаетесь по Скайпу или в онлайн игре.
Основная болезнь любых наушников – это обрыв внутренних жил шнура в местах изгибов штекеров, регуляторов громкости или у входа в сам наушник, т.е. при переходе из мягкого в твердое. Хотя производителями и предусмотрены резиновые или мягкие пластиковые переходники, но они все равно жестче самого провода и от обрыва его внутренних жил не всегда спасают.
На примере своих наушников расскажу, как восстановить их, если возникнет неисправность такого характера.
Вставьте штекер в компьютер, включите музыку и начинайте изгибать шнур возле проблемных мест, где услышите характерные щелчки или звуки, значит это место найдено, но имейте ввиду, что таких мест может быть и больше. Даже если у Вас проблемы только с микрофоном, то будьте уверены, что Вы на правильном пути, так как жилки перетираются или обрываются все вместе. В моем случае обрыв жил шнура произошел у входа в наушник, как правило, это одно из самых проблемных мест.
Для начала нужно разобраться, как он устроен внутри, а поэтому аккуратно разбираем и смотрим:
Как видите, обычный стандартный набор:
1 – динамик
2 – провод, приходящий от второго уха
3 #8212 две жилки от микрофона
4 #8212 шнур, выходящий из наушников.
Чтобы добраться к шнурку, выходящему из наушника, а заодно осмотреть целостность остальных жил, пришлось открутить все три винта крепящих его к нижнему основанию.
Когда Вы разберете наушник полностью, как на фото внизу, старайтесь не сильно теребить его, иначе проводки могут оторваться от платы, и потом будет проблематично найти каждому свое место. Найти их можно всегда, но на это уйдет больше времени.
Здесь нужно обратить внимание на две жилки микрофона и приходящий провод от второго уха, где возникнут сомнения по поводу их целостности, значит в том месте режим, облуживаем и не забываем изолировать.
Знайте, что сам по себе микрофон никогда не ломается, всегда обращайте внимание на провода, идущие от него в схему #8212 проблема в них.
Из-за того, что внутреннее устройство нижнего основания корпуса не позволило вытащить шнур, его пришлось резать у самого основания. Резиновый кусочек переходника, отмеченный стрелкой, желательно оставить для прочности, а заодно для эстетичности. Можно этого не делать, но мне показалось, что с этим кусочком наушники не так часто придется ремонтировать.
Следующим этапом подготавливаем провод. От конца резинового переходника, со стороны шнура, отступаем около двух сантиметров, и отрезаем шнур. Если Вы заметили, то в этой модели наушников шнур имеет два слоя изоляции – внутренний и внешний.
Берем конец шнура около 7 – 8 сантиметров и снимаем с него верхний слой изоляции, для этого кончиком ножа по всей длине делаем надрез. Как только верхний слой сняли, опять делаем надрез по всей длине, и снимаем внутренний слой изоляции, но уже стараемся не повредить провода.
Если будете использовать кусок переходника, оставьте около одного сантиметра внутренней изоляции на шнуре, а когда полностью освободите жилки от изоляции, то наденьте переходник на шнур и капните клея, например, «Момент», он не даст шнуру выйти из переходника.
Теперь облуживаем кончики проводов, кто не сможет облудить, прочтите статью, как правильно паять. там все показано в картинках. Вставляем провода в наушник и припаиваем по одному, т.е. выпаиваем старый, а на его место, по цвету, новый.
Когда все жилки припаяны, убираете отрезанный кусок шнура и начинаете собирать наушник в обратной последовательности. Единственная трудность при сборке, возникла, когда прикручивал винт, отмеченный стрелкой. Его пришлось направить пинцетом, и только потом прикрутить.
Если кончики жил припаяны, то перед окончательной сборкой рекомендую еще раз пройтись по проблемным местам, т.е. пошевелить шнурок, и где услышите характерные звуки, значит, в этом месте придется произвести разделку и пайку проводов шнура еще раз.
Так же рекомендую осмотреть место расположения микрофона. В моем случае проводник, отмеченный стрелкой на левом фото, замыкал контакты. Пришлось подложить под него кусок изоленты, фото справа.
Вот теперь окончательно собираете наушники и по полной программе слушаете музыку и общаетесь в интернете.
Недавно выложил еще одну статью про наушники, в дополнение к этой, где очень подробно описал устройство наушников для телефонов, плееров, компьютера. В ней показаны принципиальные и монтажные схемы, даны рекомендации по устранению неисправностей.
Поэтому, если у Вас возникли вопросы после прочтения этой статьи, рекомендую ознакомиться со статьей о ремонте наушников с микрофоном. Дополнение. а заодно посмотрите этот видеоролик.
Подключение поворотного энкодера к компьютеру через USB
Давно хотел приспособить к ноуту регулятор громкости, сделанный из энкодера. Подключать этот регулятор нужно будет к USB, чтобы все было «по-взрослому» (да и по-другому никак внешнее устройство к ноуту не подключишь). Крутим энкодер влево — громкость должна уменьшаться, вправо — должна увеличиваться. Жмем вниз ручку энкодера — запускаем какую-нибудь полезную программу, или переключаемся на регулирование тембра.
Для тех, кто не в курсе, что такое энкодер — это такая крутилка, типа ручки громкости на основе обычного резистора, только у этой крутилки нет граничных положений — крути сколько влезет в любую сторону. Крутится энкодер с приятными мягкими щелчками, а выглядит как обычный переменный резистор.
Такие устройства — не редкость в совремеменных автомагнитолах и любых бытовых устройствах, пользовательский интерфейс которых обрабатывается микроконтроллером (а это почитай любая бытовая техника), и где нужна плавная регулировка или настройка. В энкодер часто встраивают и третий контакт, работающий как кнопка на ручке — когда утапливаем ручку энкодера вниз (вдоль оси), то эта кнопка срабатывает. Очень обогащает возможности интерфейса с пользователем — на одном энкодере можно построить всю систему управления электронным устройством (зато добавляется гемор программисту, но это уже мелочи). У меня как раз и был такой энкодер.
Принцип работы энкодера довольно прост — в нем всего лишь два контакта (кнопка на ручке не в счет), которые начинают замыкать, как только пользователь начал крутить ручку энкодера. Контакты подключаются к двум ножкам микроконтроллера (работающих как цифровые входы), и при вращении ручки энкодера на этих ножках появляются импульсы, по фазе и количеству которых микроконтроллер определяет направление вращения и угол поворота ручки энкодера.
Чтобы заработал регулятор громкости, нужно решить, как минимум, три инженерные задачи:
Шаг 1. Создание низкоскоростного USB-устройства на макетке.
Шаг 2. Подключить к этому USB-устройству энкодер, добиться, чтобы микроконтроллер его отрабатывал, и передавал в компьютер информацию о вращении энкодера.
Шаг 3. Разобраться, как можно программно управлять регулятором громкости. Наверняка есть какое-нибудь мультимедиа-API, которое позволяет это делать. Программа минимум — нужно написать программку, которая будет принимать сигналы от USB-устройства и управлять громкостью. Неплохо бы, конечно, написать драйвер, но за это браться страшновато. Лучше оставим на потом.
Итак, опишу процесс создания регулятора по шагам. Подробности опускаю, иначе будет слишком скучно. Кому интересно, см. исходники [6] и документацию по ссылкам.
[Шаг 1. Создание низкоскоростного USB-устройства на макетке ]
Этот шаг прошел, даже не начавшись — как-то слишком просто и банально. Тупо скачал пример проекта по ссылке [1]. Поправил файлик usbconfig.h — для понтов назвал мое устройство ENCODER DEMO. на большее фантазии не хватило. Проверил в Makefile тип проца (ATmega16), частоту кварца (16 МГц) — чтобы соответствовало моей макетке AVR-USB-MEGA16. Скомпилил проект в AVRStudio, прошил макетку, подключил к компьютеру — все завелось с полоборота, мое USB-устройство исправно заработало как виртуальный COM-порт — все в точности так, как написано в статье [1].
[Шаг 2. Подключить к USB-устройству энкодер ]
Этот шаг у меня вызывал самые большие опасения, что все заработает как надо. Что энкодер подключу и смогу его читать — в этом я не сомневался. Были сомнения, что смогу его считывать качественно, когда в фоне работает ещё и обработка протокола USB — все-таки это задача для микроконтроллера не из легких (как впоследствии оказалось — волновался я совершенно напрасно).
Как обычно, начал рыться в Интернете в поисках готовых подпрограмм для чтения энкодера. Нашел очень быстро то, что нужно — именно для AVR, очень простой код на C [2], файлики encoder.c и encoder.h. Что ни говори, а open source крутая штука.
Приделал два индикационных светодиода — ЗЕЛЕНЫЙ и ЖЕЛТЫЙ — для обозначения направления вращения энкодера. Подключил энкодер для удобства прямо к разъему ISP, воспользовавшись тем, что сигналы MOSI, MISO и SCK — это всего лишь ножки PB5, PB6 и PB7 микроконтроллера ATmega16 (подключил туда фазы A и B, а также кнопку энкодера).
Поправил определения ножек, добавил код инициализации. Присоединил к проекту модуль encoder.c. Добавил в главный цикл main управление зеленым и желтым светодиодами, когда приходит инфа с энкодера. КРАСНЫЙ светодиод привязал к кнопке энкодера — когда её нажимаем, красный светодиод зажигается, отпускаем — гаснет. Скомпилировал, прошил — работает. Кручу ручку влево, и в такт щелчкам энкодера вспыхивает зеленый светодиод. Кручу ручку вправо — вспыхивает желтый светодиод. Несмотря на то, что чтение энкодера происходит методом поллинга, благодаря эффективному коду к чтению энкодеру НИКАКИХ нареканий даже при одновременной работе с библиотекой V-USB (респект, Pashgan!). Добавил вывод информации от энкодера в виртуальный COM-порт (крутим энкодер влево вывожу в консоль минусики '-', крутим вправо вывожу в консоль плюсики '+'). По таймеру каждые 10 мс вывожу состояние кнопки энкодера и индицирую её красным светодиодом (кнопка нажата — передаю символ '1', отпущена — '0'). Все работает. Скукотища.
В заключение выкинул модули cmd.c, crc16.c, eepromutil.c, strval.c. Объем кода упал до 3 килобайт — отлично, теперь поместится и в память ATtiny45 (можно в будущем задействовать макетку AVR-USB-TINY45, она меньше по размерам и дешевле).
[Шаг 3. Разобраться, как можно программно управлять регулятором громкости ]
Как обычно, прогуглил вопрос. Отсеял кучу мусора, и наконец выгреб жемчужину — [3]. Дальше дело техники. Достаю любимый детский конструктор — Visual Studio. Ни о чем не думая, визардом генерю dialog-based приложение. Бросаю на панель движок регулятора громкости, привязываю к нему переменную, добавляю обработчик положения движка. При старте приложения настраиваю движок на минимум 0 и максимум 65535 (чтобы соответствовало границам значения громкости, которым манипулируют библиотеки управления микшером). Считываю функцией mixerGetControlDetails текущее значение громкости, и ставлю движок регулятора в соответствующее положение. В обработчике положения движка все наоборот — читаю положение движка и функцией mixerSetControlDetails устанавливаю нужную громкость. Управление громкостью делаю в точности так, как написано в статье [3]. Проверил — работает.
Теперь осталось дело за малым — читать, что приходит с виртуального COM-порта (на нём у нас висит свежеиспеченное USB-устройство с энкодером). Если пришел минусик (-) то двигаем движок влево (уменьшаем громкость), плюсик (+), то двигаем движок вправо (увеличиваем громкость). Если приходят символы 0 и 1, то соответственно управляем состоянием чекбокса (просто для индикации — нажата кнопка энкодера, или нет). С COM-портом можно работать, как с обычным файлом (см. [4]). Инициализируем подключение к COM-порту как открытие файла (вызовом ::CreateFile ) в блокирующем режиме. Запускаем отдельный поток, туда в бесконечный цикл добавляем чтение файла (блокирующим вызовом ::ReadFile ) по одному символу, и этот символ анализируем. По тому, какой символ пришел, крутим движок слайдера в нужную сторону (громкость будет регулировать обработчик слайдера) или обновляем состояние чекбокса. Проверил — работает.
Вот и все, собственно. Дальше можно заниматься бесконечным (и, наверное, бесполезным) улучшательством. Сделать автоматический поиск нужного виртуального COM-порта (сейчас для упрощения имя COM-порта передается через командную строку). Переделать USB-устройство с CDC -класса на HID — это может упростить код USB-устройства, а также упростить программный поиск и открытие устройства на компьютере по VID и HID. Или написать вместо программы сервис (чтобы не надо было запускать отдельную программу). Или даже драйвер. Это очень интересно, но не умею (может, кто из хабравчан научит уму-разуму. ). Прикрутить к кнопке энкодера какое-нибудь действие. Ну и так далее до бесконечности.
Надеюсь, кому-нибудь мои изыскания пригодятся в собственных разработках. Если чего-нибудь упустил, буду рад выслушать замечания в комментариях.
[UPD120803 ]
Один грамотный человек собрал на микроконтроллере AVR регулятор громкости — USB HID устройство, эмулирующее стандартную мультимедийную клавиатуру (как предлагалось в комментариях). Такая клавиатура имеет возможность регулировать громкость без дополнительного программного обеспечения, всю необходимую работу выполняет драйвер операционной системы.
[Ссылки ]
5. Видеоролик. демонстрирующий работу регулятора громкости.
Источники: http://obruboff.ru/usb-volume-control-ver-2/, http://sesaga.ru/remont-naushnikov-s-mikrofonom.html, http://geektimes.ru/post/256502/
Как Подобрать Интерфейс К Микрофонукак подобрать интерфейс к микрофонуКак выбрать самый лучший микрофон для своего компьютераАвтор: Александр Никитин / 25.03.Играете ли вы в сетевые ... |