СДЭКу — незачёт

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

Судя по следам на футляре (см. рис. 1 справа), его со значительной высоты уронили на угол. В результате — трещина в левом полукорпусе и порванный (или лучше сказать «треснутый»?) целлулоид. (Баяны не красят, их обтягивают целлулоидом.) 5 ярко-жёлтых наклеек с надписью «ХРУПКОЕ!» не помогли. Посылаю всем причастным к этому инциденту луч кровавого поноса с личинками.

Механика (главное) не пострадала. Мастер ответил, что можно отремонтировать. Останется почти незаметный косметический дефект.

Рис. 1

P.S. А работа уже в самом разгаре:

Рис. 1

Поторопился я или нет?

Как я недавно докладывал, развёл я себе gitlab.

И делал я это, будучи в святой уверенности, что на гитхабе бесплатный аккаунт не может создавать приватные проекты. Оказывается, я немножко так отстал от жизни: в 2019 году там в принципе разрешили закрытые проекты с числом участников не более трёх, а с 2020 года убрали ограничение на число участников.

Мнда.

Ну, зато мой гитлаб крутится на моём собственном сервере, обеспечивая какую-никакую гарантию приватности (что редкость в наши дни). И самое главное: он не введет против меня санкции и не запретит мне доступ к моим проектам (как происходило в 2022 году).

И, раз уж пошла такая пьянка, поделюсь радостью: я немного оптимизировал потребление оперативной памяти моими классами для работы с кнопками и светодиодами. Теперь они потребляют на 72 байта меньше. 🙂 Для Ардуино это актуально, там доступной оперативной памяти имеется всего 2 килобайта. Каждая сотня байт на счету.

Рис. 1 КДПВ

Изучение вопроса

В разработке элементов прошивки баяна возник перерыв. Полученные железки освоены. Но есть ещё куча материалов для изучения.

Например, я пока не понимаю, какие вообще функции стоит выносить на управляющие кнопки. И какая будет нужна индикация (что показывать светодиодами, а что писать на экранчике). И в качестве объекта для изучения я пока взял MIDI систему, которую активно распространяет широко известный в узких кругах Владимир Бутусов.

Рис. 1
Читать далее «Изучение вопроса»

Это хорошо, что детали приезжают не одновременно

Вот, к примеру, приехали ко мне регистры 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 клавой.

Рис. 1

Изголовье для кровати — 4

Сегодня я закончил, собственно изголовье. Вторая обивка у меня заняла существенно меньше времени, чем первая. Опыт, однако.

Следующий этап — длинная настенная панель.

Рис. 1

Что-то мне подсказывает…

…, что я буду не перерабатывать прошивку, взятую с форума, а писать свою, подсматривая нужные функции в форумной.

Ну просто чем дальше я в неё смотрю, тем меньше она мне нравится. Для моего взгляда, она выглядит так, как будто её писали, не особо заботясь о какой-то идеологической или архитектурной красоте. Уж не знаю наверняка, что там в самом начале было взято за основу, но программу эту развивали тупо добавляя туда нужные в данный момент функции. Наверное, спагетти-кодом я бы это не назвал, но какой-то упорядоченностью там не пахнет. Больше всего мне не нравится, что анализ нажатых кнопок и какие-то производимые действия (выдача очередной команды в MIDI интерфейс или выполнение каких-то служебных функций) перемешаны в какую-то однородную кашу.

Не нравится. Напишу по-своему.

Сделаю нормальную очередь событий, которая в каждом рабочем цикле будет сначала набиваться, а потом разгребаться. И буду делать нормальный конечный автомат вместо вязанки различных флажков и if-ов размазанных по всему основному циклу.

Рис. 1 КДПВ

P.S. Алик только что порадовал: ко мне уже приехали входные регистры 74HC165. Завтра (т.е. уже сегодня) заберу, и можно будет писать и отлаживать чтение клавиш и управляющих кнопок (в моей архитектуре они будут читаться одинаковым образом); не как в оригинальной прошивке.

Накропал какой-то интерфейс к линейке светодиодов через сдвиговый регистр

Сейчас класс поддерживает 2 режима работы каждого светодиода: непрерывный и мигающий. На видео одна кнопка перебирает светодиоды с одного конца линейки (сначала включает непрерывный режим, а потом выключает), а вторая кнопка перебирает светодиоды с другого конца, включая и выключая мигающий режим.

Думаю, что пользоваться будет удобно.

Подумаю, может ещё что-нибудь можно накорябать, пока детали едут. Интересно же.

Это просто счастье какое-то

Пока основная часть деталей ко мне ещё едет. Но в наборе была одна микросхема 74HC595 и 10 светодиодов с резисторами 220 Ом. Это значит, что уже можно заняться написанием и отладкой блока светодиодной индикации.

Я подумал, что раз уж я хочу делать управляющую панель, то наверняка захочу, чтобы состояния некоторых кнопок показывались светодиодами. В частности, есть пока не до конца сформировавшаяся идея, что неплохо бы сделать клавиши переключения «регистров» (т.е. в моём случае это будут MIDI-каналы для правой, левой басовой и левой готово-выборной клавиатур). Чтобы они выглядели максимально похоже на клавиши регистров настоящего баяна. Похоже, это вполне можно сделать, если использовать сенсорные кнопки; в наборе как раз есть 3 штуки на пробу. Так вот, будет удобно и правильно, если включенный регистр будет подсвечиваться светодиодом. Ну то есть понадобится управлять как минимум 10-ю светодиодами. Угадайте как? Через сдвиговый регистр, ясен пень.

Вот, собрал на макетке «стенд». Буду играться.

Программирование для Ардуино, как оказалось, это чистый восторг. 32к ОЗУ для программы, 2к ОЗУ для данных. Непосредственная работа с железом. Красота. Чувствую себя как в 1990 году, когда я программировал для ЭВМ СМ-1420, СМ-1300 и немножко для СМ-1700. Старое-доброе программирование в условиях ограниченных ресурсов.

Кстати, по вычислительной мощности вот эта вот п$#дюлина на рис. 1 скорее всего превосходит ту самую СМ-1300. Возможно, в разы.

Рис. 1

Готовлю рабочее место

Сегодня я на своём многострадальном сервере развернул gitlab (см. рис. 1).

Чую, писать придётся много, а экспериментировать ещё больше. Колхозные методы управления версиями хоть и работают (именно ими я пользовался в 90-е), но нормальный git всё-таки лучше.

Эх и «толстая» же это система, эта ваша gitlab. Я в какой-то момент даже подумал, что моему серверу перестанет хватать 3 Гб ОЗУ. Но нет, вроде пока хватает. Если что — сделаю swap побольше. 🙂

Рис. 1

Приехала ко мне Ардуинка

Точнее, набор GiverKIT.

И первое, что я с ней сделал, это измерил, какая же всё-таки задержка сделана в оригинальной прошивке MIDI баяна:

// Задержка на 2500 счётов
for (volatile int a=0;a<2000;a++);

Оказалось, что это всего 2 мс. Именно столько времени, получается, нужно датчикам Холла, чтобы включиться.

Интересно. Есть теперь, с чем поиграться.

«Мама, я снова программист!» 🙂

Рис. 1

P.S. А баян мой уехал ремонтироваться. Аж в Новосибирск. Пересылка — 3500 р. в один конец.