Создание альтернативного дисплея для синтезатора-сэмплера Ensoniq EPS16+ и ASR10

в 10:03, , рубрики: arduino, ensoniq, Анализ и проектирование систем, реверс-инжиниринг

Привет!

Здесь я расскажу об одном (к сожалению до сих пор неоконченном) проекте по созданию альтернативый стандартному дисплею Ensoniq EPS16+ и ASR10.

Немного предыстории: Собственно причина появления такого проекта проста: отсутствие запчастей для этих старичков. Компания Энсоник использовала в них свои кастомные VFD дисплеи и поскольку история компании фактически закончилась в конце 90х, то никакой возможности приобрести такой новый дисплей нет. Кроме того ситуация усугубляется тем что сама по себе компания была крайне закрытой и никаких мануалов с принципиальными схемами у моделей новее 90го года нет, ремонт предполагался модульный, неисправный модуль в авторизованном СЦ снимался, отправлялся на фабрику, а оттуда приходил новый/отремонтированный. В этом есть большое отличие от остальных производителей, тк на все остальные железные синтезаторы/сэмплеры которые у меня были — возможность найти принципиальную схему есть.

В общем для старта у меня был мой ASR-10 как эталон и также я купил недорого через сайт бесплатных объявлений рэковую версию EPS16+ с разбитым экраном, ее и начал оживлять.

Создание альтернативного дисплея для синтезатора-сэмплера Ensoniq EPS16+ и ASR10 - 1

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

Путем проб и ошибок, я нашел пины на которых менялись уровни в момент передачи данных на дисплей. Изготовив из Ардуины простейший логический анализатор я вычислил что скорость передачи примерно равна 60кбит/с.

Создание альтернативного дисплея для синтезатора-сэмплера Ensoniq EPS16+ и ASR10 - 2

Я пошел по простому пути и подключил USB-Serial c ttl выходами и конечно по старой памяти выставил ближайшую 56к, знакомую с древних интернетовских времен скорость модема. Но данные были битые и нечитаемые. Путем проб и ошибок, а также некого логического размышления (а именно умножения скорости миди 31250 на два) была вычислена нужная скорость серийного порта. Но тут обычный USB-Serial не подходил – в его драйверах нет возможности выбрать нужную скорость.

На помощь опять пришла ардуина. На ее базе я сделал переходник с хардверного 62500 на софтовый 9600, добавив к ардуине уже упомянутый USB-Serial, попутно вычислив что в Энсонике используется 7n1 посылка. И вот сниффер данных уже готов.

Дальше оказалось дело техники, имея опыт работы с ASR-10 на другой ардуине с подключенным дисплеем 240х64 и библиотекой U8glib достаточно быстро набросал расположение символов на дисплее,

Создание альтернативного дисплея для синтезатора-сэмплера Ensoniq EPS16+ и ASR10 - 3

разгреб команды, но в один момент все встало, когда уперся в непонятный глюк с пропаданием символов. Недели две бился с его пониманием, пока не дошло что в стандартном буфере ардуины целиком команды в некоторых случаях не помещаются, на что пришлось пропатчить HardwareSerial.h, после чего все более-менее заработало (на что ушло еще с десяток вечеров).

После этого я подключил ардуину с дисплеем и сниффер к ASR-10, прогнал несколько сценариев и уточнил все команды для полной совместимости. Фактически программная часть была готова, оставалось допилить аппаратную часть до чего-то более-менее приличного.
Но тут судьба совершила крутой поворот и я сменил основную работу на банковскую организацию, со всеми вытекающими из этого последствиями в виде дресскода, жесткого графика и самое главное – крутой информационной безопасности. В общем совмещать основную работу с парой неосновных больше уже не получалось и времени на проект просто не осталось.

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

Автор: balamutang

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js