Поменялся микроконтроллер, добавилась память EEPROM, микросхемы согласования логических уровней между 3.3- и 5-вольтовой логикой, и радиомодуль. И коннектор для подключения устройства чтения SD карт.

Блог обо всём.
Я нашёл роскошную партитуру здесь. Оно её даже проигрывать умеет. И в тональность, которая в мультике они почти попали.
И я эту партитурку заскринил себе: Lusta Dick.pdf

P.S. Гады. 🙂 Партитура кривая — основной голос в нотах на тон выше записан. Я только сейчас на это внимание обратил, когда стало интересно посмотреть «а что там в басовой линии». Основной голос в си-миноре, а всё остальное в ля-миноре. Блин. Так и придётся ноты самому переписывать.
P.S.S. Оказывается, не гады. «Для трубы в строе си-бемоль (in B) ноты указываются на один тон выше действительного звучания, а для трубы в строе до (in C) — в соответствии с действительным звучанием.» Извращенцы. Полные извращенцы те, кто такое придумал.
Я уж, за 35-то лет и забыл, как это делается. Метроном и счёт вслух — лучшие помощники начинающих музыкантов. 🙂 Прямо скажу, не думал, что там такой не самый очевидный ритм этого всего.
Первые полторы строчки, в общем, освоил. Лучше всего получаются первые 2 такта.
Но в целом ощущения отличные. Нажимаю кнопки на баяне, а в наушниках звучит отличная труба. Кайф.
Обстоятельства заставили меня разориться и купить новые кнопки для баяна (см. рис. 1). Кнопки итальянские, с красивым перламутровым отливом, на 1 мм больше диаметром, чем родные, и гораздо более комфортные для нажатия. Покупал здесь. Кнопки Z-0031 (белые) и Z-0032 (чёрные). Демпферы Z-0051 (чёрные).
Был некий соблазн купить красные демпферы, но всё-таки я решил, что это будет цыганщина, и купил чёрные. Довольно органично смотрится.
А ещё была мысль купить только белые кнопки, чёрно-белые ноты выделять чёрными и белыми демпферами (как иногда делают на концертных баянах). Но я подумал, что это может вызвать лишний напряг при разучивании всякого. А напрягаться, даже немного, мне что-то в последнее время совсем не хочется. Так что остановился на традиционном варианте.
И раз уж я взялся крутить кнопки, я решил, насколько смогу, исправить замеченную мною ранее кривизну второго ряда. Для этого надо было передвинуть крепежные отверстия кнопок второго ряда примерно на 1 мм ближе к первому ряду.
В целом, всё получилось. Получилось не идеально (где-то совсем хорошо, где-то не очень), но, на мой взгляд, заметно лучше, чем было. Но, как обычно, кое-что пошло не по плану.
Читать далее «Заменил кнопки на баяне»Сегодня у меня получилось завести библиотеку MD_MIDIFile на моей RP2040-Zero, на нестандартных выводах SPI.
Устройство инициализируется, файлы читаются. И содержимое файлов выводится в отладочный серийный порт.
Осталась небольшая проблема. Упомянутая библиотека умеет либо, собственно, проигрывать эти файлы, либо выводить их «дамп» в отладочный порт. Причём и то, и другое, она делает «в режиме реального времени» — т.е. с заданной скоростью проигрывания данного файла.
Мне же, для моих «баянных» задач надо будет выбранные файлы сначала сканировать, чтобы убедиться, что содержимое этих самых файлов «правильное», что в них нет ничего лишнего, что могло бы испортить настройки рабочих MIDI-каналов баяна, и что могло бы помешать управлению воспроизведением MIDI автоаккомпанемента (задавать теми, и т.п.). И сканировать надо не со скоростью воспроизведения, а со скоростью чтения файла.
И, судя по всему, придётся эту библиотеку дорабатывать под свои задачи. Хоть я такое и не люблю. Но это будет в любом случае быстрее (и идеологически правильнее), чем разводить ещё одну (свою) библиотеку только для сканирования файлов.
Ранее я писал о том, что научился искать свободный радиоканал. Но делать это надо будет не на стороне приёмника (который будет сделано на Arduino nano), а на стороне передатчика, который будет сделан на RP2040.
Ну и вот сегодня я скачал библиотеку RF24, адаптированную к RP2040, и перенес написанный ранее код на RP2040-Zero.
Работает.
Можно начинать писать классы радиоинтерфейса для обеих сторон.
Я недавно писал, что нашел хороший исходник для работы с EEPROM микросхемами AT24C16.
Оказалось, что он выгодно отличается от «доступных аналогов» тем, что работает очень быстро. Как говорится, «самая быстрая запись в EEPROM на Диком Западе». 🙂
Это потому, что в этом коде есть интересная изюминка. Микросхемы эти обрабатывают запросы на запись/чтение довольно медленно. Микроконтроллер должен ждать окончания предыдущей операции прежде чем отправлять в микруху новый запрос. В 99% примеров кода, доступных в сети, народ тупо лепит задержку на пару миллисекунд. Но в этом коде нет никаких задержек, зато там есть это:
static void at24cxx_wait(int i2c_address)
{
int resault = 0;
do
{
Wire.beginTransmission(i2c_address);
resault = Wire.endTransmission();
} while (resault != 0);
}
Это, оказывается, позволяет избежать излишнего ожидания и приступать к следующей операции в ту же самую долю микросекунды, когда микросхема EEPROM готова принять очередной запрос. В результате запись происходит очень быстро. Минимум на порядок быстрее, чем вариант с задержками.
2048 байт (полная емкость) пишутся за 231 мс.