РадиоКот :: Чиптюновый плеер-синтезатор на двух чипах AY-3-8910/YM2149F "ChipTune_Player 2.22"
Например TDA7294

РадиоКот >Конкурсы >Поздравь Кота по-человечески 2017! >

Теги статьи: Добавить тег

Чиптюновый плеер-синтезатор на двух чипах AY-3-8910/YM2149F "ChipTune_Player 2.22"

Автор: Вадиматоричик, deryabkinda@mail.ru
Опубликовано 21.09.2017
Создано при помощи КотоРед.
Участник Конкурса "Поздравь Кота по-человечески 2017!"

ОГЛАВЛЕНИЕ

  1. ВВЕДЕНИЕ
  2. ИСТОРИЯ РАЗВИТИЯ ПРОЕКТА
    • ИЗУЧЕНИЕ СУЩЕСТВУЮЩИХ РЕШЕНИЙ
    • ИТЕРАЦИЯ ПЕРВАЯ
    • ИТЕРАЦИЯ ВТОРАЯ
    • ИТЕРАЦИЯ ТРЕТЬЯ
  3. ОБЗОР УСТРОЙСТВА
    • АППАРАТНЫЕ ХАРАКТЕРИСТИКИ
    • ПРОГРАММНЫЕ ХАРАКТЕРИСТИКИ

БЛАГОДАРНОСТИ

ВВЕДЕНИЕ

В далеком 2009 году, когда я только перешел в старшую школу, я узнал о существовании когда-то популярного домашнего компьютера zx-specturm. К сожалению, в наличии такого компьютера у меня не было, однако был выход в интернет. Так что я начал искать видео с этим компьютером. Первым же найденным роликом было воспроизведение музыки с трекерного редактора protracker. Звук меня очень впечатлил. Сумев найти плеер под windows xp (ayemul от Сергея Бульбы), я начал искать по сети различные треки, написанные под этот компьютер. Со временем их стало за сотню и я захотел попробовать прослушать их на настоящем железе. Немного поискав на аукционах города, я нашел один из клонов этого компьютера, в котором был установлен звуковой чип Yamaha YM2149F (являющийся аналогом AY-3-8910 с определенными оговорками). Так же в компьютере присутствовал floppy дисковод. Далее пришлось изучить достаточно много для пятиклассника литературы (в основном, форумы. Много форумов), чтобы записать на дискету (которая уже на тот момент в продаже была редкостью) простенький плеер и несколько треков, понравившихся при прослушивании в эмуляторе. Звук хоть и не сильно, но все же отличался от того, что я слышал в эмуляторе даже при указании всех параметров эмуляции как в имеющимся компьютере. "Железная" версия меня впечатлила сильнее, чем программная. Вследствие чего мне захотелось слушать именно на настоящем чипе. Но постоянно записывать дискеты - то еще удовольствие, которое быстро надоедает. Так что я твердо решил - я сделаю плеер, который мог бы воспроизводить звук с флешки!

ИСТОРИЯ РАЗВИТИЯ ПРОЕКТА

Те, кому интересен только конечный результат, могут пропустить этот раздел.

ИЗУЧЕНИЕ СУЩЕСТВУЮЩИХ РЕШЕНИЙ

Я начал поиски аналогов, но смог найти только версию, которая тянула львиную долю самого zx-specturm. Как следствие имеющую огромное потребление. Вероятность успешной сборки такого устройства школьником со слабом владением паяльником мне показалось очень низкой и я с грустью отбросил эту идею (хоть и очень не сразу). Продолжив поиски смог найти еще только зародившуюся тему на zx-pk. На тот момент там ничего вменяемого не было. Полностью отчаявшись я забыл про эту идею... Но годы шли и примерно раз в год, как весеннее обострение, мне хотелось создать это устройство. С каждым годом мой опыт рос и в какой-то момент мне пришло осознание, что я смогу если не создать с нуля, то хотя бы собрать существующую "тяжелую версию". Но перед этим я решил проверить, на сколько продвинулась за несколько лет разработка, которую я увидел на zx-pk. Я был приятно удивлен! Т.к. нашелся человек, который довел идею до рабочей практической реализации. Сразу же попробовал собрать данное устройство на макетной плате.


После чего развел печатную плату (так как не смог найти по городу нескольких элементов в нужных корпусах).

Изготовил на тот момент популярным ЛУТ-ом.

Однако устройство без корпуса - никуда не годится. Тем более носимое. Я вспомнил, что мой друг как раз собирается поступать на архитектора (дело уже было в конце 10-го, начале 11-го класса). И тут меня озарило, что надо дать ему "вступительный тест". Он, особо не сопротивляясь, согласился создать модель корпуса. Ввиду большого потребления плеера - требовался весьма емкий источник питания. Так что примерно половину пространства занимали аккумуляторы. Однако, это уже было похоже на носимое устройство. Хоть и довольно тяжелое. Помимо разработки модели нужно было придумать, как его изготовить. В то время уже во всю везде говорили о 3D-принтерах и у многих предприятий они были. Но денег у меня тогда особо не было (экономил на еде и транспорте в пользу компонентов для плеера). Немного поискав, я узнал, что есть место, где школьникам и студентам дают оборудование для реализации своих идей взамен на то, что по окончании создания устройство организация приписывает себя как один из помощников и выкладывает на свой сайт в качестве рекламы фото. В моем городе была такая организация. Там мне с радостью предоставили оборудование. После печати вышло следующее.

 

Далее нужно было немного привести корпус в порядок (сгладить неровности печати) и покрасить.

Оставалось лишь собрать. Так устройство обрело конечный вид.

 

Однако через некоторое время я понял, что меня многое не устраивает в текущем устройстве. Ограниченный функционал, отсутствие кнопки "удалить" (автор был категорически против добавления записи не флешку) и многое другое. Так что в конечном счете я решил, что создам свое устройство.

ИТЕРАЦИЯ ПЕРВАЯ

На момент, когда я строго решил начать делать свое устройство, я заканчивал первый семестр университета и работал в компании по производству беспилотных летательных аппаратов начинающим программистом. Так что было с кем проконсультироваться по схемотехническим вопросам. Я не упустил этой возможности и тщательно изучал, как у нас на предприятии разводятся платы, пишется код под различные устройства и многое другое. На тот момент я активно увлекался российскими микроконтроллерами и подумал, что было бы неплохо сделать устройство на одном из них. А конкретно - К1986ВЕ92QI, так как он мне больше всего понравился из всех, с которыми я на тот момент работал. Так же решил разместить клавиши на одной плате с экраном от nokia 1100. В качестве звукового генератора выбрал AY-3-8912 (28-миножечное исполнение AY-3-8910 почти с теми же параметрами).

Плату полностью переделывал порядка 5 раз, пока коллега с работы не одобрил получившийся результат. За что ему спасибо. Читая параллельно <<умные книжки>> по схемотехнике и радиоэлектронной аппаратуре, учился "понимать электричество", составлять продуманные схемы и профессионально разводить печатные платы. В конце концов - смог составить схему и развести по ней плату, которая прошла <<контроль>>. Размер платы был чуть меньше кредитной карты. Выглядела она так.

А в изготовленном виде должна была выглядеть так.

Изготовленная в Резоните плата выглядела так.

Однако послушать звук с этой платы в итоге не удалось. Микроконтроллер в упор не хотел подключаться по SWD интерфейсу ни к J-Link-у, ни к st-link-у, ни к MT-Link-у (аналог J-Link-а от Миландра). Хотя разводка полностью совпадала с той, что была у нашего серийного устройства на этом же чипе и точно работала. Отсюда даже шутка пошла: "Чтобы устройство на российском микроконтроллере работало, нужно личное одобрение ФСБ!". Однако данная плата помогла тем, что после попытки собрать ее стало понятно, как следует размещать компоненты, чтобы было удобно собирать и отлаживать устройство.

ИТЕРАЦИЯ ВТОРАЯ

Изучив предыдущий неудачный опыт и поняв, что текущая реализация не устранит всех моих «хочу», я решил кардинально переработать устройство. Сделать его на 2 звуковых чипа, работающим на базе STM32 с возможностью работать не только плеером, но и аналоговым синтезатором (по MIDI, UART, или USB). При этом хотелось оставить примерный размер предыдущего неудачного образца.

Для реализации платы в пределах задуманных габаритов было решено подключать экран и клавиатуру с помощью кабелей, а не размещать их на плате. В качестве экрана был выбран шилд с экранам на контроллере ST7565R (питающимся от 3.3 вольт). Плату клавиатуры решил развести сам. Так как не смог найти в продаже подходящего модуля. В дополнение заложил в устройство два разъема под micro-sd карты. Один для пользователя, другой для системных нужд. Спустя год, тщательно проработав схему и вложив в нее все, что мне хотелось, вышел следующий результат:

 

В этот раз устройство заработало и я смог протестировать на нем многие функции. Однако тут возникла проблема с программным обеспечением. Я писал его основываясь на корпоративном API, а его открытое распространение запрещено. Поскольку мне хотелось, чтобы проект был открытым, пришлось потратить время, тщательно изучить выбранный контроллер «изнутри» и написать свое собственное открытое API, которое не используют ничего (включая файлы от ST), кроме библиотек, идущих в составе с тулчейном (полностью бесплатные и открытые) и библиотек распространяемых под полностью свободной лицензией.

Несмотря на то, что плата выполняла свои функции и прекрасно сгодилась в качестве тестового образца, в ней было множество мелких ошибок (провода на задней части платы это подтверждают). К тому же, в погоне за размером конечного устройства я применял smd компоненты размера 0402, что уже значительно усложняло монтаж. А размещение под DIP панелями вообще лишало всякой возможности что-то легко починить (особенно микросхемы цифровых потенциометров). Да и монтаж существенно усложнился (при том, что 60% площади пустовало). К тому же в виду недостатка опыта и знаний не смог верно развести развязку звуковой части.

ИТЕРАЦИЯ ТРЕТЬЯ

Чисто для себя - мне бы хватило на некоторое время и имеющегося результата. Но тут я узнал о том, что скоро на любимом РадиоКоте конкурс, который я все время по той или иной причине пропускал. Я решил, что это отличный шанс распространить информацию о том, что мой проект уже можно более-менее использовать. Но просить делать перемычки навесным монтажом в конечном конкурсном устройстве - не комильфо. По-этому, взяв отпуск на все 36 дней, я решил всерьез засесть за проект. Исправить мелкие недоработки, привести в порядок программное обеспечение и прочее. Так за месяц бессонных ночей как перед сессией, я смог довести до ума базовый функционал плеера (синтезатор в данный момент в процессе в тестовых ветках программного обеспечения).

Большую часть компонентов сделал 0805 и выше. Добавил больше свободного пространства для более удобного монтажа. Сделал отверстия под стандартный шаг (в предыдущей версии использовал 1.27 мм). Применил контроллер с большим количеством Flash (взял про запас 1 МБайт. Хоть на данный момент прошивка и занимает всего 260 кб). Помимо этого пере развел аудио-часть и добавил блоки для экономии энергии (возможность отключать чипы когда они не работают). Вышел следующий результат.

 

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

 

 Корпус помогли изготовить из алюминия ребята из цеха на работе средствами ЧПУ станка.

Далее отправил корпус на анодировку.

Оставалось только произвести гравировку.

Не и собрать)

ОБЗОР УСТРОЙСТВА

АППАРАТНЫЕ ХАРАКТЕРИСТИКИ

Звук

  • Поддерживаются одновременно чипы AY-3-8910 (и аналоги в корпусе DIP-40) и AY-3-8912 (и аналоги в корпусе DIP28) (на момент написания статьи программно поддерживается один чип. В очень скором времени добавится второй для одновременного воспроизведения).
  • В качестве микшера используются 2 цифровых потенциометра AD5204, обеспечивающие изменение громкости звучания каждого канала обоих чипов (A, B, C, A1, B1, C1).
  • В качестве усилителя для наушников использована микросхема MCP6022, обеспечивающая хорошие качество и громкость при относительно низких шумах.
  • Аудио-часть отвязана от цифровой отдельной «землей».
  • Выходной сигнал выведен к выводам ADC микроконтроллера (что может быть использовано как для «черновой» записи звука, так и для построения состояния спектрального анализатора).

Логическая часть

  • На плате установлен микроконтроллер STM32F205RGT6 (32-хбитная шина, 1 МБайт Flash, 120 МГц CPU, 128 КБ RAM), считающий в себе низкое энергопотребление в режиме плеера (на низкой частоте) и высокую производительность в режиме аналогового синтезатора (работа по USB, UART, MIDI).
  • Микроконтроллер тактируется от внешнего кварцевого резонатора. Это нужно для формирования точной частоты тактирования AY/YM чипов (в будущем можно будет выбирать любимую частоту из предложенного списка. На момент написания статьи, установлена частота тактирования 2 МГц).
  • На плате установлено 2 разъема под micro-sd карты. Один из них планируется использовать для системных нужд, а вторая — для пользователя. Системный разъем подключен по SPI, пользовательский по SDIO (на момент написания статьи программно поддерживается только системный разъем).
  • Чипы AY/YM подключаются к микроконтроллеру через сдвиговые регистры, что обеспечивает одновременное обновление регистров обоих чипов.
  • На плате имеется гальванически-развязанный MIDI вход. Что позволит в будущем (на момент написания статьи программно не реализовано) использовать устройство как аналоговый синтезатор, конспирируемый по MIDI.
  • Устройство аппаратно поддерживает экраны как со светодиодной подсветкой, так и OLED (конфирмуемой по SPI). В зависимости от запеваемых элементов можно выбрать, какой LCD будет использоваться. В данной реализации поддерживается LCD на базе контроллера ST7565R с внешней светодиодной подсветкой, работающей от 3.3 вольт (управление катодом подсветки).
  • Имеется качелька громкости и кнопка включения устройства после полного отключения (полное отсоединение всей цепи от аккумулятора).
  • В качестве порта коммутации с внешним миром был выбран DB-9. На него выведены следующие контакты.
    1. SWD разъем + Reset (для программирования и отладки).
    2. Питание с устройства (для внешнего анализа) и земля.
    3. MIDI интерфейс
    4. Интерфейс прошивки по UART/командной строки UART (на момент написания статьи программно не реализовано).

Питание:

  • Плата рассчитана на питание от li-ion аккумулятора емкостью более 1000 мач (мною использовался аккумулятор на 4000 мач).
  • Логическая часть и подсветка питаются от 3.3 вольт, получаемые напрямую от LDO NCP551.
  • Чипы AY/YM, усилитель и потенциометры питаются от DC-DC преобразователя PT1301.
  • Имеется возможность отключать всю цепь 5 вольт (DC-DC), а так же каждый из чипов AY/YM, оставляя при этом усилители и потенциометры включенными.
  • Аккумулятор заряжается с помощью установленного на плате контроллера заряда li-ion TP4056 при подключении USB зарядки. Ток потребление не более 1 ампера.
  • В режиме воспроизведениея двух чипов потребление 0.13 ампера при 4 вольтах на входе (аккумуляторе).

ПРОГРАММНЫЕ ХАРАКТЕРИСТИКИ

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

  • Большая часть кода — собственные библиотеки. Исключение составляют библиотека графического интерфейса MakiseGUI, операционная система реального времени FreeRTOS 0.9.0, библиотека работы с FAT FatFS от Chan-а и библиотеки тулчейна arm-none-eabi-gcc (все выше перечисленные являются полностью бесплатными и открытыми).
  • Большая часть кода написана на C++ (достаточно часто применяются constexpr выражения и шаблоны). В связи с этим размер кода значителен, но выполняется быстрее аналогов на HAL.
  • Вся оперативная память размечается статически. Динамическое выделение (динамическое создание/удаление сущностей), в угоду скорости и надежности, отсутствует.
  • Графический интерфейс состоит из 2-х окон: главное окно воспроизведение трека, окно-список треков. В будущем графический интерфейс будет значительно доработан.
  • Имеется общая шторка состояния.
  • Поддерживаются PSG файлы на один чип (в скором времени будет добавлена поддержка PSG для 2-х чипов).
  • Поддерживается переключение треков из каждого окна, имеется перемотка вперед, пауза (с отключением на время паузы чипа).

ПОВТОРЕНИЕ УСТРОЙСТВА

Проект активно развивается и все изменения можно наблюдать на github-е. Основной проект, называемый chiptune_player_2.22, содержит в себе множество субмодулей. Среди которых хотелось бы выделить исходный код самого устройства и проект со всей аппаратной частью (исходники печатных плат, gerber файлы изготовления, схемы в pdf, сборочные чертежи), называемый ayplayer_board.

Для сборки программного обеспечения проекта необходим тулчейн arm-none-eabi не старее версии 6-2017-q2-update. Сборку выполнять из под Linux машины (в будущем доработаю makefile, чтобы можно было собирать и из windows). 

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

Вот и все. Следите за обновлениями. Удачи!

 

БЛАГОДАРНОСТИ

Спасибо:

  • Петру Шаршавину за то, что много раз пересматривал мою схему и печатную плату и советовал, как сделать лучше.
  • Егору Крылову за разработку и помощь в изготовлении корпуса финальной версии устройства.
  • Александру Маркову за длительную критику и помощь по всему ходу развития проекта.


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

77 4 10
3 0 0