Сразу скажу, что я сам недавно узнал, что такое SPDIF. Начну с того, что есть у меня телевизор и домашний кинотеатр не малоизвестной марки Philips. Кинотеатру моему уже без малого 13 лет, а телек помоложе, ему 9. Суть в том, что цифровое кабельное телевидение уже сегодня передает некоторые каналы цифрового формата со звуком 5.1, но обозначается он как Dolby Digital 3/2 и чтоб с полна, ощутить на себе атмосферу транслируемого кинчика или мультфильма, решено было передать это звучание на кинотеатр. Самым оптимальным вариантом для меня это было соединение коаксиальным кабелем через Digital Audio.
Вот он с обратной стороны кинотеатра
Полный размер
фото не мое
На телеке такой же разъем, но уже с надписью OUT
Полный размер
Купил я обычный коаксиальный (телевизионный) кабель по 16 руб.за 1 м, я взял 3,5м, забрал просто остатки чтоб не резать. Кстати кабель должен быть с волновым сопротивлением 75 Ом, подобный кабель можно купить ЗДЕСЬ
Оптический аудио декодер звука с оптики SPDIF в rca аналоговый звук 5.1ch. ТЕСТЫ И ПОДКЛЮЧЕНИЕ
Полный размер
Полный размер
вот маркировка кабеля
Валялись у меня разъемы RCA (тюльпаны) в гараже, на вид тоже вроде не плохие, но в продаже я таких не видел.
Полный размер
срезал с какой то музыкальной косы
И начал паять, хоть я и не профессионал, даже не скажу что любитель, даже местами рукожоп.
Полный размер
тетке нравится
Полный размер
В итоге получил 3,5 метровый коаксиальный кабель для передаче цифрового сигнала за 56 рублей. Такой кабель в красивой коробочке в магазине будет стоить в десятки раз дороже.
Полный размер
Полный размер
ранее телек был подключен просто двумя тюльпанами
А на самом деле, почему я это затеял, а потому что заказал ТВ приставку на андройде Xiaomi Mi Box 3, соответственно для просмотра качественных фильмов с хорошим звуком передача цифры просто необходима, а пока она летит из Китая в нашу Великую страну, я буду смотреть фильмы по кабельному.
Короче не переплачивайте за различные красивые коробочки и шильдики, есть интернет, значит будет и знание и опыт, не бойтесь экспериментировать. Даже если у меня чего то не получается, я не останавливаюсь, пока руки целы и глаза еще видят.
Дополнение: Почитав комментарии к посту, я понял, что не до конца ознакомился с темой. Видимо можно не заморачиваться и подключить цифровой сигнал обычным шнуром с тюльпанами. Но пока я не создал этот пост, я наверно так и не узнал. Спасибо всем за комментарии, рад был даже кого то повеселить своим тусклыми знаниями, но каждый в чем то ветеран, а в чем то и полный ноль.
Получаем звук 5.1 на домашнем кинотеатре через HDMI или Spdif подключенный к ТВ или ТВ+ПК
Источник: www.drive2.ru
Цифровой выход S/PDIF на FPGA
Сегодня я расскажу о протоколе передачи цифрового звука по интерфейсу S/PDIF и покажу, как его можно реализовать на FPGA с использованием языка описания Verilog HDL.
Я новичек в мире FPGA, поэтому приведенные коды на Verilog могут быть неоптимальными. Строго не судите.
S/PDIF разработан на основе профессионального стандарта AES/EBU, но отличия несущественны и, как мы увидим далее, заключаются лишь в «ином» значении сервисных битов. Разъемы тоже отличаются, но это уже чисто маркетинговые игры.
S/PDIF (IEC 958) первоначально применялся в CD/MiniDisc плеерах, но впоследствии его стали использовать в качестве основного способа соединения аудио компонентов. S/PDIF чисто цифровой интерфейс, поддерживающий одностороннюю передачу данных. В качестве среды передачи используется либо коаксиальный кабель, либо оптический.
S/PDIF поддерживает разные частоты дискретизации. Для того, чтобы по одному кабелю передать и данные и тактовый сигнал, используют Biphase Mark Code (Манчестерское кодирование) – разновидность фазовой модуляции.
Посмотрите на пример ниже:
Как видите, логическая единица кодируется двумя фронтами («переходами через ноль»), а логический ноль — одним.
Для синхронизации используются специальные последовательности ячеек (cells), называемые Заголовками (Preamble).
Данные передаются блоками, каждый блок разделен на 192 кадра, кадр делится на два (если канала два) суб-кадра — по одному на канал. Я изобразил структуру на рисунке:
Каждый суб-кадр начинается с заголовка для синхронизации. Заголовки бывают 3-х типов — B, W и M заголовки. Блок всегда начинается с суб-кадра с B-заголовком, который содержит информацию канала А (левого). M-заголовок также маркирует суб-кадр с информацией о канале А (левом), но никогда не является началом блока. W-заголовок маркирует суб-кадр с информацией о канеле Б (правом), в случае, если каналов больше двух, то W-заголовок может маркировать другие каналы, но только не канал А.
Подскажите, как по-нашему сказать «cell». Понятно, что прямой перевод — ячейка. Но как-то это не звучит. Поэтому я так и буду называть их — cells.
- Бит V – Validity. Бит корректности. Если он взведен, то ресивер не должен использовать этот сэмпл.
- Бит U – User data. Тут содержится какая-либо Manufacturer-specific информация.
- Бит C – Channel status. См. Ниже.
- Бит P – Бит четности. Вычисляется для текущего сэмпла вместе с битами V/U/C.
Оставшиеся биты зарезервированы.
Теперь давайте создадим передатчик S/PDIF. Реализовать его на микроконтроллере в принципе можно. Но в данном случае мы имеем критичное к времени выполнения приложение, и возникшее в неудобный момент прерывание приведет к сильному увеличению джиттера (дрожанию фазы). Поэтому такие задачи лучше всего реализуются на FPGA, что мы и будем делать.
При реализации я не ставил перед собой цель создать полноценный S/PDIF трансмиттер, учитывающий все особенности, поэтому допустил ряд упрощений (конечно на работоспособность это не повлияло). Я хотел показать, насколько просто подобные задачи реализуются в железе и как производители за такие (как оказалось) элементарные функции накручивают цену на конечные продукты.
В качестве языка описания используем Verilog HDL.
Я буду использовать плату от TerasIC Technologies DE2-115 с Cyclone IV FPGA на борту. В качестве источника выступает плеер сотового телефона, аналоговый сигнал будет оцифрован кодеком WM8731, который установлен на этой плате.
Кодек отдает оцифрованные данные по интерфейсу I2S, а конфигурируется по шине I2C. В этой статье я не буду описывать работу с этим кодеком и процедуру извлечения данных левого/правого каналов (i2s de-serializer), так как это материал отдельной статьи.
Частоту дискретизации выберем 48 кГц, разрядность сэмпла 16 бит.
Теперь надо придумать, как мы будет выводить кодированный поток SP/DIF. Паять что-либо мне неохота, поэтому я выбираю оптический способ. А в качестве оптического трансмиттера я буду использовать самый обычный красный светодиод на плате. Да-да, вы не ослышались — обычный светодиод. Они прекрасно работают на мегагерцовых частотах!
Тактовая частота генератора S/PDIF равна 2 * 64 * 48 000 = 6.144 МГц. Несущая — 3.07 МГц.
Итак, какие сигналы будут у модуля:
- Вход тактовой (несущей) частоты;
- Данные левого канала (16 бит);
- Данные правого канала (16 бит);
- Выход — запрос новых сэмплов;
- Выход кодированного сигнала BMC.
module spdif_out (clock, left_in, right_in, next, spdif);
Создадим два счетчика, один 6-битный будут переполняющийся от 0 до 63 — счетчик битов в суб-кадре. И второй 9-битный от 0 до 383 — счетчик суб-кадров в блоке.
Счетчик суб-кадров будем увеличивать на заднем фронте тактового сигнала. При обнулении счетчика битов (начало нового суб-кадра) будем формировать этот самый кадр в 64-х битном векторе subFrame.
Сервисный бит Channel status оставим в покое, пусть они будут равны 0 для всех суб-кадров. Ресивер не обидится, просто поток будет с «пометкой» защиты от копирования.
Теперь организуем выбор каналов. Смотрите, если суб-кадр нечетный, то это левый канал (А), а если четный — правый (Б).
// сэмпл wire [15:0] sample = subFrame_cnt[0] ? left_in : right_in;
// заголовок суб-кадра (B — M — W Preamble) wire [7:0] preamble = (subFrame_cnt == 9’d383) ? 8’b10011100 : (subFrame_cnt[0] ? 8’b10010011 : 8’b10010110);
Поговорим немного о том, как лучше всего организовать BMC кодирование. Есть такой метод, который, если я не ошибаюсь, называется NRZI (Non-Return-to-Zero Inverted), когда лог. единица кодируется изменением уровня, а 0 — без изменений. Для простоты давайте рассмотрим пример.
Пусть нам надо «закодировать» два бита 0 0. Мы разрядим их единицами и получим последовательность 1010. Теперь, последовательно выпоняем операции инвертирования над значением последней cell. Берем старший бит из нашей последовательности 1010. Если он имеет значение 1, то инвертируем предыдущий cell, если 0, то оставляем, потом делаем то же самое со следующим битом. Получаем:
Инвертирование проще выполнять операцией исключающее или:
Теперь согласно выбранному алгоритму и формату суб-кадра нужно собрать 64 бита воедино.
// собираем суб-кадр subFrame = ; // V U C P
Бит четности вычисляется так:
// вычисление бита четности parity = sample[0] ^ sample[1] ^ sample[2] ^ sample[3] ^ sample[4] ^ sample[5] ^ sample[6] ^ sample[7] ^ sample[8] ^ sample[9] ^ sample[10] ^ sample[11] ^ sample[12] ^ sample[13] ^ sample[14] ^ sample[15];
И теперь приведу код полностью:
Ниже я приведу захваченные анализатором три суб-кадра (начало блока) с работающего устройства:
Приложен в полном размере.
Синтезируем и заливаем в плату. В качестве ресивера выступит Yamaha RX-V2500. Оно работает — смотрим видео на YouTube!
Источник: we.easyelectronics.ru
Конвертер S/PDIF в аналоговый стерео-сигнал.
Кратко: преобразовывает цифровой S/PDIF 24хбитный сигнал 32, 44.1,48 или 96КГц, полученный по оптоволоконному (TosLink) или по коаксиальному кабелю в аналоговый стерео-сигнал. Устройство работает, свою функцию выполняет, если требуется, можно брать.
А теперь более подробно:
Несколько лет назад я по случаю купил довольно дешево БУ плазменный телевизор. Но весной этого года он, к сожалению, сломался. Причем сломался так, что восстановить его работоспособность фактически невозможно (умер процессор, замену можно найти разве что в аналогичном «доноре»). И пришлось мне покупать новенький телевизор, на этот раз уже ЖК.
Походив по магазинам, пошерстив интернет, выбрав подходящую модельку, новый телевизор занял место старого на кронштейне (хорошо, что VESA все таки какой никакой, но все таки стандарт ).
И тут выяснилась одна маленькая деталь, которую я процессы выбора подходящей модели как то не учел: аналоговый стерео-звук с нового телевизора можно получить только с разъема для наушников, при подключении в который отключаются встроенные динамики.
Дело в том, что я люблю перед сном повтыкать недолго в зомби-ящик, на всякие там дискавери и анимал-планеты. И что бы при этом не мешать спокойному сну моих домашних, много лет назад были приобретены радионаушники. Тем более что в старой плазме, аналогично более старым, «кинескопным» телевизорам, сзади были расположены RCA-разъемы (тюльпаны) для вывода аналогового звука.
А вот с новым телевизором приходилось перед сном подключать наушники в разъем 3,5мм miniJack, а днем потом их отключать. А это было весьма неудобно. Только представьте: берете вы вечером пульт, включаете телевизор что бы посмотреть новости и узнать, что творится в мире, и тут оказывается что с вечера наушники остались подключенными, и вам приходится вставать с уютного дивана, подходить к телевизору что бы отключить наушники. Надо было с этим что то решать.
И таким решением было использовать имеющийся на телевизоре оптический цифровой выход. Но наушники у меня хотят на входе получать аналоговый сигнал. Значит нужен ЦАП (Цифро-аналоговый преобразователь). Он же DAC, Digital-to-analog converter.
Проверив эту мысль с помощью старенькой MD-деки, одно время я так и слушал ночью телевизор: подключив toslink-кабелем деку, ставим её на запись (благо она пультованная), и на её выходных RCA-разъемах получаем нужный радио-наушникам аналоговый стерео-сигнал. Попутно я начал неспеша подыскивать вариант решения без использования MD-деки в качестве ЦАПа. Ведь дека и электричества потребляет больше, и по размерам больше, и включается хоть и с пульта, но отдельно, да и не место ей в спальне у телевизора, её место в стойке с другой аппаратурой.
И на Dealextreme был выбран подходящий под мои требования DAC. А именно:
питания от 5ти вольт (в новом телевизоре есть USB разъем)
оптический цифровой вход (toslink)
аналоговый стерео выход
Из многих подходящих под мои требования был выбран самый дешевый (вот кто мне скажет, чем он отличается от этого или этого и даже этого ?), положен в корзину, оплачен, получен на почте… Ну это вы и так знаете.
Процесс распаковки в картинках
Приехало вот в такой невзрачной коробке, без каких либо опознавательных знаков или надписей.
Внутри лежал сам ЦАП
под ним блок питания
и небольшая инструкция
блок питания с вилкой, как ранее бы сказали «наиболее предполагаемого противника»,
и следующими параметрами
входное: 100-240В, переменный ток, 50/60Гц, 0,15А,
выходное: 5В, постоянный ток, 1А (сильно сомневаюсь)
Рассмотрим наш ЦАП поближе?
Общий вид
входы и индикатор питания
выходы и разъем питания
обратная сторона
Разбирать не стал, так как сразу после фотосессии устройство было подключена на свое место и задействовано. После опробования работоспособности и замеров потребляемого тока (который не превышал 100мА), я ампутировал от блока питания кабель, скрестил его при помощи паяльника с огрызком USB кабеля. Теперь ЦАП питается от USB-разъема телевизора, включаясь и выключаясь вместе с ним.
P.S. Наглая рыжая морда отказалась позировать с ЦАПом.
P.S. Наглая рыжая морда отказалась позировать с ЦАПом.
Планирую купить +15 Добавить в избранное Обзор понравился +14 +25
- 06 ноября 2013, 05:40
- автор: Rimlyanin
- просмотры: 24431
Источник: mysku.club