Оно играет

Продолжаю отладку плат. В прошлой серии я обнаружил, что не работает экран.

Пришлось его выпаять из платы панели управления и начать исследование. Воткнул я экран на макетку, и на эту же макетку перекинул сигнальные провода I2C и взял питание со свободного (пока) разъёма основной платы. В таком виде экран нормально завёлся. Но самое главное — это даже не экран, а то, что запустился основной рабочий цикл прошивки. А значит появилась возможность проверить работу всех датчиков правой клавиатуры. Это — самое главное, что я хотел сделать.

На удивление, глюков почти не было. В смысле, их было всего два:

  1. Не срабатывал датчик самой высокой ноты среднего ряда.
  2. 2 датчика самых высоких нот третьего ряда почему-то срабатывали вместе: подношу магнит к одному датчику, а он срабатывает вместе с соседним. И то же самое, когда я подношу магнит к соседнему датчику.

Первый глюк вылечился тщательной пропайкой сигнального вывода датчика; был плохой контакт с «пятаком» верхнего слоя. Второй глюк вылечился после промывки соответствующего участка платы спиртом. Видимо, какая-то грязь изображала из себя «соплю». Теперь все датчики работают как надо (см. видео ниже).

Потом я перешёл к плате управления. Начал с выяснения, почему не срабатывает ни одна кнопка. Оказалось, что на дорожке, которая соединяет выход каскада регистров с разъёмом, было аж два разрыва. Как обычно, зачистил маску (иголкой) и спаял дорожку тоненьким проводком. Кнопки теперь работают все.

И осталась последняя проблема — неработающий (на плате) дисплей. Провёл я эксперимент. Вместо того чтобы запаивать экранчик на место, я его воткнул на макетку, и пробросил на ту же макетку сигнальные провода и питание прямо из того разъёма, куда должен запаиваться экранчик. И оно заработало. То есть с платой всё нормально, а проблема была в каком-то плохом контакте после предыдущего монтажа.

Следующий шаг — запаять экранчик на место. В этот раз проводками, а не на гребёнку. И если оно заработает, то на этом отладка «железной» части всех плат (кроме платы левой клавиатуры) будет закончена. Можно будет либо браться за плату левой клавиатуры, либо дорабатывать прошивку, убирая сделанные ранее «костыли» (временные решения) и адаптируя её к полноценной панели управления.

С первого раза не завелось

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

Как я и говорил в предыдущей заметке, с первого раза всё это хозяйство не завелось.

Выглядит это так: при включении не загорается экран. Светодиоды нормально сбрасываются в «ноль», но экран остается пустым. Пришлось отлаживать.

Сначала я решил убедиться, что каскад светодиодов работает, как запланировано. Сделал пару прошивок со вспомогательным кодом, чтобы посмотреть, все ли светодиоды загораются, и правильный ли у них в результате порядок. Оказалось, что один светодиод какой-то странный — плохой контакт где-то внутри; оживает при шевелении. Пришлось заменить на исправный.

С порядком оказалось чуть веселее. Там же у меня каскад из двух регистров. И данные из буфера в каскад я загружаю из цикла. А цикл, чисто на автомате, я начал с первого элемента массива. Забыл, что младший байт должен грузиться последним, т.к. загрузка этого каскада идёт «снизу вверх». В результате данные младшего регистра попадали в старший, и наоборот. Поправил.

В результате убедился, что как минимум управление светодиодами работает как надо. (Ну, помимо того, что всё хозяйство успешно питается от внешнего БП через спец-разъём, а не через USB на ардуинке.)

Затем с помощью очередной отладочной прошивки убедился в том, что до основного цикла дело не доходит. Т.е. выполнение кода останавливается где-то в блоке инициализации.

Раз у меня есть светодиоды, значит на них можно выводить «отладочную печать». 🙂 Добавил метод showDebugCode(), который выводит 9-битовое число на светодиоды. В двоичном коде, естественно. И расставил в блоке инициализации контрольные точки. Которые показали, что управление передаётся в метод init() библиотеки дисплея и оттуда не возвращается. Ну то есть надо копать в направлении «что не так с подключением дисплея». Простейшие моменты типа «нет ли обрыва дорожки» и «нет ли замыканий» я уже проверил (и один разрыв в дорожке я-таки нашёл; зачистил маску и спаял дорожку тоненьким проводком). Так что с основными проверками всё норм. Видимо, неисправность хитрее. Возможно, один сигнальный проводник (или оба) замыкают на что-то по дороге. (Т.е. возможно где-то при пайке повешена сопля, невидимая глазом.) Та же самая ардуинка, пересаженная на макетку с таким же точно дисплеем, нормально инициализируется и начинает «работать». То есть проблема именно где-то в платах.

В общем, надо копать. Продолжение следует.

Рис. 1

Запаяны все платы для правого полукорпуса

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

И я думаю, что надо будет соединить эти платы между собой и проверить их работу в режиме «разложено на столе». Можно будет подносить магнит к датчикам и смотреть, как оно всё работает. Или не работает.

Вообще, я удивлюсь, если всё это добро заведётся с первого раза. Пайку я, конечно, всю проверил визуально. Также я прозвонил все платы на предмет КЗ по питанию; нигде не коротит. Сигнальные выводы датчиков я тоже прозвонил, чтобы проверить, не коротят ли они на землю.

Рис. 1

По техническим причинам, переднюю и заднюю платы датчиков правой клавиатуры пришлось делать составными. Оборудование Дениса не позволяет делать платы, которые длиннее чем 280 мм. Половинки уже соединены между собой винтами М3 через соединительные пластины, сделанные из 2-миллиметровой стали. Покрытие пластин — моё любимое: воронение в льняном масле. Очень мне нравится эта технология. А ещё больше нравится результат: покрытие получается весьма стойкое к механическим повреждениям.

Есть у меня небольшие опасения, связанные как раз с одним из этих соединений передней платы датчиков (на рис. 1 она самая нижняя). Есть вероятность, что рычаги клапанов будут задевать гайки. А поднять плату не получится, т.к. сделать это не даст декоративная решётка (т.н. «ажурка»). Но это дело второе. Сначала нужно убедиться, что электроника работает так, как ожидается.

Рис. 2

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

Сегодня была запаяна плата панели управления (см. рис. 1).

Времени у меня на это ушло около 3.5 часов. Паял медленно, но аккуратно. Надо только завтра на свежую голову визуально проверить все пайки. Хоть это и маловероятно, но я мог где-то поставить соплю или не пропаять до конца. Экранчик пока не запаял. Я еще не решил, как я его буду припаивать: толи через гребёнку, толи проводами. Опять же, на свежую голову разберусь.

Возможно стоит эту плату проверить отдельно, не дожидаясь готовности ещё 4-х плат правой клавиатуры. Подумаю на эту тему.

Рис. 1

Запаял одну плату

Я не утерпел, и одну, самую маленькую плату уже запаял. Благо туда паять-то всего две контактные колодки под Ардуинку и два резистора (см. рис. 1).

Рис. 1

Паяется прекрасно. Маска не облезает, шелкография выдерживает отмывку флюса спиртом. Заодно испытал новый флюс в боевых условиях. Он прекрасен. Паяет великолепно, позволяет оценить качество пайки без смывания, смывается спиртом (ИПС) без проблем.

Рекомендую и флюс, и изготовителя печатных плат.

Рис. 2

Платы готовы

Сегодня праздник у ребят,
Ликует пионерия.

Я сегодня забрал заказанные ранее платы. На вид — очень качественно сделано. По внутренним дефектам будет понятно только после пайки. Скоро, скоро мой баян издаст первые электронные звуки.

Немного сомневаюсь я только по поводу платы датчиков 1-го и 2-го рядов правой клавиатуры (второй ряд сверху на рис. 1). Пространство между рычагами клапанов и декоративной решеткой там довольно маленькое — порядка 5 мм. Есть шанс, что плата туда не влезет; т.е. рычаги будут по ней стучать. В этом случае придётся чуть приподнимать декоративную крышку; делать проставки какие-то. Но очень надеюсь, что опасаюсь зря.

Следующий шаг — запаять все детали и проверить работоспособность всего этого хозяйства в режиме «разложено на столе». Сюрпризов не ожидаю, но они могут быть даже тогда, когда их не ожидают.

Рис. 1

Без усилий сэкономил 97 байт

Попробовал я установить для Ардуины «ядро» GyverCore. Установилось и заработало.

И оказалось, что я не зря попробовал: при компиляции с новым ядром прошивка MIDI-баяна оставляет свободным 307 байт ОЗУ. Стандартное ядро оставляло 214 байт. По ардуинным меркам такая экономия — это совсем не мелочь.

Так что рекомендую.

Рис. 1

Я не тормоз

Баян «Рубин 5» мне купили в 1980 году, когда я поступил в 1 класс музыкальной школы. Я на нём отучился до 1985, после чего эпизодически играл примерно до 1993. Потом этот баян хранился без движения 30 лет. И вот я его взялся переделывать в MIDI-баян.

И только сейчас я обратил внимание на то, что клавиатура кривая (см. рис. 1). Расстояние между кнопками 1 и 2 рядов больше, чем расстояние между 2 и 3 рядами (см. красные линии на рис. 1). И как следствие, «диагонали» (см. зеленую линию на рис. 1) неровные. 44 года мне понадобилось на то, чтобы обратить на это внимание.

Нет, я не тормоз.

Рис. 1

Это не помешало мне окончить музыкальную школу с отличием. Т.е. эта кривизна всё-таки «на скорость не влияет». Однако, мой внутренний перфекционист глубоко несчастлив теперь. Борюсь с желанием пересверлить отверстия в рычагах и перекрутить кнопки ровно.

Платы переданы в производство

Теперь только ждать. Мне не очень повезло, и приходится ждать ещё 2-3 недели. Но зато на мне заработает не левый посредник-китаец, а вполне конкретный земляк, делающий нужное и полезное дело за вполне приемлемые деньги. (Не то что многие конторы в России, которые заряжают за одну плату, как за чугунный мост.)

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

По этой теме мне остаётся только заниматься восстановлением беглости и координации рук. Всё-таки я не играл примерно с 1993 года. Но тут есть какая-то надежда. Опыт показал, что после примерно 3 часов занятий при игре гаммы в руке начинает появляться правильное ощущение «двигается как по рельсам», когда голове уже не нужно задумываться о том, куда становятся пальцы. Т.е. мышечная память не ушла совсем, она просто глубоко закопана сейчас. Конечно, было бы неплохо играть со звуком, да под метроном. Но для этого нужно получить готовые платы, запаять все детали, и установить всё хотя бы в правый полукорпус для начала. А перед установкой — проверить правильность работы в «разложенном на столе» виде. Надо мне, пожалуй, временно переключиться с баянной темы на что-то другое. А то тошно просто так, ничего не делая, ждать. Например, фотографии из последней поездки надо обработать.

Рис. 1

Платы разведены и подготовлены для передачи на изготовление

Пришлось переделать кое что. Во-первых, платы правой клавиатуры оказались слишком длинные. Пришлось и переднюю, и заднюю платы разделить на 2 части, чтобы длина одной платы не превышала 280 мм (технологическое ограничение). Но это не беда; ничего не стоит соединить две коротких платы в одну длинную с помощью металлических пластин. (У меня как раз есть стальная фольга 2мм, из которой эти пластины можно сделать.)

Во-вторых, пришлось подкрутить в нужную сторону параметры переходных отверстий.

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

Рис. 1