Плеер wav файлов на микроконтроллере Attiny85

Проектирование WAV плеера

Разработка конструкции структурной схемы WAV плеера. Устройство хранения информации и ее декадирования. Отфильтрование высокочастотной составляющей. Использование передаточной функции для оценки зависимости амплитуды выходного сигнала от частоты.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 05.05.2014
Размер файла 87,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство образования Республики Беларусь

Белорусский государственный университет информатики и радиоэлектроники

Факультет радиотехники и электроники

Кафедра радиотехнических систем

Пояснительная записка к курсовой работе

Проектирование WAV плеера

Проверил: Каленкович Е.Н.

Выполнила: Кацер О.Ю.

Содержание

1. Разработка структурной схемы

2. Разработка принципиальной схемы

3. Разработка ПО

Список использованной литературы

Введение

Wav плеер на attiny85 это простейший аудиоплеер, который может воспроизводить WAV-файлы, которые находятся на карте памяти SD. Микроконтроллеры серии ATtinyX5 (25/45/85) с 8 выводами имеют два выхода fast PWM (быстрый ШИМ) с несущей частотой 250 кГц. Это позволяет выводить звук с хорошим качеством и в широком частотном диапазоне. информация высокочастотный плеер декадирование

Формат WAV изначально использовался в системе Windows для сохранения цифровых аудиоданных. Это самый известный и широко поддерживаемый формат благодаря популярности платформы Windows и большому количеству написанных для неё программ. Почти любая современная программа, работающая со звуком, может прочитать или записать формат WAV, поэтому этот формат очень интересен для разработчиков программного обеспечения. Далее подробно описываются структуры данных формата WAV.

Поскольку формат WAV-файла пришел от операционной системы Windows, в которой традиционно использовались процессоры Intel, все значения данных формата хранятся как Little-Endian, т. е. самый младший значащий байт идет первым. WAV-файлы могут содержать строки текста, например метки секций, информационные комментарии и т. д. Строки сохраняются таким образом, что первый байт указывает количество байт текста ASCII в строке. WAV-файл использует стандартную RIFFструктуру, которая группирует содержимое файла из отдельных секций (chunks) — формат выборок аудиоданных, аудиоданные, и т. п. Каждая секция имеет свой отдельный заголовок секции и отдельные данные секции. Заголовок секции указывает на тип секции и количество содержащихся в секции байт. Такой принцип организации позволяет программам анализировать только необходимые секции, пропуская остальные секции, которые не известны или которые не требуют обработки. Некоторые определенные секции могут иметь в своем составе подсекции (sub-chunks). Например, как можно увидеть на диаграмме, описывающий основной формат WAV-файла, секции «fmt » и «data» являются подсекциями секции «RIFF». Одна хитрая вещь, связанная с секциями файла RIFF, состоит в том, что адреса начала секций должны быть выровнены на размер слова (2 байта). Это означает, что общий размер секции должен быть кратен 2. Если секция содержит нечетное число байт данных (невыравненное до 2 байт), то добавляется дополнительный нулевой байт данных в конец данных секции. Этот дополнительный байт не учитывается в размере секции заголовка, таким образом, программа всегда должна учитывать выравнивание для расчета смещения начала следующей секции.

Заголовки WAV-файла используют стандартный формат RIFF. Первые 8 байт файла — стандартный заголовок секции RIFF, который имеет ID секции «RIFF» и размер секции, равный размеру файла минус 8 байт, используемых для RIFF-заголовка. Первые 4 байта данных в секции «RIFF» определяют тип ресурса, который можно найти в секции. WAV-файлы всегда используют тип ресурса «WAVE». После типа ресурса (ID «WAVE») идут все секции звукового файла, которые определяют аудиосигнал.

Количество каналов указывает, сколько отдельных аудиосигналов закодировано в секции данных звука (wave data chunk). Значение 1 означает монофонический сигнал, 2 означает стерео, и т. п.

Описываемый аудиоплеер построен на карте памяти SD (SDC) и микроконтроллере ATtiny85.

Формат был разработан в 1999 году фирмами Panasonic, SanDisk и Toshiba на основе MMC-карты. В 2000 году на CES компаниями Matsushita, SanDisk и Toshiba было объявлено о создании SD Card Association. Карта размером 24Ч32Ч2,1 мм снабжена собственным контроллером и специальной областью, способной, в отличие от MMC, записывать информацию таким образом, чтобы «незаконное» чтение информации было невозможно, в соответствии с требованиями «Secure Digital Music Initiative». Этот факт был отражён в названии стандарта («Secure Digital»). Для записи в защищённую область используется специальный протокол записи, недоступный для обычных пользователей. При этом карта также может быть защищена паролем, без которого доступ к записанной информации невозможен; восстановить работоспособность карты можно только её полным переформатированием с потерей записанной информации.

Карты формата Secure Digital снабжены механическим переключателем защиты от записи. В положении «lock» невозможны запись информации, и, соответственно, удаление файлов и форматирование карты, что позволяет избежать случайной потери информации. Однако следует учитывать, что собственно защита от записи осуществляется не самой картой, а устройством, использующим карту, и может оказаться в нём не реализованной, либо намеренно отсутствовать. Например, автозагрузка резидентной программы CHDK для фотоаппаратов Canon работает, только когда карта защищена от записи.

1. Разработка структурной схемы

Структурная схема проектируемого устройства представлена на рисунке 1.1.

Рисунок 1.1 — Схема структурная

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

Проектируемое устройство содержит следующие узлы:

Устройство хранения информации — это SD карта на которой хранится WAV файл.

Устройство декодирования информации — это микроконтроллер ATtiny85 по требованиям ТЗ.

Плеер wav файлов на микроконтроллере Attiny85

Ещё относительно недавно основными носителями звука были громоздкие виниловые пластинки, чуть позже — аудиокассеты, уже более практичные. Сейчас, когда уже и CD диски постепенно уходят в прошлое, основными носителем цифровой информации являются USB накопители и разнообразные карты памяти, способные хранить десятки и сотни гигабайт, помещаясь при этом на кончике пальца. Такая миниатюризация и доступность карт памяти позволяет создавать множество интересных и полезных электронных устройств, например, плееров, воспроизводящих музыку. Конечно, купить плеер в магазине, с возможностью слушать музыку в хорошем качестве и со всеми удобствами не составляет труда, но несмотря на это, подобные плееры пользуются интересом среди радиолюбителей.

Основное их применение — создание озвучки для различных игрушек, приборов, да и просто готовых бытовых приборов. Например, можно качественно озвучить звук двигателя и выстрелов у самодельного танка на радиоуправлении, можно на основе такого плеера создать уникальный дверной звонок с собственной мелодией. Самое удачное, на мой взгляд, применение — это приставка к холодильнику, которая будет при открытии дверцы говорить заранее записанную фразу в духе «хватит жрать по ночам!». Похудение в этом случае гарантировано :)

Схема плеера основана на микроконтроллере Attiny85 и содержит самый необходимый минимум компонентов, конечный аудиосигнал получается с использованием ШИМ микроконтроллера. Электролитический конденсатор на 100 мкФ отсекает постоянную составляющую в сигнале на динамик (он же Sreaker на схеме). Здесь можно использовать любые динамики сопротивлением 4-8 Ом, громкость в любом случае будет невелика, но вполне достаточна для большинства применений. Для того, чтобы сделать звук громче и воспроизводить через динамики, к выходу схемы вместо динамика нужно подключить любой аудио-усилитель. При этом между ними обязательно нужно предусмотреть регулятор громкости, так как сигнал с выхода схемы слишком сильный для аудиовходов.

Читайте также  Как приготовить топливную смесь для двухтактных двигателей

Схема воспроизводит файлы формата wav с карты памяти SD или Micro SD, подключение карты к схеме видно из схемы. Удобнее всего использовать адаптер-переходник с карт памяти Micro SD на SD, в этом случае просто припаиваем проводки с крупных контактных площадок адаптера на плату, а карту памяти Micro SD вставляем внутрь, с неё будут читаться файлы. Такой вариант подключения виден на фото ниже.

Распиновка карт памяти.

Плеер wav файлов на микроконтроллере Attiny85

Несколько слов о карте памяти и самих файлов. Схема воспроизводит файлы только формата wav, с частотой дискретизации не боле 48 кГц, PCM 8 или 16 бит. Для того, чтобы конвертировать файлы из привычного формата mp3 в wav существует множество бесплатных программ, одна из таких — Gold Wave, в ней можно задать все необходимые параметры конечного wav файла вручную. Хочу также обратить внимание, что используемая карта памяти должна быть форматирована в файловой системе FAT, сделать это можно через компьютер, выбрав соответствующий вариант FAT при форматировании карты. Возможно такое, что не все карты памяти будут работать в этой схеме, наиболее предпочтительными являются карты на небольшой объём (1-2 Гб). Если вдруг схема не заработает с одной картой, попробуйте поставить другую. У меня работала со всеми, которые были дома под рукой.

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

Несколько слов о прошивке микроконтроллера. Для этого потребуется программатор, например, популярный USBasp. Фьюзы для прошивки показаны ниже, сама прошивка в формате hex прилагается к статье. Фьюзы на картинке даны для программы PonyProg.

Конечно, данное устройство является плеером лишь в кавычках, ведь за такую простоту приходится расплачиваться качеством звука. Но несмотря на это, он с успехом находит себе применение — ещё один из возможных вариантов, это музыкальная подарочная шкатулка. Как только человек откроет крышку шкатулки, зазвучит музыка или записанный поздравительный текст. На схеме также предусмотрена кнопка Next, при её нажатии начинает играть следующий аудиофайл, находящийся на карте памяти. Успешной сборки! Все вопросы, замечания, дополнения пишите в комментариях.

Минималистический четырёхголосный MIDI-проигрыватель

Предлагаемый проигрыватель не требует карты памяти, он хранит MIDI-файл длиной до 6000 байт непосредственно в микроконтроллере ATtiny85 (в отличие от этой классической конструкции, которая проигрывает WAV-файлы, и карту памяти, естественно, требует). Четырёхголосное проигрывание с затуханием при помощи ШИМ реализовано программно. Пример звучания — по ссылке.

Устройство выполнено по схеме:

Электролитический конденсатор между микроконтроллером и динамической головкой не пропустит постоянную составляющую, если в результате программного сбоя на выходе PB4 появится логическая единица. Индуктивное сопротивление головки не пропускает частоту ШИМ. Если вы решите подключить устройство к усилителю, во избежание перегрузки последнего сигналом ШИМ нужно добавить ФНЧ, как здесь.

MIDI-файл необходимо поместить в исходник прошивки в виде массива вида:

Для перевода файла в такой формат в UNIX-подобных ОС есть готовое решение — утилита xxd. Берём MIDI-файл и пропускаем через эту утилиту так:

В консоль будет выведено что-то вроде:

2708 — это длина в байтах. Получилось меньше 6000 — значит, поместится. Последовательность шестнадцатеричных чисел через буфер обмена переносим в скетч (только не забываем: в консоли — никакого Ctrl+C) вместо массива по умолчанию. Или не проделываем всего этого, если желаем его оставить.

Таймер-счётчик 1 будет работать на частоте в 64 МГц от ФАПЧ:

Переведём этот таймер в ШИМ-режим для работы в качестве ЦАП, скважность будет зависеть от значения OCR1B:

Частота прямоугольных импульсов зависит от значения OCR1C, оставим его равным 255 (по умолчанию), тогда частота в 64 МГц будет поделена на 256, и получится 250 кГц.

Таймер-счётчик 0 будет вырабатывать прерывания:

Тактовая частота в 16 МГц делится делителем на 8, а затем на значение OCR0A, равное 19+1, и получается 100 кГц. Проигрыватель четырёхголосный, на каждый голос получается по 25 кГц. По прерыванию происходит вызов процедуры его обработки ISR(TIMER0_COMPA_vect), которая рассчитывает и выводит звуки.

Сторожевой таймер сконфигурирован на выработку прерывания каждые 16 мс, что требуется для получения частот нот:

Для получения колебаний заданной формы применён прямой цифровой синтез. Аппаратного перемножения в ATtiny85 нет, поэтому берём прямоугольные импульсы и умножаем амплитуду огибающей на 1 или -1. Убывает амплитуда линейно, и чтобы рассчитать её в тот или иной момент времени, достаточно линейно же уменьшать показания счётчика.

Для каждого из каналов предусмотрено по три переменных: Freq[] — частота, Acc[] — фазовый аккумулятор, Amp[], значение амплитуды огибающей. Значения Freq[] и Acc[] суммируются. Старший бит Acc[] используется для получения прямоугольных импульсов. Чем больше Freq[], тем больше частота. Готовая форма колебаний перемножается на огибающую Amp[]. Все четыре канала мультиплексируются и поступают на аналоговый выход.

Важной частью программы является процедура обработки прерывания от таймера-счётчика 0, которая выводит колебания на аналоговый выход. Вызов этой процедуры происходит с частотой около 95 кГц. Для текущего канала c она обновляет значения Acc[c] и Amp[c], а также рассчитывает значение текущей ноты. Результат поступает на регистр сравнения OCR1B таймера-счётчика OCR1B для получения аналогового сигнала на выводе 4:

прибавляет к аккумулятору Acc[c] значение частоты Freq[c]. Чем больше Freq[c], тем быстрее будет меняться значение Acc[c]. Затем строка

уменьшает значение амплитуды для данного канала. Фрагмент (Amp[c] != 0) нужен, чтобы после достижения амплитудой нуля она не уменьшалась дальше. Теперь строка

переносит старшие 9 бит Acc[c] в Temp. И строка

оставляет старший бит этой переменной равным единице, если единице равны два старших бита, и устанавливает старший бит в нуль, если это не так. Получаются прямоугольные импульсы с соотношением включённого и выключенного состояний 25/75. В одной из предыдущих конструкций автор применил меандр, при новом же способе гармоник получается чуть больше. Строка

переносит в остальные биты байта значения старшего, например, если старший бит был 0, то получится 0x00, а если 1 — то 0xFF. Строка

переносит в Env тот бит Amp[c], который задан значением Volume, по умолчанию — старший, так как Volume = 8. Строка

всё это объединяет. Если Mask = 0x00 то Note присваивается значение Env. Если Mask = 0xFF, то Note присваивается значение, дополнительное к Env + 1, то есть Env со знаком минуса. Теперь Note содержит текущую форму колебаний, меняющуюся от положительного до отрицательного значений текущей амплитуды. Строка

прибавляет к Note число 128 и записывает результат в OCR1B. Строка

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

Двенадцать частот нот заданы в массиве:

Частоты нот других октав получаются делением на 2 n . Например, делим 10973 на 2 4 и получаем 686. Верхний бит Acc[c] будет переключаться с частотой в 25000/(65536/685) = 261.7 Гц.

На звучание влияют две переменных: Volume — громкость, от 7 до 9 и Decay — затухание, от 12 до 14. Чем значение Decay больше, тем медленнее затухание.

Простейший интерпретатор MIDI обращает внимание только на значения ноты, темпа и коэффициента деления, а прочие данные игнорирует. Подпрограмма readIgnore() пропускает заданное количество байт в массиве, полученном из файла:

Читайте также  Корзинка из атласных лент

Подпрограмма readNumber() считывает число из заданного количества байт с точностью до 4:

Подпрограмма readVariable() считывает число с принятой в MIDI переменной точностью. Количество байт при этом может быть от одного до четырёх:

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

Интерпертатор вызывает подпрограмму noteOn() для проигрывания ноты в следующем доступном канале:

Переменная Ptr указывает на следующий считываемый байт:

Первый блок в MIDI-файле — это заголовок, указывающий на количество дорожек, темп и коэффициент деления:

Коэффициент деления обычно равен 960. Теперь считываем заданное количество блоков:

Считываем последовательные события до окончания блока:

В каждом событии задана delta — задержка в единицах времени, определяемых коэффициентом деления, которая должна произойти перед этим событием. Для событий, которые должны произойти тут де, delta равна нулю.

Метасобытия — это события типа 0xFF:

Единственный вид интересующих нас метасобытий — это Tempo, значение темпа в микросекундах. По умолчанию оно равно 500000, то есть, полсекунды, что соответствует 120 ударам в минуту.

Остальные события — это MIDI-события, определяемые первым шестнадцатеричным разрядом своего типа. Нас интересует только 0x90 — Note On, проигрывание ноты на следующем доступном канале:

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

Микроконтроллер работает на частоте в 16 МГц, чтобы кварц не требовался, нужно соответствующим образом сконфигурировать встроенный ФАПЧ. Чтобы микроконтроллер стал Arduino-совместимым, применена эта наработка Spence Konde. В меню Board выбираем подменю ATtinyCore, а там — ATtiny25/45/85. В последующих меню выбираем: Timer 1 Clock: CPU, B.O.D. Disabled, ATtiny85, 16 MHz (PLL). Затем выбираем Burn Bootloader, потом заливаем программу. Программатор применён типа Tiny AVR Programmer Board фирмы SparkFun.

Прошивка под CC-BY 4.0, в которой уже есть фуга Баха в ре миноре, находится здесь, оригинальный MIDI-файл взят здесь.

Плеер wav файлов на микроконтроллере Attiny85

TinyDFPlayer — MP3-Player based on ATtiny85 and DFPlayerMini

ATtiny controlled and LiPo battery powered MP3-Player using the DFPlayerMini module featuring:

  • Micro-SD-card slot
  • Battery charging and protection circuit
  • Battery level detection
  • OLED display
  • On/off switch
  • Volume control
  • Three push buttons to control the player
  • Remembers the last track played after switching off (EEPROM)

You can directly connect a 3.7 V Li-Po battery and a 3 W / 4 Ohm speaker to the board.

  • Project Video (YouTube): https://youtu.be/QYjr8UXhs8I
  • Design Files (EasyEDA): https://easyeda.com/wagiminator/attiny85-tinydfplayer-smd

pic1.jpg

DFPlayer Mini Module

The DFPLayer Mini module is a serial MP3 module that offers the perfect built-in MP3 hardware decoding. It supports TF cards with FAT16 and FAT32 file systems. Music playback as well as other functions can be controlled by simple serial commands without cumbersome software implementation. The main features of the module are easy to use, stable and reliable functions.

For battery charging the TP4056 is used. The TP4056 is a complete constant-current/constant-voltage linear charger for single cell lithium-ion batteries. The charge voltage is fixed at 4.2V and the charge current (max 1000mA) can be programmed externally with a single resistor (R6). The TP4056 automatically terminates the charge cycle when the charge current drops to 1/10th the programmed value after the final float voltage is reached. Other features include current monitor, under voltage lockout and automatic recharge. Charging is done via the built-in Micro USB connector.

For the battery protection (overcharge, overdischarge, overcurrent and short circuit protection) the DW01A is used in combination with an FS8205 dual MOSFET. The DW01A is constantly measuring the voltage across the battery and the current flowing in (when charging) or coming out (when discharging). If something goes wrong it takes the battery out of the circuit by closing the MOSFET which acts like a switch between the negative side of the battery (B-) and ground. The overcurrent protection works by comparing the voltage drop across the MOSFET with the internal 150mV reference of the DW01A. As the RDS(on) of one FS8205 is around 2x25mOhm, the DW01A will close the MOSFET at 150mV/50mOhm = 3A.

The user interface utilizes three buttons, a wheel potentiometer and a 128×64 pixels OLED display. An ATtiny85 microcontroller brings it all together.

Calibrating ATtiny85’s Internal Oscillator

Error-free serial communication with the DFPlayer module requires precise timing. Usually the internal oscillator of the ATtiny85 used for this is sufficiently accurate (at least I haven’t had any problems so far). However, the serial communication may not work due to an imprecise oscillator. It is therefore recommended to calibrate it manually. There are numerous instructions on how to do this on the Internet. Alternatively, the TinyICOC or the TinyCalibrator can be used for this.

Building the TinyDFPlayer

Solder all of the components onto the circuit board. Connect a 3.7 V Li-Po battery and a 3 W / 4 Ohm speaker to the corresponding pin headers.

pic3.jpg

If you want to use the 3D-printed case, first install a 70 * 40 mm speaker in the lower part of the housing and screw it in with 2.3 * 5 mm self-tapping screws. Place an approx. 1 cm thick piece of foam behind the speaker, which fits tightly against the outer walls of the housing. This improves the sound quality significantly and separates the battery from the speaker. Then place the battery. Click the upper part of the housing on the lower part and screw on the TinyDFPlayer Board with 2.3 * 5 mm self-tapping screws. Glue four rubber feet to the underside of the player.

pic4.jpg pic5.jpg pic6.jpg

Compiling and Uploading the Software

If using the Arduino IDE

  • Make sure you have installed the following core and libraries:
  • Chip: ATtiny85
  • Clock: 8 MHz (internal)
  • Leave the rest at the default settings

If using the precompiled hex-file

  • Make sure you have installed avrdude.
  • Connect your programmer to your PC and to the ICSP header of the device.
  • Open a terminal.
  • Navigate to the folder with the hex-file.
  • Execute the following command (if necessary replace «usbasp» with the programmer you use):

Preparing the SD-Card

Micro SD cards (TF cards) with a maximum of 32 GB are supported. The card should be formatted in the FAT32 file system. The firmware is written for the folder-play function of the DFPlayer. This means you have to create folders named 01, 02, 03, . in the SD card root and inside the folders you have to name the audio files 001.mp3, 002.mp3, . The maximum number of folders is 99 and the maximum number of files per folder is 255. Don’t leave gaps in the folders or file numbers. After the three-digit number of the MP3 files, the title name can be added for better identification, e.g. «003_MySong.mp3». Note that the title names cannot be read out and transmitted by the MiniDFPlayer module, so unfortunately it is not possible to display the title names.

Читайте также  Простое приспособление для заточки ножей под фиксированным углом

There must not be any unnecessary files on the SD card, such as those stored there by MacOS (e.g. Spotlight). Better take Linux or Windows to write to the SD card. Under MacOS you can try to clean up with the following command:

Insert the SD card into the corresponding slot of the DFPlayer Mini module.

Operating the TinyDFPlayer

The device is switched on with the power switch. The two outer buttons are used to switch files and folders. The middle button is used to switch between pause and play. The wheel potentiometer is for choosing the volume. All necessary information is displayed on the OLED. To charge the battery, connect a 5V power supply via the micro USB port.

Overview

TinyDFPlayer is an ATtiny controlled and LiPo battery powered MP3-Player using the DFPlayerMini module featuring:

  • Micro-SD-card slot
  • Battery charging and protection circuit
  • Battery level detection
  • OLED display
  • On/off switch
  • Volume control
  • Three push buttons to control the player
  • Remembers the last track played after switching off (EEPROM)

You can directly connect a 3.7 V Li-Po battery and a 3 W / 4 Ohm speaker to the board.

  • Project Video (YouTube): https://youtu.be/QYjr8UXhs8I
  • Firmware (Github): https://github.com/wagiminator/ATtiny85-TinyDFPlayer

pic1.jpg

Hardware

DFPlayer Mini Module

The DFPLayer Mini module is a serial MP3 module that offers the perfect built-in MP3 hardware decoding. It supports TF cards with FAT16 and FAT32 file systems. Music playback as well as other functions can be controlled by simple serial commands without cumbersome software implementation. The main features of the module are easy to use, stable and reliable functions.

Battery Charger

For battery charging the TP4056 is used. The TP4056 is a complete constant-current/constant-voltage linear charger for single cell lithium-ion batteries. The charge voltage is fixed at 4.2V and the charge current (max 1000mA) can be programmed externally with a single resistor (R6). The TP4056 automatically terminates the charge cycle when the charge current drops to 1/10th the programmed value after the final float voltage is reached. Other features include current monitor, under voltage lockout and automatic recharge. Charging is done via the built-in Micro USB connector.

Battery Protection

For the battery protection (overcharge, overdischarge, overcurrent and short circuit protection) the DW01A is used in combination with an FS8205 dual MOSFET. The DW01A is constantly measuring the voltage across the battery and the current flowing in (when charging) or coming out (when discharging). If something goes wrong it takes the battery out of the circuit by closing the MOSFET which acts like a switch between the negative side of the battery (B-) and ground. The overcurrent protection works by comparing the voltage drop across the MOSFET with the internal 150mV reference of the DW01A. As the RDS(on) of one FS8205 is around 2x25mOhm, the DW01A will close the MOSFET at 150mV/50mOhm = 3A.

User Interface

The user interface utilizes three buttons, a wheel potentiometer and a 128×64 pixels OLED display. An ATtiny85 microcontroller brings it all together.

Building Instructions

Calibrating ATtiny85’s Internal Oscillator

Error-free serial communication with the DFPlayer module requires precise timing. Usually the internal oscillator of the ATtiny85 used for this is sufficiently accurate (at least I haven’t had any problems so far). However, the serial communication may not work due to an imprecise oscillator. It is therefore recommended to calibrate it manually. There are numerous instructions on how to do this on the Internet. Alternatively, the TinyICOC or the TinyCalibrator can be used for this.

Building the TinyDFPlayer

Solder all of the components onto the circuit board. Connect a 3.7 V Li-Po battery and a 3 W / 4 Ohm speaker to the corresponding pin headers.

pic3.jpg

If you want to use the 3D-printed case, first install a 70 x 40 mm speaker in the lower part of the housing and screw it in with 2.3 x 5 mm self-tapping screws. Place an approx. 1 cm thick piece of foam behind the speaker, which fits tightly against the outer walls of the housing. This improves the sound quality significantly and separates the battery from the speaker. Then place the battery. Click the upper part of the housing on the lower part and screw on the TinyDFPlayer Board with 2.3 x 5 mm self-tapping screws. Glue four rubber feet to the underside of the player.

pic4.jpgpic5.jpgpic6.jpg

Compiling and Uploading the Software

If using the Arduino IDE

  • Make sure you have installed the following core and libraries:
  • Chip: ATtiny85
  • Clock: 8 MHz (internal)
  • Leave the rest at the default settings

If using the precompiled hex-file

  • Make sure you have installed avrdude.
  • Connect your programmer to your PC and to the ICSP header of the device.
  • Open a terminal.
  • Navigate to the folder with the hex-file.
  • Execute the following command (if necessary replace «usbasp» with the programmer you use):

Operating Instructions

Preparing the SD-Card

Micro SD cards (TF cards) with a maximum of 32 GB are supported. The card should be formatted in the FAT32 file system. The firmware is written for the folder-play function of the DFPlayer. This means you have to create folders named 01, 02, 03, . in the SD card root and inside the folders you have to name the audio files 001.mp3, 002.mp3, . The maximum number of folders is 99 and the maximum number of files per folder is 255. Don’t leave gaps in the folders or file numbers. After the three-digit number of the MP3 files, the title name can be added for better identification, e.g. «003_MySong.mp3». Note that the title names cannot be read out and transmitted by the MiniDFPlayer module, so unfortunately it is not possible to display the title names.

There must not be any unnecessary files on the SD card, such as those stored there by MacOS (e.g. Spotlight). Better take Linux or Windows to write to the SD card. Under MacOS you can try to clean up with the following command:

Insert the SD card into the corresponding slot of the DFPlayer Mini module.

Operating the TinyDFPlayer

The device is switched on with the power switch. The two outer buttons are used to switch files and folders. The middle button is used to switch between pause and play. The wheel potentiometer is for choosing the volume. All necessary information is displayed on the OLED. To charge the battery, connect a 5V power supply via the micro USB port.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: