MIC-RON.RU

В помощь радиолюбителю

 

 

Портативный MP3 плеер. EE 476 Окончательный проект

Peter D'Antonio
Daniel Riiff

Введение

В последние годы формат сжатия музыки MPEG уровня 3 (MP3) становится чрезвычайно популярным для цифровой аудио компрессии. Высокая степень сжатия и близкое к CD качество звука делают его логичным выбором для хранения и распространения музыки, особенно в Интернете, где пространство и пропускная способность являются важными соображениями. Как результат популярности MP3 , множество разнообразных портативных MP3 плееров было выпущено на рынок в попытке извлечь выгоду из потребности в портативной, высококачественной музыке. В 1999 году более 1,5 миллионов портативных MP3 плееров было продано по всему миру, и исследование показало продажу более 30 миллионов устройств в год в 2005 году. Мы решили разработать и собрать портативный MP3 плеер, подобный доступным в продаже, в настоящее время (т.е. Diamond Rio, Creative Labs Nomad и т.д.).

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

Конечная схема с управляющими кнопками (спереди справа), микроконтроллер (спереди слева), мультимедиа карта (флеш) (в середине слева) и плата декодера/ЦАП (золотистая плата сзади)

Конечная схема с управляющими кнопками (спереди справа), микроконтроллер (спереди слева), мультимедиа карта (флеш) (в середине слева) и плата декодера/ЦАП (золотистая плата сзади)

Разработка на высоком уровне

Мы используем ATMEL AT90S8535 микроконтроллер, чтобы управлять компонентами и потоком данных.

Наша разработка поддерживает стандартный формат файлов MP3 с битрейтом 128 килобит в секунду. Чип декодера поддерживает битрейты от 8 до 320 килобит в секунду, но мы решили, что будет проще сначала реализовать поддержку одного битрейта, а затем расширить возможности устройства для поддержки других битрейтов. Наш декодер требует, чтобы входящий поток бит был эквивалентен декодированному потоку бит (128Кбит/с). Поскольку наша карта памяти имеет время задержки 1,5 миллисекунды и декодер имеет буфер в 256 байт, мы решили посылать данные блоками по 256 байт. При потоке в 128Кбит/с, 256 закончатся за 16 миллисекунд, и потребуется новый блок данных. Слабым местом данного метода было недозаполнение/переполнение буфера. Мы предотвратили это, полностью заполняя буфер перед запуском декодирования. Как только декодирование запущено, блок запрашивается каждые 16 миллисекунд, однако первый запрос будет послан через 8,5 миллисекунд после запуска декодирования, чтобы гарантировать, что буфер никогда не превысит 250 байт и оставит нам 7 миллисекунд, для запроса и приема блока данных. Эти вычисления продуманы банально и остаются как домашнее задание читателю.

Управляющие кнопки используются для управления плеером. Четыре функции реализованы на четырех кнопках: проигрывание, стоп, следующий трек, предыдущий трек.

Разработка Схемы/Программы

Детали, использованные в этом проекте:

  • ATMEL AT90S8535

  • ST MicroElectronics STA013 (MP3 декодер)

  • Crystal/Cirrus Logic CS4331 (18 последовательный ЦАП)

  • SanDisk Multimedia Card (16MB последовательная флеш карта)

  • 10 MHz кварцевый резонатор для декодера

  • 4 MHz генератор для микроконтроллера

  • Функциональный генератор (заменяемый генератором 11.2896MHz)

  • резисторы, конденсаторы, биполярные транзисторы, диоды и разъемы

Схема

Согласование логических уровней

Все компоненты, используемые в устройстве, питаются напряжением 3,3 вольта, за исключением микроконтроллера, на него подается напряжение 5 вольт. По этому между микроконтроллером и остальным устройствам должны быть согласователи логических уровней. Однонаправленные линии используют следующие схемы для согласования уровней:

Шаг вверх (3,3 ->5 вольт)

http://www.rlocman.ru/i/Image/2009/05/17/5.jpg

Шаг вниз (5 ->3,3 вольта)

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

Интерфейсы

Мультимедийная карта (MMC) использует интерфейс SPI для управления картой и передачи данных. Это четырех проводный интерфейс: SS, SCLK, MOSI и MISO. Чтобы послать команду карте, пользователь должен установить низкий уровень SS, поместить данные на линию MOSI, и переключать SCLK (Для MMC данные принимаются по фронту). После приема команды, MMC отвечает байтом ответа, следующим за запрошенными данными. Специфическая последовательность инициализации должна быть послана карте при подаче питания на нее, чтобы ввести карту в режим SPI. При запросе данных, MMC посылает байт ответа 0x00, следующий через некоторое время после символа данных (0xfe) и блока данных. При чтении байта из ведомого устройства (с линии MISO), ведущее устройство должно послать байт 0xff по линии MOSI. SPI интерфейс реализован на микроконтроллере аппаратно, но сигнал SS переключается вручную, отдельной командой. Микроконтроллер работает как ведущее устройство, MMC как ведомое.

*** Замечания по SPI ***

Плата для проектирования ATMEL STK200 имеет набор резисторов между контактами PORTB на плате (контакты SPI) и контроллером, для ISP программирования. Как результат – связь контроллера с другим устройством (в особенности с другим контроллером, работающем как ведомое устройство) работает неправильно. Используемые при программировании резисторы разрушают напряжение на величину, достаточную для нарушения связи. Простое Мы использовали простое лекарство от этого, подключаясь к перемычкам светодиодов вместо контактов PORTB. Таким образом, мы подключались напрямую к контактам порта контроллера.

Чип MP3 декодера имеет 3 интерфейса: последовательный интерфейс для входящих данных, I2C интерфейс для управления, и последовательный PCM интерфейс для декодированного битового потока.

Последовательный интерфейс ввода имеет линии: SCLK, SDATA и BIT_ENABLE. Любые данные на SDATA игнорируются при низком уровне на BIT_ENABLE. Мы подключили линии SDATA и SCLK непосредственно к контактам SCLK и MISO, карты MMC и контролируем линию BIT_ENABLE с микроконтроллера. Линия BIT_ENABLE поднимется, когда мы получаем символ данных из MMC, и опускается в низкий уровень, после того, как байты будут переброшены.

Интерфейс I2C это стандартный двухпроводный интерфейс, линии SDA и SCL. Он используется для инициализации управления MP3 декодером. MP3 декодер имеет набор регистров, в которые можно записать данные при старте, через I2C. На web сайт ATMEL есть реализация интерфейса I2C, который мы можем использовать с незначительными изменениями.

PCM интерфейс используется чтобы посылать декодированные данные в ЦАП, для преобразования в аудио сигналы. PCM интерфейс включает следующие сигналы: Тактовая частота выборок (sampling clock), генерируется внешним генератором (11.2896 мегагерц – мы не реализовали этот тактовый сигнал, остановившись на использовании функционального генератора, поскольку у нас не было времени для покупки другого генератора). Тактовая частота левого-правого каналов (left-right channel clock) 44.1 килогерц (частота выборок в MP3 файлах) она получается из OCLK. Также есть последовательная линия данных и последовательная линия такта. Используемый ЦАП может работать во множестве режимов и конфигурируется через STA013.

Формат Памяти

Программирование MMC производиться через параллельный порт компьютера. Мы написали программу на С++, которая инициализирует MMC и программирует ее (исходный код включен). Программа представляет собой исполняемый файл для MS DOS. При записи музыки на MMC файл с именем tracks.lst должен быть помещен в ту же самую папку, в которой лежат MP3 файлы для записи на карту. Файл tracks.lst содержит имена MP3 файлов в следующем формате:

track1.mp3
track2.mp3
.
.
.
lasttrack.mp3

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

Программа также создает и записывает таблицу содержимого карты, которую мы разработали для простого добавления треков, без перепрошивки карты целиком (эта возможность не включена в программу). Адреса имеют размер 32 бита, так 4 байта в таблице адресов занимает адрес одного трека. По адресу 0x0000 содержится число треков на карте. Адреса 0x0001, 0x0002, 0x0003, 0x0004 содержат адрес первого трека со старшим байтом по адресу 0x0001. адрес следующего трека размещен в следующих 4 байтах. 4 байта, следующие за адресом последнего трека содержат адрес первого байта за пределами карты. Это позволяет нам прекратить декодирование до выхода за пределы карты.

Адрес

Содержимое

0x0000

Количество треков

0x0001

Старший байт адреса трека 1

0x0002

Адрес первого трека

0x0003

Адрес первого трека

0x0004

Младший байт адреса трека 1

. . .

. . .

. . .

. . .

. . .

. . .

0x000?

Старший байт адреса 1-го байта за пределами карты

+1

адрес 1-го байта за пределами карты

+1

адрес 1-го байта за пределами карты

+1

Младший байт адреса 1-го байта за пределами карты


При запуске MMC, таблица размещения треков считывается из нее и помещается в память контроллера. Это позволяет быстро и легко определить место любого трека в памяти. Формула для вычисления расположения в памяти адреса следующего трека: 4 + адрес адреса текущего трека.

Структура программы

Установка микроконтроллера:

  • Установка интерфейса SPI

  • Установка портов интерфейса I2C

  • Установка портов командных кнопок

  • Установка таймера 1 для сброса приблизительно через 8,5 миллисекунд (таймер все еще не разрешен)

  • Установка интерфейса UART (RS232), только для тестирования и разработки

  • Инициализация всех переменных

  • Разрешить прерывания

Инициализация MMC:

  • Посылка последовательности при включении

  • Перевод в режим SPI

  • Установка длины блока чтения в 256 байт.

  • Чтение таблицы размещения треков и загрузка ее в память контроллера

  • Загрузка адреса 1го трека в адресные регистры.

  • Загрузка адреса конца карты в регистр конца карты

Инициализация декодера:

  • Инициализация I2C

  • Запись всех регистров

  • Посылка перового блока в декодер

  • Запись регистра RUN декодера чтобы разрешить декодирование

  • Запись регистра PLAY декодера чтобы начать декодирование

  • Запуск таймера 1

Автоматика:

  • MMC все еще читается?

  • Посылка следующего блока – установка таймера на прерывание через 16 миллисекунд

  • Проверка ошибок MP3 декодирования (в декодере имеется регистр счетчика кадров, который должен инкрементироваться)

  • Проверить кнопки

  • Изменить состояние воспроизведения и счетчики адреса соответственно – проверить достижение конца карты.

Результаты разработки

Плеер успешно воспроизводит наши тестовые MP3 файлы! Мы добавили кнопки управления. Это позволило нам переключать треки и остановить плеер в любое время.

Качество звука такое высокое как мы и ожидали от макетной платы с несколькими футами проводов. Мы не достигли качества CD, но мы и не предполагали его достичь. Декодер иногда выбрасывает случайный MPEG кадр, что приводит к треску или свисту. Это вероятно из-за неточности функционального генератора, поддерживающего частоту выборок. Мы пытались использовать несколько схем генераторов, пытаясь заменить ими функциональный генератор, но не смогли заставить их работать на частоте 11 мегагерц.

Мы также можем вынуть чип ATMEL из платы проектирования и использовать 4 батарейки для питания контроллера, декодера и MMC. Чип контроллера использует все 4 батарейки, в то время как все другие компоненты используют только 2 батарейки, генерирующие 3 вольта. Перемещение контроллера на макетную плату сделает устройство портативным (за исключением функционального генератора).

Что мы будем делать по другому в следующий раз

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

Еще Одина проблема в разработке – использование поверхностного (планарного) монтажа. Микросхема STA013 доступна в исполнении только для планарного монтажа, для микросхемы ЦАП планарный монтаж рекомендован производителем. Это занимает много времени, но реально только причиняет неудобство и возможно незначительно влияет на результат.

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

Последним изменением, которое мы сделаем в нашей разработке будет поддержка различных битрейтов. Мы выбрали 128 килобит/с, потому, что мы нашли его более общим и более простым в работе с ним. В случае работы с более высоким битрейтом, мы должны сконфигурировать SPI интерфейс для работы с более высокой тактовой частотой, CLK/4 вместо CLK/16. мы экспериментировали с различными тактовыми частотами интерфейса SPI, но так и не смогли работать с MMC картой на большей частоте. Это может быть результатом использования схем согласования уровня, дающих задержку, паразитной емкости, или просто неправильно сконфигурированного порта SPI. Поскольку мы решили добавить возможность использования различных битрейтов как дополнение, мы не рассматривали эту проблему в деталях.

Списки программ

Исходный код MP3

Исходный код программы для прошивки MMC

Программа прошивки MMC

Расчет временных задержек

**Программа прошивки MMC будет работать только на компьютерах с параллельным портом с адресом 0x378. ниже представлена распиновка контактов программатора:

CLOCK на контакте 4 LPT порта

MISO на контакте 11 LPT порта

MOSI на контакте 3 LPT порта

SS на контакте 5 LPT порта

Программатору также требуются согласователи уровня 3,3 ->5 вольт и 5 ->3,3 вольта, MMC не может работать с 5-ти вольтовыми сигналами.

Фотографии

Мультимедиа карта SanDisk в разъеме (вид вверх ногами)

ЦАП CS4331 (слева) и STA013 MP3 декодер (справа)



 


 
YOU ARE HERE:
© 2009, 2010, 2011, 2012 Mic-ron.ru - Сайт для радиолюбителя, схемы, помощь, радиолюбительские конструкции, журнал радиолюбитель. Форум, фото и видео
Так же схемы и устройства станков, чертежи и принципы работы станков, помогут вам сделать многое своими руками
самогонный аппарат | дефлегматор своими руками | симисторный регулятор мощности | самодельный сварочный аппарат | укороченная дипольная антенны | к174ун14 |
Rambler's Top100