Снова о FreeRTOS

Находясь под впечатлением от написания прошивки для платы активной клавиатуры под FreeRTOS, я решил, что и прошивку центральной платы тоже надо переводить на FreeRTOS, чтобы всё было «по красоте».

И хороший момент заключается в том, что переход можно делать постепенно, модуль за модулем. Потому что FreeRTOS-ное хозяйство отлично уживается с тем, что написано в традиционном «ардуинном» фреймворке.

Вот сегодня, например, я перевел на FreeRTOS-ные рельсы модуль драйвера SPI клавиатуры (т.е. клавиатуры, которая умеет присылать нажатия с измеренной velocity). А основная логика, включая автоаккомпанемент, продолжает нормально работать по-старому.

Так что баянчик будет переезжать на новую платформу в комфортных условиях.

И вообще, я теперь фанат FreeRTOS. Она прекрасна.

Рис. 1 КДПВ

Запаял детальки на главную плату левой клавиатуры

Осталось запаять датчики в клапанные окна.

По результатам запайки этой версии баяна я, пожалуй, поменяю своё отношение к SMD компонентам. Пожалуй, с проводными детальками больше геморроя при пайке. SMD, пожалуй, проще паять. Правда резюки и кондеры я беру большие: 1206. Мельче — категорически отказать.

Рис. 1

P.S. Заодно, кстати, была доведена до условно-готового состояния прошивка клавиатур. Функционал реализован полностью, осталась мелкая подстройка всякого (при необходимости, по ходу дела).

Полный цикл опроса всех датчиков одной клавиатуры занимает 100 мкс. С учётом того, что при самом быстром нажатии на клавишу соответствующий рычаг пролетает из одного крайнего положения в другое примерно за 2 мс, получается, что за это время система успеет опросить состояние соответствующего датчика примерно 20 раз. Этого вполне достаточно для надёжной и точной регистрации времени нажатия. Собственно, эти тайминги практически не отличаются от тех. что были получены в прототипе, где я отрабатывал способ измерения времени.

Первые звуки из MIDI-баяна v3

MIDI-баян V3 издал первые звуки.

Руками, конечно трудно точно и быстро магнит подносить, но тут уж как получилось. Главное тут слышно: звук меняется при изменении скорости поднесения магнита к датчику.

В реальной жизни магнит будет двигаться в несколько раз быстрее, чем можно поднести рукой. Так что результат тестирования — строго положительный.

Есть контакт — 2

Сегодня я добился нормального обмена данными между платой клавиатуры и центральным модулем. Всё работает на реальных платах, не на макетке.

Класс драйвера SPI-клавиатуры я писал «вслепую», т.е. без поэтапной отладки на реальном железе. Поэтому неудивительно, что взлетело не сразу, т.к. были ошибки в коде (забыл проинициализовать соответствующие пины CS, а также в одном месте неправильно определял размер сообщения).

Но сейчас — работает. Как Мастер может по своей инициативе отправить команду в модуль клавиатуры, так и клавиатура может запросить у Мастера SPI-обмен и отправить мастеру своё сообщение.

Рис. 1

Но вся эта красота по неизвестной мне (пока) причине не даёт инициализироваться SD карте (на которой записаны MIDI-файлы для автоаккомпанемента).

Буду выяснять, что там не так с точки зрения SD-карты.

P.S. Заменил SD-карту на другую — оказалось что всё работает. Видимо та, первая — при смерти; неустойчиво работает (в нескольких запусках при одинаковых условиях — разный результат).

Самое-самое первое включение MIDI-баяна v3

«Первый вздох господина Пеже» 🙂

Светодиоды показывают ошибку «от клавиатуры пришло какое-то неопозненное сообщение». Ну, то есть с висящего в воздухе входа SPI прочитался мусор. Это нормально.

Но поскольку на этапе сборки/настройки будет удобно включать схему без одной или без двух клавиатур, то, пожалуй, мусор на входе придётся игнорировать, как будто вообще ничего не приходило.

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

Ну, надо приступать к пайке плат правой клавиатуры.

Рис. 1

Подводим итог новогодних праздников 2026

6 января у меня впервые заработала как надо связь по SPI c «заготовкой контроллера клавиатуры», написанной на FreeRTOS.

На голом C++, без FreeRTOS оно заработало ещё в конце декабря. То был, как говорится, proof of concept. А 6-го января заработал SPI-slave, написанный под FreeRTOS. Пришлось, правда, слегка подпилить ардуинную библиотеку SPISlave, чтобы оно нормально работало в FreeRTOS. И мою доработку даже включили в т.н. «ядро» rp2040.

И с тех пор я продвинулся с позиции «нет ничего, кроме заготовки отправляльщика-принимальщика сообщений по SPI» до состояния «имею практически полнофункциональную прошивку которая умеет работать в штатном режиме, а также имеет поддержку режима настройки». (Да, активную клаву надо будет настраивать для того чтобы выставить как можно бОльшее расстояние между положениями, которые прошивка принимает за «полностью отпущено» и «до упора нажато».)

А на стороне центрального модуля я отрезал поддержку клавиатуры построенной на регистрах сдвига, и добавил связь с модулем клавиатуры.

Теперь надо запаять плату центрального модуля и проверять на реальном железе работу обновленного центрального модуля, а затем и всего остального.

В общем, выходные прошли не зря. Я продвинулся очень неплохо.

Рис. 1

Запаял плату панели управления

Запаял плату панели управления для следующей версии баяна.

Отличие от предыдущей версии в том, что:

  • На плате расположено гнездо для microSD карты (слева под дисплеем виден краешек). В текущей версии баяна карта находится внутри герметичного корпуса. Опыт показал, что время от времени всё-таки приходится эту карту доставать. В новом баяне я для этого хотя бы разбирать его не буду. 🙂
  • Предусмотрено 2 дополнительных отверстия для крепления платы в корпусе. В старой плате всего 4 отверстия по углам, в результате плата провисает, что совсем нехорошо.
  • Для подключения платы будет использоваться шлейф. В старую плату я паял проводки МГТФ.

В целом, функционал, состав и расположение кнопок не изменились. Тут как в УАЗ-буханкой: «сразу хорошо получилось». 🙂

Рис. 1

Есть связь!

Вчера я закончил реализацию обмена данными между центральным контроллером баяна (типа, слева на рис. 1) и контроллером клавиатуры (типа, справа на рис. 1).

Обмен происходит по SPI. Центр — Master, клавиатура — Slave. Обмен возможен по инициативе как одной, так и другой стороны. Т.е. центр может отправлять управляющие команды клавиатурам и получать от них ответы. А клавиатура может отправлять центральному контроллеру сообщения о клавиатурных событиях (нажатия и отпускания клавиш).

Прошивка контроллеров клавиатур пишется на FreeRTOS. Как оказалось, это просто прелесть. Очень нравится.

Рис. 1

Blue Canary — Грустная Канарейка

Эта композиция всегда мне казалась очень забавной. Само собой, впервые я её услышал в знаменитом номере «Лицедеев».

А тут случайно попались ноты в переложении для баяна.

Ну а раз ноты баянные, то в этот раз я решил записать ролик по-простому. С баянным звуком. Без изысков. Баян, как он есть. Ну в смысле, как он реализован в звуковом модуле Atemp ProDX. Своих собственных голосов-то в моём баяне нет. 🙂

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

P.S. Бонус-трек — здесь. 🙂

Пример использования раздельной настройки меха для правой и левой клавиатур

Ранее я докладывал о том, что сделал раздельную настройку меха.

Здесь — пример реального использования такой настройки. В этом примере павая рука управляется мехом, а бас-аккорд — просто играют со своей громкостью, не обращая внимания на мех.