Делаем стационарный MP3 плеер из старого компьютера своими руками

Любимая музыка может поднять настроение, сделать пасмурный день не таким мрачным, развеять тяжелые мысли. Наверное, поэтому мы так часто видим на улице, в метро или в автобусе, в очереди в магазине людей в наушниках. Можно с уверенностью сказать, глядя на них, что они редко расстаются со своим увлечением, где бы они ни были. Предосторожение врачей о возможной глухоте тоже мало кого пугают. Больше беспокоит: на сколько хватит батареек, какое максимальное количество песен можно взять с собой (в дорогу); важен и размер плеера или приемника. С появлением портативных цифровых устройств воспроизведения звука многие беспокойства сошли на нет. Габариты и масса современных плееров практически незаметны и не стесняют движений, без лентопротяжного механизма энергии батарей хватает надолго, а совершенствование технологий аудиосжатия сделало возможным хранение музыки без потери качества в меньшем объеме памяти. Разработке собственного МР3-плеера и посвящена эта статья.

Проектирование такого устройства, как плеер, объединившего в себе дюжину «ноу-хау», на первый взгляд, может показаться просто невозможным. Но если воспользоваться опытом и репутацией специалистов в этом вопросе, то все окажется намного проще и яснее в достижении поставленной цели.

Разработчики компании VLSI (www.vlsi.fi) предлагают однокристальное решение для создания МР3-плеера — микросхему VS1001k.

VS1001k понимает все известные и наиболее популярные алгоритмы аудиосжатия MPEG — 1, 2 Layers I, II, III, а также так называемые MPEG 2.5 Layer III файлы с любой типовой скоростью и частотой дискретизации, поддерживается также и переменная скорость VBR (Variable Bitrate).

Микросхема состоит из быстродействующего сигнального процессора VS_DSP с низким потреблением мощности (см. рис. 1), 4 кбайт памяти для служебных программ и 0,5 кбайт — для пользовательских, двух последовательных интерфейсов типа SPI (разработана и впервые применена фирмой Motorola). Управление схемой декодирования реализовано через SCI-интерфейс, прием цифровых данных через SDI. Кроме того, микросхема содержит быстродействующий сигма-дельта стерео-ЦАП и стереоусилитель для подключения наушников.

Для корректной работы микросхемы необходим управляющий микроконтроллер. VLSI рекомендует AT90S4414 фирмы Atmel, хотя можно использовать и любой другой. В функции микроконтроллера входит выдача последовательных цифровых данных по запросу VS1001K, их синхронизация, выдача управляющих сигналов, также синхронизированных.

VS1001k производится в корпусах SOIC-28 и BGA-49 (рис 2). Первый тип корпуса удобен для макетирования и ручной сборки, второй — для серийного производства.

Для того чтобы разобраться, как в действительности работает это устройство, рассмотрим схему (рис. 3). На ней наглядно представлены этапы прохождения исходных данных через структурные блоки микросхемы. Направление движения звуковых данных может изменяться в зависимости от более точных настроек, которые доступны для управления через систему регистров. Механизм настройки мы рассмотрим немного позже.

Данные могут поступать в микросхему через шину данных SDI (предназначенную для этого) и шину управления. Второй способ исключает прохождение потока данных через декодер MP1/2/3, при этом поток данных представляет собой 16-разрядный линейный (оцифрованный) код, SM_DAC = 1. Если мы подаем на вход SDI полноценный mp3-файл, то SM_DAC необходимо выставить в 0. Затем звук проходит через простенький эквалайзер. На этом этапе можно либо увеличить уровень низких частот (SM_BASS = 1), либо уменьшить его (SM_BASS = 0). SM_DAC и SM_BASS — это 5 и 7 биты регистра MODE (см. п. Интерфейс SCI).

Специалистами VLSI была предусмотрена возможность вносить изменения в звуковой поток при помощи пользовательской программы, для которой выделено 0,5 кбайт в памяти микросхемы. Такое дополнение к функциональности позволяет реализовывать собственные фильтры, накладывать различные эффекты (например, эхо или реверберацию). При A1ADDR, установленном в ноль, данные не попадают в блок User Application, а попадают сразу на вход блока контроля громкости. В том случае, когда разработчик использует собственную программу, этот регистр должен быть равен адресу начала программы.

Буфер FIFO предназначен для того, чтобы своевременно выдавать данные на ЦАП с частотой, равной частоте дискретизации.

Интерфейс SCI

SCI — последовательный двусторонний интерфейс, обмен информации осуществляется 16-разрядными словами. Каждый сеанс чтения-записи позволяет обратиться только к одному из регистров микросхемы.

Код чтения-записиАдрес регистраЧтение-запись значения

На рис. 4, а изображены диаграммы уровней сигналов на выводах SCI-интерфейса при чтении и записи соответственно. Операции чтения и записи определяются 8-битным кодом, за которым следует адрес регистра, и, если мы говорим о чтении, то на выводе SO снимаем с побитовой синхронизацией SCK значение данного регистра. При записи в регистр после его адреса следует его новое значение (рис. 4, б). Для чтения код равен 0000 0011 (0x3h), для записи 0000 0010 (0x2h). После каждого приема-передачи должна следовать пауза в 500 микросекунд.

Как уже было сказано ранее, настройка микросхемы осуществляется через регистры. Все они перечислены в таблице 1.

Таблица 1

Регистры располагаются в X-памяти (см. структурную схему) начиная с адреса 0x4000…0x40FF. При сбросе все регистры устанавливаются в нули.

Макет

Прежде чем переходить к коду, есть смысл собрать макет устройства (я вообще поклонник отладки программ на реальном железе). Берем плату Blue Pill и подпаиваем к ней модуль дисплея с картодержателем. Пайка позволяет нам не сталкиваться с проблемой дребезга соединений, которая может доставить много неприятностей на этапе отладки.

Тестовый модуль для VS1011 я собрал на макетке, использовав переходник с QNF48 на DIP, схему которого я посмотрел в даташите. На самом деле так заморачиваться необязательно — можно взять готовый модуль. Но у меня его не было, а ждать не хотелось.

В итоге я все это собрал за несколько часов и был готов переходить к коду.

Установка частоты дискретизации

VS1001k позволяет проигрывать звуковые файлы с максимальной возможной частотой дискретизации 48000 Гц. При этом задающий генератор (речь идет о кварцевом или диэлектрическом резонаторе) должен работать на частоте не менее 24,576 МГц, именно эта частота рекомендована для микросхемы. Если частота генератора меньше, уменьшается и частота дискретизации. Для ее расчета можно воспользоваться формулой:

Как видно из выражения, при рекомендуемой частоте результат равен 48000. От частоты генератора напрямую зависит производительность DSP-процессора. В таблице представлена зависимость качества звука (скорость звукового потока и частоты дискретизации) и задающей частоты:

Эти значения соответствуют алгоритму декомпрессии, при котором частота дискретизации остается постоянной. В случае декомпрессии с переменной частотой скорость потока может увеличиваться.

При использовании нестандартной частоты генератора до начала проигрывания необходимо записать в параметр CLOCKF значение, рассчитанное по формуле:

При низких задающих частотах (ниже 15 МГц) микросхема позволяет удвоить ее. Для этого необходимо установить самый старший бит регистра в единицу, то есть для 14 МГц справедливы следующие вычисления:

Смотрите также

Комментарии 48

А я не парюсь с подключением мобилы к фм…я купил навигатор- регистратор-хэндз фри(типа звонить с него могу)-фм тюнер(там же мп3 плеер)-монитор для камеры заднего вида-игры и видео смотреть можно…все это в одном мульти навигатора.ПРЕСТИЖИО НАЗЫВАЕТСЯ.

www.aliexpress.com/item/C…3-S4-Free/1242997387.html вот такой жене купил. качество звука очень хорошее (в магазинах брал пробовать — помеха на помехе) да еще и блюпуп есть, который очень неплохо работает (как гарнитура)

не уверен я насчет качества. если есть аукс, то проще купить блютуз гартинуру с одельным входом на наушники и присобичить ее, источник — телефон будет скорее всего меньше жрать, да и качество будет получше так как минимум мы избегаем пробразования из цифры в аналог и обратно

в том то и соль, что аукса нет

Lenovo A789 точно с трансмиттером, новые уже идут без него.

Ты на какую машину и магнитолу хочешь?Может лучше вот такую штуку купить yatour.su/ подключается к большинству штатных магнитол, имитирует CD-чейнджер, качество звука как с диска.+получаешь ещё и AUX

Как вариант. тоже себе хочу заказать. только цена не маленькая)))

я всегда говорю, цена забудется ощущения останутся))

Astra H, но его скоро менять буду на недолгое время не охота что то покупать глобальное

Можно, если это нокия н8… качество на высоте. Наверняка еще есть модели или через аукс (я так и делаю)

у меня была N8, никакого качества передачи нет. Это так, если видеоролик посмотреть или игру со звуком в машине, а музыку слушать через него это гонево, во первых качество ужасное, во вторых громкость гораздо ниже.

посмотри в линейке смартов от Lenovo, они на андроиде у меня Р700, там фм-трансмиттер идет только в китайской версии прошивки, я рутовала смарт и ставила его отдельно, на 4пда все есть. Может быть сейчас в их новых смартах трансмиттер уже идет и в нашей прошивке. Но даже если и так — то надо спрашивать у юзеров — как работает. Потомучто с моего телефона работал очень тихо и сложно было поймать волну — передатчик очень слабый, а антенна то на попе у машины ) в общем, погугли че как щас

посмотри в линейке смартов от Lenovo, они на андроиде у меня Р700, там фм-трансмиттер идет только в китайской версии прошивки, я рутовала смарт и ставила его отдельно, на 4пда все есть. Может быть сейчас в их новых смартах трансмиттер уже идет и в нашей прошивке. Но даже если и так — то надо спрашивать у юзеров — как работает. Потомучто с моего телефона работал очень тихо и сложно было поймать волну — передатчик очень слабый, а антенна то на попе у машины ) в общем, погугли че как щас

у меня планшет lenovo A3000 но о трансмиттере не слышал есть только обычное радио.

по планшетам ваще ниче не знаю, говорю о том, что делала сама

иногда обычный приемник радио называют трансмиттером.

да что ж вы меня — совсем за идиотку держите?! )))

Да что вы как можно. )))

В принципе если есть приемник радиоволн то он может быть и передатчиком кто в этом шарит?

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

Подача тона на выход

Последовательность 0x53 0xEF 0x6E n генерирует синусоиду, поступающую на выход устройства. Параметр n может принимать значения от 48 до 119. Параметры тестового сигнала определяются по формулам:

И таблицам:

Авторы надеются, что в этой статье достаточно внимания было уделено знакомству с особенностями проектирования MP3.

Несколько слов о непосредственном включении VS1001k. Как показано на рис. 5, для управления VS1001k требуется 8 входов-выходов микроконтроллера.

При некоторых ограничениях это количество можно снизить до 6, как показано на рис. 6.

Чтобы такая схема работала, необходимо выполнение трех условий:

  • MISO и GIO2 должны быть запрограммированы как входы, остальные — как выходы;
  • когда SPI находится в неактивном состоянии, синхронизация SPI должна быть такой, как показано на осциллограмме (рис. 7);
  • Если шина SPI недоступна, но микроконтроллер достаточно быстр, для организации сигналов MISO, MOSI и SCK могут быть использованы общие входы-выходы микроконтроллера.

В этой схеме GIO1 осуществляет выбор шины. Если он установлен в 1, XCS не активен, и тактовый сигнал SCK поступает через логический элемент «И» на вход DCLK. Таким образом, данные посланы шине SDI. Когда GIO1 установлен в 0, XCS активизируется, и синхронизация DCLK прекращается. Теперь данные поступают на шину SCI.

Например, требуется установить уровень громкости –2 дБ для левого канала и –3,5 дБ для правого канала. Для этого мы должны записать 0x0407 в регистр VOL [1, стр. 50]:

  • активизируем интерфейс SCI, устанавливая GIO1 в 0;
  • записываем четыре байта (0x2, 0xb, 0x4, 0x7) в SCI;
  • заканчиваем передачу данных по шине SCI, устанавливая GIO1 в 1.

Для приема данных по шине SCI, в частности, для чтения содержимого регистра VOL необходимо:

  • активизировать интерфейс SCI, GIO1 — в 0;
  • записать два байта (0x3, 0xb) в SCI;
  • записать один байт с любым содержимым в SCI. Прочитать содержимое регистра MISO микроконтроллера, который содержит теперь восемь старших битов результата;
  • записать один байт с любым содержимым в SCI. Прочитать содержимое регистра MISO микроконтроллера, который содержит теперь восемь младших битов результата;
  • объединить старшие и младшие биты для получения 16-разрядного слова;
  • закончить обмен данных по шине SCI, GIO1 — в 1.

Чтобы отправить MP3-данные к VS1001k, нужно воспользоваться следующим алгоритмом:

  • ждем, когда активизируется DREQ (1);
  • активизируем DCLK, GIO — в 1.
  • для каждого байта делаем следующее: устанавливаем BSYNC в 1;
  • активизируем передачу по SPI;
  • ждем, пока по крайней мере первый бит данных будет отправлен, а последний бит данных — нет;
  • устанавливаем BSYNC в 0;
  • ждем окончания SPI-цикла микроконтроллера для завершения процедуры.

Три сигнала (сверху вниз) изображены на рис. 7: DCLK (желтый), SDATA (голубой) и BSYNC (розовый). BSYNC сначала активен. Данные посланы и прочитаны VS1001k по фронту тактового сигнала DCLK. Переданное число, показанное на осциллограмме, — 0b01000101 или 0x45. Используемая тактовая частота — 1 МГц, потому что это максимально возможное значение, которое может предложить используемый микроконтроллер.

На осциллограмме рис. 8. продемонстрирована посылка тестовой команды SDI. Здесь переданы восемь байтов: 0x45 0x78, 0x69, 0x74, 0x0, 0x0, 0x0, 0x0. Эта последовательность тестирует синусоидальный выход VS1001k [1, стр. 35]. Обратите внимание, что задержка между последовательными байтами обусловлена низкой производительностью управляющего микроконтроллера и для самого VS1001k не нужна.

В заключение хочется отметить, что использование VS1001k не ограничивается созданием МР3-плейера. VS1001k может быть также полезен для создания любых бытовых устройств и высокотехнологичных игрушек с функциями воспроизведения речи.

Смотрите также

Комментарии 48

А я не парюсь с подключением мобилы к фм…я купил навигатор- регистратор-хэндз фри(типа звонить с него могу)-фм тюнер(там же мп3 плеер)-монитор для камеры заднего вида-игры и видео смотреть можно…все это в одном мульти навигатора.ПРЕСТИЖИО НАЗЫВАЕТСЯ.

www.aliexpress.com/item/C…3-S4-Free/1242997387.html вот такой жене купил. качество звука очень хорошее (в магазинах брал пробовать — помеха на помехе) да еще и блюпуп есть, который очень неплохо работает (как гарнитура)

не уверен я насчет качества. если есть аукс, то проще купить блютуз гартинуру с одельным входом на наушники и присобичить ее, источник — телефон будет скорее всего меньше жрать, да и качество будет получше так как минимум мы избегаем пробразования из цифры в аналог и обратно

в том то и соль, что аукса нет

Lenovo A789 точно с трансмиттером, новые уже идут без него.

Ты на какую машину и магнитолу хочешь?Может лучше вот такую штуку купить yatour.su/ подключается к большинству штатных магнитол, имитирует CD-чейнджер, качество звука как с диска.+получаешь ещё и AUX

Как вариант. тоже себе хочу заказать. только цена не маленькая)))

я всегда говорю, цена забудется ощущения останутся))

Astra H, но его скоро менять буду на недолгое время не охота что то покупать глобальное

Можно, если это нокия н8… качество на высоте. Наверняка еще есть модели или через аукс (я так и делаю)

у меня была N8, никакого качества передачи нет. Это так, если видеоролик посмотреть или игру со звуком в машине, а музыку слушать через него это гонево, во первых качество ужасное, во вторых громкость гораздо ниже.

посмотри в линейке смартов от Lenovo, они на андроиде у меня Р700, там фм-трансмиттер идет только в китайской версии прошивки, я рутовала смарт и ставила его отдельно, на 4пда все есть. Может быть сейчас в их новых смартах трансмиттер уже идет и в нашей прошивке. Но даже если и так — то надо спрашивать у юзеров — как работает. Потомучто с моего телефона работал очень тихо и сложно было поймать волну — передатчик очень слабый, а антенна то на попе у машины ) в общем, погугли че как щас

посмотри в линейке смартов от Lenovo, они на андроиде у меня Р700, там фм-трансмиттер идет только в китайской версии прошивки, я рутовала смарт и ставила его отдельно, на 4пда все есть. Может быть сейчас в их новых смартах трансмиттер уже идет и в нашей прошивке. Но даже если и так — то надо спрашивать у юзеров — как работает. Потомучто с моего телефона работал очень тихо и сложно было поймать волну — передатчик очень слабый, а антенна то на попе у машины ) в общем, погугли че как щас

у меня планшет lenovo A3000 но о трансмиттере не слышал есть только обычное радио.

по планшетам ваще ниче не знаю, говорю о том, что делала сама

иногда обычный приемник радио называют трансмиттером.

да что ж вы меня — совсем за идиотку держите?! )))

Да что вы как можно. )))

В принципе если есть приемник радиоволн то он может быть и передатчиком кто в этом шарит?

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

Комплект отладки

В комплекте отладки VS1001 KIT, изображенном на рис. 9, для решения этой задачи использован контроллер USB PDIUSB12 фирмы Philips, хотя в отечественных условиях для этого проще использовать микросхемы FT245BM фирмы FTDI или USBN9603 от National Semiconductor. На печатной плате комплекта отладки размещена также ПЛИС XCR3064XL фирмы Xilinx, основная задача которой состоит в генерации сигнала BSYNC — синхронизация байтов для VS1001k. Но эту задачу, как указано в технической документации, может успешно выполнять и управляющий микроконтроллер.

Дополнительно к уже описанным компонентам комплект отладки содержит разъем USB-B для подключения к ПК, разъем для подключения ММС-карты на 8 или 16 Мбайт (куда записываются MP3-файлы), 5 кнопок управления (увеличение-уменьшение громкости, перемотка, пауза), разъем для подключения наушников. Плата может работать как MP3-плеер через USB либо автономно (при этом требуется обеспечение внешнего питания +5… +7 В). К VS1001 KIT прилагается также дискета с программным обеспечением, которое включает в себя полную техническую документацию на микросхему, драйверы под Windows 98/2000 и инструкции по программированию USB-драйвера.

Шаблон будущей программы

Прежде чем писать основные функции, полезно инициализировать дисплей и клавиатуру. Про дисплей я уже говорил выше, а клавиатура четыре на четыре кнопки у меня осталась от макета телефона.

В исходнике ниже — стандартные заголовочные файлы, функции инициализации периферии, функции инициализации дисплея и клавиатуры и в конце вывод строчки Hello world.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]