Эмулятор Panasonic CD Changer с встроенным контроллером IDE ATAPI

Данное устройство разрабатывалось как приставка к авто-магнитоле CQ-RG133W производства Panasonic, подключаемая к штатным разъемам CD-C (CD Changer) на задней стенке магнитолы, позволяющая воспроизводить AudioCD диски на компьютерном приводе CD-ROM с интерфейсом IDE.

Наибольшую сложность вызвал сам протокол обмена информацией между головным (магнитола) и подчиненным (CD чейнджер) устройствами. В инете информации по этому поводу не густо, пара ссылок:
www.mictronics.de/projects/cdc-protocols/#Panasonic
q1.se/cdcemu/
причем описание из первой ссылки ссылается на вторую как на первоисточник, а исходники из второй ссылки, написанные на ассемблере для МК PIC Microchip, немного разнятся с описанием протокола с той же страницы, что первоначально поставило под сомнение работоспособность приведенной прошивки (и в чем я, собственно, и убедился в дальнейшем).

Т.к. с МК семейства PIC, а равно как и с другими семействами МК от Microchip, я не сталкивался, проверить сей факт решено было портированием кода на платформу x51, а в качестве камня я использовал AT89S52. Как я уже сказал, код оказался неработоспособным. Перво-наперво, не без чтения мантр и танцев с бубном, мне удалось подобрать тайминги посылки, чтобы заставить магнитолу уверенно переключаться в режим управления чейнджером. Для этого достаточно отправлять посылки на трехпроводный интерфейс с периодичностью до нескольких десятков милисекунд. После, всяческими методами подбора/перебора, выяснил предназначение и диапазоны изменений байтов в посылке. А дальше — дело техники: оформил познания в виде подключаемого модуля (я работаю в среде Keil uVision3), прикрутил к проекту модули ATAPI и CDAudio (перелопаченные исходники которых выдернул с проекта A Simple 8051 based ATAPI CDROM audio controller), и в результате получилось следующее:

Фото 1. Вид спереди

Фото 2. Вид в разборе

Теперь об интерфейсе и протоколе.

Для подключения чейнджера на магнитоле имеется разъем типа DIN-8M1 (по номенклатуре «Бурого медведя»), по которому передаются управляющие сигналы, а также два аналоговых RCA-входа (тюльпаны), по которым поступает звуковой сигнал. На рисунке 1 показана распиновка управляющего разъема.

Рис. 1. Распиновка разъема CD-C

Обмен данными между CD чейнджером и головным модулем (магнитолой) Panasonic производится по двум каналам. CD чейнджер отправляет данные о состоянии по трехпроводному специализированному интерфейсу. Практически все отправляемые данные выводятся на табло-индикатор магнитолы. В свою очередь головной модуль передает информацию о нажатых клавишах в обратном направлении по однопроводному интерфейсу.

Трехпроводный интерфейс включает в себя линии тактирования, данных и стробирования. Временная диаграмма представлена на рисунке 2.

Рис. 2. Временная диаграмма протокола Panasonic CD-C

Как видно из диаграммы, данные передаются посылками по 8 байт. Период тактовых импульсов равен 8 мкс. Интервал между отдельными байтами в посылке равен 24 мкс. Интервал между посылками составляет в среднем 10 — 20 мс. Данные фиксируются по заднему фронту тактовых импульсов. Смена уровня на линии данных происходит по переднему фронту. Байты в посылке передаются в прямом порядке, от 1-го к последнему.

В таблице 1 показано распределение передаваемой информации между передаваемыми в посылке байтами. Следует отметить, что представленные данные передаются в посылках в инверсном виде, т.е. каждый байт инвертируется перед отправкой. В первом байте номер диска передается в младшей тетраде, а старшая тетрада равна 0. Байты 2-4 содержат значения в двоично-десятичном коде. В 5-м байте передается информация о включенном (1) или выключенном (0) режимах повторного воспроизведения диска (бит 3) и случайного воспроизведения треков (бит 2). В 6-м байте должно быть число из диапазона (30h — 4Fh) для активации НЧ входа чейнджера или число (A0h) для индикации команды выброса диска (символы 'Ej' на индикаторе). Назначение остальных байтов неизвестно, а их значения, указанные в таблице, подобраны экспериментально.

Таблица 1. Распределение информации между передаваемыми в посылке байтами

Данные по однопроводному интерфейсу передаются по известному протоколу NEC, широко применяемого в системах дистанционного управления на ИК-лучах в бытовой аппаратуре. Кратко напомню о механизме передачи информации и отмечу некоторые особенности этого протокола.

Согласно протоколу NEC, каждая посылка состоит из стартового бита и 32 бит данных (16 бит адреса и 16 бит команды). Стартовый бит состоит из импульса длительностью 9 мс и паузы 4,5 мс. Кодирование бит осуществляется длительностью паузы (1.6 мс для лог.1 или 0.56 мс для лог.0) между импульсами фиксированной длительности (0.56 мс). При непрерывном нажатии на кнопку, только первая посылка передается полностью. Все остальные передаются в виде стартового бита с укороченной паузой (2,25 мс) и завершающим импульсом (0.56 мс), с периодом 110 мс. Для пояснения сказанного, на рисунке 3 показана осциллограмма реального сигнала, снятого с ножки RM-DATA на разъеме «CD-C» магнитолы.

Рис.3. Осциллограмма реальной посылки (снята с контакта RM DATA)

В таблице 2 указаны значения соответствующие нажатым клавишам на панели управления головного устройства.

Таблица 2. Коды нажатых клавиш

Для включения режима «RANDOM» код клавиши равен 48B7h, при выключении передается команда 08F7h. При выключении режима чейнджера на магнитоле (например, включен тюнер), непрерывно передается команда 10EFh, которая, очевидно, используется для перевода CD-чейнджера в режим ожидания.

P.S. Вышеприведенная информация была получена мной экспериментальным путем, поэтому возможны некоторые расхождения с оригинальным протоколом от Panasonic. Также я не могу гарантировать корректной работы этого протокола на других моделях магнитол Panasonic, имеющих аналогичный вход для подключения CD-чейнджера (хотя, как мне кажется, работать будет). Я же экспериментировал на модели CQ-RG133W.

Схема устройства.

Схема устройства показана на рисунке 4.

Рис. 4. Принципиальная схема устройства

Как я уже говорил, в качестве МК выбран x51-совместимый аналог AT89S52 от Atmel, который с легкостью заменим на AT89S51, AT89S53, AT89S8253 без переделки конструкции, и даже на аналогичные МК AT89C51(52/55), при наличии параллельного программатора. В качестве привода были опробованы модели: TEAC CD-540E, LG GCR-8523B.

На элементах DD1.2,R1,C1,R5,R7,VD5 собрана схема начального сброса МК, сюда же подключена кнопка SB1, вынесенная на переднюю панель (задумывалась как средство оживления при зависаниях, но за полгода эксплуатации так и не пришлось ею воспользоваться). Поэтому кнопку можно безболезненно удалить, а при желании заодно и упростить цепь начального сброса МК. Элемент DD1.1 служит инвертором, а заодно и усилителем по току цепи RM-DATA. Опыт показал, что здесь употребимы только КМОП-инверторы (серии К155/555/531/533/1531/1533 не подходят – видимо сказывается наличие ограничивающего ток резистора 1 кОм в этой цепи в схеме магнитолы). Далее, элементы R2,R3,VD4,DD1.3 образуют детектор включения питания магнитолы. При лог.1 на выходе DD1.3 CD чейнджер переходит в дежурный режим, вне зависимости от остальных условий. Ну и элементы DD1.4,R9,R10,R12,VT2,VT3,VD6 – это усилитель тока реле К1, которое включает питание привода. Инвертор DD1.4 использован из соображений защиты от кратковременного срабатывания реле К1 при начальном сбросе МК (при подачи питания или нажатия кнопки SB1). Использование ключа VT1 для управления индикатором питания VD1 продиктовано отсутствием свободного контакта на разъеме XP3, через который, в противном случае, пришлось бы заводить линию питания (+5В) на светодиод. Ну и опять же, в процессе работы над контроллером, думал выводить через него дополнительную информацию для пользователя (типа помигивания в процессе воспроизведения), а потом, когда плату уже склепал, решил, что в принципе, можно обойтись и без миганий (ну и ладно, на первый раз и так сойдет). Защита от неправильной полярности питающего напряжения выполнена по классической схеме на FU1,VD2. Элементы VD3,L1,C2 образуют фильтр импульсных помех (в том числе высоковольтных) присутствующих в цепи бортового питания автомобиля (правда VD3 я так и не нашел, поэтому в моем устройстве он отсутствует). Остальное, думаю, понятно и без комментариев.

Пара слов о функционале, реализованном в прошивке.

Собственно, здесь мы имеем функции рядового CD плеера за исключением перемотки внутри трека: “Play” (кнопка >>), “Stop” (кнопка Disc- или Disc+), “Pause” (повторное нажатие на кнопку >> во время воспроизведения), “Prev. Track” (кнопка <<), “Next Track” (удержание кнопки >> более 1 с.), “Repeat Disc” (кнопка Repeat), “Random Play” (кнопка Random) и режим обзора диска с 20-ти секундным воспроизведением каждого трека и автоматическим переходом на следующий до последнего трека на CD включительно (кнопка Scan). В режиме обзора CD на дисплее мигает номер трека, выключается обзор однократным нажатием кнопки >>, при этом воспроизведение трека не останавливается. Также, в режиме паузы, на дисплее мигает время трека.

Рекомендации по сборке.

Вся конструкция собрана на четырех платах. На рис.5 показаны платы блока питания, разъемов Mini-DIN и RCA и плата передней панели с элементами VD1 и SB1.

Рис. 5. Рисунки плат блока питания, разъемов Mini-DIN и RCA и передней панели
Рис. 5. Рисунки плат блока питания, разъемов Mini-DIN и RCA и передней панели

Приведенная схема является усовершенствованным вариантом первой конструкции CD чейнджера, а печатная плата разрабатывалась мной только для первого варианта, а затем, прорезанием дорожек и навешиванием дополнительных деталей со стороны печатных проводников, была преобразована в вышеприведенную схему. Поэтому печатку придется разводить самостоятельно. Как пример, на рис.6 показан первоначальный вариант, который отличается наличием EEPROM 24С16 и разводкой цепей под К555ЛА3 в качестве DD1 (у К555ЛА3 и К561ТЛ2 разводка отличается).

Рис. 6. Примерный рисунок печатной платы эмулятора
Рис. 6. Примерный рисунок печатной платы эмулятора

В качестве корпуса (1) я использовал CD Box – этакая коробка в форме сейфа с ключом для хранения CD (см. рис. 7). Лишние части по высоте (2) были срезаны ножовочным полотном, к нижней половине по периметру (кроме задней части) приклеены супер-клеем направляющие (3). Задняя стенка также отрезана по высоте получившегося корпуса, в левой части сделан прямоугольный вырез под разъемы. Также к задней стенке крепится алюминиевая пластина-радиатор толщиной 4 мм. К ней прикручены стабилизаторы напряжения DA2, DA3. Привод CD-ROM установлен на шасси, вырезанном из жести (см. файл chassis.vsd из архива в конце статьи). Вот, в принципе и все, остальное смотри на фото.

Рис. 7. Разметка корпуса

Тем, кто решит только повторить сей девайс, желающие поэкспериментировать или усовершенствовать прошивку — обращайтесь на email.

Фотографии готового устройства и демонстрационное видео

Фото 3. Вид со снятыми верхней и задней крышками

Фото 4. Вид сзади

Фото 5. Конструкция задней стенки

Фото 6. Вид платы контроллера со стороны установки элементов

Фото 7. Вид в сборе с магнитолой

Фото 8. Подключение к магнитоле

Комментарии (19)

RSS свернуть / развернуть
Перебросил в аудиотехнику.

Файло можно положить сюда:
narod.yandex.ru/

или, еще лучше, создать свой dropbox и выложить файлы оттуда.
www.dropbox.com/
0
ИМХО лучше для исходников/прошивок/плат и других относительно небольших, но важных для статьи файлов обеспечить возможность хранения на сайте, а не внешних ресурсах, где они запросто могут потеряться.
0
Подумаем над реализацией.
0
Перебрось статью в блог аудиотехника. Тут ее мало кто увидит.
0
а hdd к нему возможно подключить?
+1
К чему? К данному устройству — нет, оно рассчитано на трансляцию команд управления панасониковским чейнджером в ATAPI. К магнитоле вообще — в принципе да, но придется делать полноценный интерфейс ATA (по крайней мере на чтение данных), драйвер файловой системы, декодер нужных форматов, ЦАП. В сидюке это все есть — он вообще практически законченный CD-плеер, не хватает только кнопок управления и усилка.
+1
ну кнопки управления я видел на некоторых. вплоть до паузы
+1
На некоторых, и кнопок обычно минимум. Максимум что я видел — громкость, play/pause(или next track ли, не помню уже) и eject.
Кстати, у большинства сидюков встроенный ЦАП 12-бит, что отражается на качестве.
Но в любом случае, у харда ничего этого нет и придется мутить полноценный HDD-плеер. Да и PATA харды найти все сложнее, а для SATA AFAIK потребуется и специальный контроллер. Проще взять MP3-модулятор, оторвать от него передатчик и подключить через подобный интерфейс)
+1
Проще взять MP3-модулятор, оторвать от него передатчик и подключить через подобный интерфейс)
Что я, собственно, и сделал по началу. Но мне не понравился этот вариант, т.к. модулятор постоянно заикался и зависал, я так и не понял от чего это происходило. Поэтому решил прикрутить CD-ROM, и не прогадал, он хорошо себя зарекомендовал, не запинается даже при больших и продолжительных трясках, там где промышленные магнитолы вообще не способны нормально воспроизводить AudioCD.
+1
Но как? У него же антишок отсутствует в принципе.
0
А из чего состоит этот антишок? В принципе, диск в CDROMе фиксируется хорошо, привод линзы в наличии, да и работать он должен при нехилой тряске диска на 52х, так что скорость отклика у него вполне может быть повыше. Вся механика висит в амортизирующей подвеске. Да и буфер чтения в CD-ROM здоровый, не знаю только, используется ли он для воспроизведения.
0
Да, отсутствует, но зато присутствует жесткая фиксация диска на шпинделе и отсутствие люфтов в механизме движения лазерной головки. Плюс к этому, я еще подстроил ток на лазере, до оптимального значения и результат меня самого удивил. Хотя, предварительно, проверял его тряской в руках и постукиванием корпусом об стол — ни разу не запнулся.
0
А как ты подстраивал ток лазера, точнее как определил оптимальный?
0
Давно искал подобную инфу. Спасибо за статью, очень подробно все расписано
0
Весьма грамотный кодинг, автору респект.
0
Кто может поделится этой схемой? То что выложено на сайте вообще не читаемо.
0
Народ, а прошивка у кого-то осталась?
Заранее спасибо.
0
Попробуй автору в личку написать. Заодно намекни, что можно теперь проект прямо тут, в сообществе приаттачить.
0
Спасибо, написал.
0
Если получишь результат — поделись.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.