Эмулятор нажатия кнопок на энкодерах для плеера RuneAudio
В развитие темы плеера RuneAudio предлагаю конструкцию эмулятора нажатия 8-ми кнопок на двух энкодерах. С помощью каждого энкодера эмулируется нажатие 4-х кнопок в зависимости от одного из действий: вращение ручки влево, вращение ручки вправо, короткое нажатие на ручку, длительное нажатие (1 сек и более) на ручку. Этим действиям соответствуют: уменьшение, увеличение громкости, воспроизведение/пауза, стоп (левый энкодер), предыдущая, следующая композиция, смена информационного экрана, включение/отключение подсветки индикатора (правый энкодер). Кроме ручного управления в эмуляторе предусмотрено также выполнение указанных функций с помощью ИК пульта: можно запрограммировать эмулятор под пульт, работающий по одному из протоколов: RC5, RC6, NEC, Apple, JVC, Samsung, Sony. В качестве базового варианта рассматривается использование пультов Apple TV (и их клонов) типа MC377LL/A или MC377ZM/A, имеющих 7 клавиш (клавиша включения и выключения подсветки индикатора при этом не реализуется).
Использование эмулятора нажатия кнопок для ИК управления модулем индикации для Amanero AH-I6 уже подтвердило свою эффективность на практике. Так как в рассматриваемой конструкции плеера ИК управление также реализовано через эмулятор, ИК модуль на Питоне для управления программным обеспечением RuneAudio не используется: задействованы лишь соответствующие модули для ЖКИ, кнопок и управления питанием. Поэтому для перенастройки на другой ИК пульт нет необходимости использования утилиты Linux irrecord — программирование пульта осуществляется в самом эмуляторе.
Примечание: функции регулировки громкости работают, если в настройках MPD плеера RuneAudio разрешена программная регулировка громкости Software. В случае выбора настройки Disable громкость не регулируется, но качество звучания при этом становится лучше.
Рассмотрим схему эмулятора:
Основой эмулятора является микроконтроллер (МК) IC1. Программа для реализации всех функций эмулятора с поддержкой основных ИК протоколов полностью поместилась в МК типа ATmega88, так что применение МК ATmega168 не имеет особого смысла. Конденсаторы C1..C6 выполняют функции «антидребезга», что вкупе с оригинальной программой обработки вращения ручек и нажатия кнопок энкодеров обеспечивает надёжное и комфортное управление. Эмуляция нажатия кнопок осуществляется импульсами длительностью 50 мс, формируемыми на выходах сдвоенных оптронов VO1..VO4. Факт формирования импульса подтверждается вспыхиванием соответствующего светодиода на плате HL1..HL8. Выходы оптронов с открытым коллектором могут подключаться вместо кнопок или параллельно существующим кнопкам через разъём J2. Кроме гальванической развязки от управляемого узла, коим в данном случае является микрокомпьютер Raspberry Pi 3B, использование оптронов на выходе эмулятора позволило легко (через диод VD1) реализовать блокировку прохождения выходных импульсов в режиме программирования клавиш ИК пульта при низком уровне сигнала /IRPgmMode (когда горит светодиод HL9), так как мигание светодиодов HL1..HL8 в этом режиме используются для индикации текущей программируемой клавиши. Соответствие номеров светодиодов и функций эмулятора:
Светодиод | Название клавиши | Контакт J2 | Функция |
HL1 | K1 | 2 | Уменьшение громкости (Vol-) |
HL2 | K2 | 3 | Увеличение громкости (Vol+) |
HL3 | K3 | 4 | Воспроизведение/пауза (Play/Pause) |
HL4 | K4 | 5 | Остановка воспроизведения (Stop) |
HL5 | K5 | 6 | Переход к предыдущей композиции (Prev) |
HL6 | K6 | 7 | Переход к следующей композиции (Next) |
HL7 | K7 | 8 | Смена режима отображения на ЖКИ (Mode) |
HL8 | K8 | 9 | Включение/отключение подсветки ЖКИ (BL) |
Установкой перемычки J4 можно заблокировать ручной вход в режим программирования клавиш ИК пульта. Для программирования клавиш ИК пульта необходимо:
- обесточить устройство, открыть его корпус;
- временно снять перемычку на плате эмулятора нажатия кнопок;
- подключить устройство к питающей сети (кнопку включения питания можно не нажимать);
- одновременно зажать кнопки обоих энкодеров в течение не менее 5 секунд, при этом на плате эмулятора загорится красный светодиод «Pgm», а зелёный светодиод «K1», соответствующий первой кнопке, будет мигать (дальнейшие действия необходимо контролировать по мигающим светодиодам на плате эмулятора);
- для программирования нажать на ИК пульте требуемую клавишу, при этом, если код клавиши принят, текущий мигающий светодиод погаснет, и начнёт мигать следующий;
- когда 8 клавиш запрограммированы, все светодиоды погаснут (коды всех клавиш должны отличаться);
- процесс программирования клавиш можно прервать в любой момент нажатием кнопки любого из энкодеров, при этом в памяти EEPROM микроконтроллера сохранятся прежние коды клавиш;
- проверить работу всех клавиш ИК пульта по миганию соответствующих зелёных светодиодов на плате эмулятора; при необходимости процесс программирования можно повторить;
- вернуть перемычку на плату эмулятора нажатия кнопок.
Готовые прошивки EEPROM для работы с пультами Apple TV MC377LL/A и MC377ZM/A (на вид эти пульты одинаковые, но коды клавиш различны), содержатся в архиве с прошивкой МК эмулятора (там же — и исходный текст программы) — для этих пультов процесс ручного программирования можно не делать. Центральная круглая клавиша указанных пультов обрабатывается как Stop, а клавиша Menu — как Mode; управление подсветкой индикатора отсутствует. Назначение остальных кнопок понятно из их названий или расположения.
Вид собранной платы эмулятора сверху:
Вид собранной платы эмулятора снизу:
Плата эмулятора была совмещена с платой светодиода и кнопки включения питания блока включения и выключения плеера, на которой также размещён ИК приёмник. В прилагаемом архиве приведён рисунок печатной платы и гербер-файл также отдельной платы эмулятора.
Для управления питанием плеера использован усовершенствованный блок включения и выключения:
Его особенностью является использование гальванической развязки на оптронах для сигналов Rdy и /ShtDn, поступающих на микрокомпьютер Raspberry Pi 3 B. При питании эмулятора нажатия кнопок от дежурного блока питания блока включения и выключения обеспечивается полная гальваническая развязка микрокомпьютера от узлов управления. Непосредственно к микрокомпьютеру подключается только ЖКИ, в качестве которого использован индикатор Surenoo SLC2004 с большими символами (которые видно даже с 3-х метров):
Прошивка микроконтроллера блока включения и выключения (вместе с исходным текстом программы) приведена в отдельном архивном файле.
Внешний вид собранной платы блока включения и выключения:
Блок питания +5V для микрокомпьютера Raspberry особенностей не имеет, за исключением увеличения ёмкости конденсаторов фильтра выпрямителя до 20000 мкФ, что при использовании накального трансформатора позволяет получить выходной ток до 3..3,5А — это может быть очень полезным при работе плеера с жёстким диском:
Разъёмы USB вынесены на заднюю панель плеера, при этом контакт +5В каждого разъёма соединён через самовосстанавливающийся предохранитель 1,1А с выходом блока питания (лучше поставить предохранители на больший ток, например, 2А или даже 3.5А, так как из-за большого пускового тока HDD они со временем могут деградировать):
Задняя панель плеера:
Использован готовый железный корпус размерами 280x210x80. Для крепления элементов управления и индикации в пластиковой передней панели (её толщина около 2 мм) были проделаны соответствующие монтажные отверстия, которые закрыты накладкой из алюминиевого сплава толщиной 0,8..1 мм (эта накладка крепится на ручках энкодеров). В окно для индикатора вклеено затемнённое оргстекло толщиной 2 мм (вероятно, для ЖКИ лучше всё-таки использовать прозрачное оргстекло).
Надписи на панель можно нанести методом ЛУТ. Впоследствии алюминиевая накладка было обтянута матовой плёнкой ORACAL, которая используется обычно в рекламных целях (такой вариант решения для передней панели я «подсмотрел» у Л.И.Ридико в его конструкции УМЗЧ ВВ):
Белые значки с чёрной окантовкой распечатаны на самоклеящейся бумаге для печати. После прорезания по контуру значков острым ножом их края прокрашиваются чёрным фломастером, после чего значки переносятся пинцетом на панель и прижимаются.
Так как корпус плеера металлический, Wi-Fi антенна микрокомпьютера выведена наружу (для этого на плате микрокомпьютера придётся сначала аккуратно выпаять две очень маленькие перемычки для отключения штатной антенны, а затем впаять одну из них вместе с установкой разъёма для внешней антенны). Необходимо обеспечить изолирование подключаемого разъёма Wi-Fi антенны от находящегося рядом контакта +3,3V:
Вид на монтаж плеера:
В качестве основания был использован кусок фольгированного стеклотекстолита размером 250x150 мм и толщиной 2 мм. Блок питания микрокомпьютера Raspberry Pi 3B собран непосредственно на основании, а дорожки прорезаны резаком:
Основание прикручивается к днищу корпуса на 7 латунных стойках высотой 5 мм для печатных плат. Такую же толщину имеет корпус микросхемы стабилизатора LT1083CP, которая прижимается к днищу через слюдяную прокладку. Термопаста наносится сверху и снизу корпуса микросхемы, так что фольга стеклотекстолитового основания используется как дополнительный теплоотвод. Сверху над микросхемой для жёсткости впаян пластинчатый алюминиевый радиатор от неисправного компьютерного блока питания. В результате в процессе работы плеера с жёстким диском микросхема остаётся чуть тёплой.
Добавил в архив вариант прошивки эмулятора нажатия кнопок, в котором при вращении ручек энкодеров регулировка громкости и смена музыкальных композиций меняются местами, т.е. функции Prev и Next относятся к первому энкодеру, а функции Vol- и Vol+ — ко второму. В своём плеере я решил использовать именно этот вариант, так как программная регулировка громкости у меня отключена в настройках RuneAudio, и второй энкодер реально используется только для смены информационного экрана.
P.S. На некоторых (особенно китайских) ЖКИ могут наблюдаться сбои (отображение «кракозябров» вместо символов, полное отсутствие изображения и т.п.) при касании корпуса плеера металлическим предметом, например, пинцетом (и даже при подсоединении внешнего USB HDD или Wi-Fi антенны), причём с OLED индикаторами такого замечено не было. Для устранения этого неприятного явления я использовал небольшую переходную плату гальванической развязки ЖКИ (см. в приватных вложениях архивный файл, содержащий схему и рисунок печатной платы с гербер-файлом).
Nikolay27 3 года назад #
Я дико извиняюсь, а оптический привод DVD через переходник SATA -USB, с дополнительным блоком питания, кто нибудь подключал к такому плееру?
Он (плеер) будет читать DVD audio диски?
Еще раз извиняюсь за оффтоп.
Pushok62 3 года назад #
Я не подключал, так как смысла нет — CD и DVD диски он читать не будет, такой программной поддержки в плеере не существует. А так было бы, конечно, шоколадно :)
Pushok62 3 года назад #
Обновил прошивку МК ATtiny2313 в блоке дистанционного выключателя - повышена устойчивость работы за счёт введения 1-секундной задержки перед обесточиванием плеера в процессе выключения.
ROMANCHER 3 года назад #
Здравствуйте !
Большое спасибо за статью !
У меня вопрос, как выставить Fuse-биты МК ATmega88 (ATmega168) в PonyProg 2000, при работе с внешним кварцевым резонатором 8 MHz?
Если можно скриншот .
Извиняюсь, не силен в прошивках мк.
Pushok62 3 года назад #
Здравствуйте!
Удобно пользоваться специальным калькулятором. Там в самом верху посередине нужно выбрать нужный тип МК (ATmega88), слева вверху ввести требуемые значения Fuse-битов (FD для LOW, D5 для HIGH, F9 для EXTENDED), и справа можно увидеть, какая при этом будет конфигурация у МК, а ниже — какие Fuse-биты выставлять в программаторе. В выпадающем списке — Показать установки битов для: — нужно выбрать режим PonyProg (инверсные биты). У вас должно получиться так:
Чтобы не ошибиться при установке, я обычно делаю так: считываю программатором текущие Fuse-биты из МК, а потом корректирую только то, что отличается, и после этого перезаписываю. Если программа программатора позволяет сразу ввести требуемые шестнадцатеричные значения Fuse-битов, ещё лучше.
Рассмотренный выше калькулятор работает и в «другую сторону»: можно выбрать требуемую конфигурацию МК, и получить соответствующие ей шестнадцатеричные значения Fuse-битов.
ROMANCHER 3 года назад #
Большое спасибо!
ROMANCHER 3 года назад #
А резистор на reset мк нужно устанавливать ?
Pushok62 3 года назад #
Можно не устанавливать, здесь я его не ставил, хотя обычно ставлю.
ROMANCHER 3 года назад #
Понял, спасибо за технические ответы!