В разработке элементов прошивки баяна возник перерыв. Полученные железки освоены. Но есть ещё куча материалов для изучения.
Например, я пока не понимаю, какие вообще функции стоит выносить на управляющие кнопки. И какая будет нужна индикация (что показывать светодиодами, а что писать на экранчике). И в качестве объекта для изучения я пока взял MIDI систему, которую активно распространяет широко известный в узких кругах Владимир Бутусов.
Вот, к примеру, приехали ко мне регистры 74HC165, и стало возможным собрать отладочный вариант каскада кнопок (см. рис. 1) и написать обработчик клавиатуры.
У меня в наборе, правда, есть только 3 кнопки, но для отладки этого вполне хватило. Уверен, что переписывать работу с кнопками уже не придётся; разве только добавлять разные возможности. Ну и, конечно, придётся кое-где подправить после того, как станет понятно, как именно будут у меня организованы каскады кнопочных регистров. Сейчас пока не понимаю.
То, что пока получается, мне нравится. Оно читает значения из регистров и в случае обнаружения нажатий/отпусканий кнопки создаёт соответствующее событие и помещает его в очередь. Кнопки бывают «музыкальные» (для которых не нужно ловить ничего кроме нажатий и отпусканий) и управляющие, для которых надо будет ловить ещё удержания. Это для сценариев, когда простое нажатие, например, включает предварительно настроенный тембр синтезатора, а нажатие с удержанием больше 2 секунд переводит кнопку в режим программирования нового тембра. Очень, очень мне нравится концепция очереди событий в приложении.
Правда, когда я смотрю на размер получившегося кода, то возникают смешанные чувства. Например, в исходной прошивке «с форума» 1052 строки. А у меня сделано:
работа со светодиодами через регистры 47HC595
работа с кнопками через регистры 47HC165
очередь событий
и немного кода для того, чтобы всё вышеупомянутое можно было отладить.
И уже 589 строк. 🙂
Заодно не удержался и измерил скорость чтения каскада из 2-х регистров. Одно чтение занимает 0.2655 мс (я делал цикл на сколько-то-там тысяч чтений и измерял общее время в миллисекундах). Экстраполируя, можно предположить, что 17 регистров (если их склеить в один длинный каскад) будут читаться 2.26 мс. Это на 0.26 мс больше, чем в оригинальной прошивке задержка на включение одной строки датчиков Холла (а всего там 10 строк). Т.е. полное чтение клавиатуры там занимает не меньше 20 мс (это я только задержку посчитал). У меня же, повторюсь, все входы (и музыкальные клавиши, и управляющие кнопки) будут читаться за 2.26 мс. На порядок быстрее.
Кстати, дребезга механических контактов не замечено. Видимо, он не проходит дальше входных ног регистров. Зато «висящие в воздухе» ноги регистров читаются то нулями то единицами случайным образом (так и должно быть). На время отладки пришлось замаскировать соответствующую часть входящего буфера.
Дальнейшие действия зависят от того, что приедет следующим. По идее, это будут OLED дисплейчики 128*64 (2 шт.) и датчик давления (1 шт., дорогой оказался, сцк. Будет 1 датчик и для отладки, и для финального изделия. Надеюсь, не сожгу). Ну и в любом случае надо уже хорошенько разбираться с MIDI сообщениями. Причём не столько с ними, сколько с тем, как этими сообщениями управлять синтезатором. А здесь — задержка. В наличии только синтезаторы без корпуса, для встраивания куда-нибудь. А мне же нужен в корпусе; баян у меня будет не более чем MIDI клавой.
…, что я буду не перерабатывать прошивку, взятую с форума, а писать свою, подсматривая нужные функции в форумной.
Ну просто чем дальше я в неё смотрю, тем меньше она мне нравится. Для моего взгляда, она выглядит так, как будто её писали, не особо заботясь о какой-то идеологической или архитектурной красоте. Уж не знаю наверняка, что там в самом начале было взято за основу, но программу эту развивали тупо добавляя туда нужные в данный момент функции. Наверное, спагетти-кодом я бы это не назвал, но какой-то упорядоченностью там не пахнет. Больше всего мне не нравится, что анализ нажатых кнопок и какие-то производимые действия (выдача очередной команды в MIDI интерфейс или выполнение каких-то служебных функций) перемешаны в какую-то однородную кашу.
Не нравится. Напишу по-своему.
Сделаю нормальную очередь событий, которая в каждом рабочем цикле будет сначала набиваться, а потом разгребаться. И буду делать нормальный конечный автомат вместо вязанки различных флажков и if-ов размазанных по всему основному циклу.
P.S. Алик только что порадовал: ко мне уже приехали входные регистры 74HC165. Завтра (т.е. уже сегодня) заберу, и можно будет писать и отлаживать чтение клавиш и управляющих кнопок (в моей архитектуре они будут читаться одинаковым образом); не как в оригинальной прошивке.
Сейчас класс поддерживает 2 режима работы каждого светодиода: непрерывный и мигающий. На видео одна кнопка перебирает светодиоды с одного конца линейки (сначала включает непрерывный режим, а потом выключает), а вторая кнопка перебирает светодиоды с другого конца, включая и выключая мигающий режим.
Думаю, что пользоваться будет удобно.
Подумаю, может ещё что-нибудь можно накорябать, пока детали едут. Интересно же.
Пока основная часть деталей ко мне ещё едет. Но в наборе была одна микросхема 74HC595 и 10 светодиодов с резисторами 220 Ом. Это значит, что уже можно заняться написанием и отладкой блока светодиодной индикации.
Я подумал, что раз уж я хочу делать управляющую панель, то наверняка захочу, чтобы состояния некоторых кнопок показывались светодиодами. В частности, есть пока не до конца сформировавшаяся идея, что неплохо бы сделать клавиши переключения «регистров» (т.е. в моём случае это будут MIDI-каналы для правой, левой басовой и левой готово-выборной клавиатур). Чтобы они выглядели максимально похоже на клавиши регистров настоящего баяна. Похоже, это вполне можно сделать, если использовать сенсорные кнопки; в наборе как раз есть 3 штуки на пробу. Так вот, будет удобно и правильно, если включенный регистр будет подсвечиваться светодиодом. Ну то есть понадобится управлять как минимум 10-ю светодиодами. Угадайте как? Через сдвиговый регистр, ясен пень.
Вот, собрал на макетке «стенд». Буду играться.
Программирование для Ардуино, как оказалось, это чистый восторг. 32к ОЗУ для программы, 2к ОЗУ для данных. Непосредственная работа с железом. Красота. Чувствую себя как в 1990 году, когда я программировал для ЭВМ СМ-1420, СМ-1300 и немножко для СМ-1700. Старое-доброе программирование в условиях ограниченных ресурсов.
Кстати, по вычислительной мощности вот эта вот п$#дюлина на рис. 1 скорее всего превосходит ту самую СМ-1300. Возможно, в разы.
Сегодня я на своём многострадальном сервере развернул gitlab (см. рис. 1).
Чую, писать придётся много, а экспериментировать ещё больше. Колхозные методы управления версиями хоть и работают (именно ими я пользовался в 90-е), но нормальный git всё-таки лучше.
Эх и «толстая» же это система, эта ваша gitlab. Я в какой-то момент даже подумал, что моему серверу перестанет хватать 3 Гб ОЗУ. Но нет, вроде пока хватает. Если что — сделаю swap побольше. 🙂
Окончательно решено, что баян будет на 100% электронным. Т.е. по сути он будет переделан в довольно продвинутую MIDI клавиатуру. «Аналоговая» часть (т.е. резонаторы с голосами) удаляется и больше использоваться не будет. Собственно, я её уже удалил и сложил в углу. Чтобы не отправлять СДЭКом лишний вес (см. следующий пункт).
Для получения полноценного электронного баяна необходимо, чтобы была возможность управлять громкостью с помощью штатного меха. Т.е. для того, чтобы инструмент звучал, в нём должно быть давление воздуха, как в настоящем баяне. Величина этого давления будет измеряться спец-датчиком, и громкость звучания будет пропорциональна этому самому давлению. Всё как в жизни. Но для этого нужно чтобы внутренний объём инструмента был герметичен. А для этого нужно баян отправить на восстановительные работы специальному мастеру. Я уже с ним договорился; поскольку мне нужен ремонт по сокращенной программе, мой баян будет обслужен в обход штатной очереди (ждать которую обычно приходится 10 месяцев). Повезло мне, что и говорить.
В качестве датчиков нажатия клавиш будут использоваться датчики Холла OH137 совместно с неодимовыми магнитами диаметром 4 мм и толщиной 2 мм. Я проверил, такой магнит должен нормально проходить через самое маленькое клапанное окно (самые высокие звуки левой выборной клавиатуры). Магниты и датчики уже заказаны. К слову говоря, с потребляемым током я в прошлый раз немножко (всего на порядок) ошибся. Потребляемый ток будет порядка 0.4А.
Поскольку мне нужно читать состояние 107 клапанов, и кроме того я очень хочу сделать управление MIDI системой с помощью дополнительных физических кнопок (а не с помощью музыкальной клавиатуры), единственный вариант обеспечить ввод всех необходимых данных — это использовать входные сдвиговые регистры 74HC165. Мне их будет нужно аж 19 штук. Заказаны, едут.
Предвидится очень много работы по переработке исходной прошивки для Ардуино. Будет совершенно другой код для чтения состояния клавиш (клапанов) и управляющих кнопок. Сами платы Arduino nano и всё необходимое для отладки аппаратной части ко мне уже едет в составе набора GiverKIT START.
В качестве MIDI синтезатора я присмотрел ATEMP MIDI HW Synth. 16 MIDI каналов, 8 пресетов, и весьма хороший набор органных звуков. (Да, я собираюсь делать вид, что играю на органе Hammond.) Окончательно я еще не решил, но 95% вероятность, что куплю именно это. В качестве усилителя пока будет босяцкий вариант: активные компьютерные колонки; у меня как раз есть неиспользуемый комплект. (Но основной режим вывода звука будет «в наушники» непосредственно с синтезатора.)
Самая расходная часть проекта — ремонт баяна. Но без этого абсолютно никак нельзя обойтись, если нужно управление мехом. (А оно реально нужно).
Стоимость же электронной части обещает быть примерно в 10 раз меньше, чем у доступных готовых решений (будь то установка MIDI-системы «под ключ» или Электронный баян Roland «единичка»).
Когда я в начале 2000-х купил свой первый автомобиль, владельцы различных авто между собой общались на форуме www.auto.ru. Там для каждой марки был свой раздел. И тогда было модно всячески издеваться над водителями «Волг». В основном за то, что они ведут себя на дороге как мудаки (едут между рядами, не пользуются поворотниками, подрезают, и т.п.). Такое было тогда народное творчество, в общем.
С тех пор автопарк в стране поменялся до неузнаваемости, старые машины, в том числе «Волги» становятся редкостью.