РадиоКот :: Wave плеер
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Игрушки >

Теги статьи: Добавить тег

Wave плеер

Автор: Panda_Y2K
Опубликовано 31.08.2012
Создано при помощи КотоРед.
Участник Конкурса "Поздравь Кота по-человечески 2012!"

          В первую очередь хочу поздравить всех радиокотов и радиокотят с семилетием и представить схему Плеера wav файлов. Плеер выполнен на микроконтроллере ATMEGA128 16AU, отображение информации производится на экране от мобильного телефона Nokia 1100, батарея BP-6M 1100 ма, так же от мобильного телефона.

Рис.1

          Схема представлена на рисунке1. Сердцем устройства является микроконтроллер ATMEGA 128 16 AU, он управляет всеми устройствами, но начнем по порядку, с питания. Включение и выключение питания производится одной кнопкой (s1 power). В выключенном состоянии при нажатии кнопки s1 напряжение с батареи через диод D3 поступает на питание контроллера, который устанавливает высокий уровень на выводе 35 (PORTC 0) и поддерживает его таковым до выключения устройства. Если во включенном состоянии происходит нажатие кнопки s1, то напряжение с батареи через кнопку поступает на вывод 36 контроллера (PORTC 1), и контроллер устанавливает низкий уровень на выв. 35, ожидает отпускания кнопки, после чего питание на контроллер не поступает и устройство выключается. В этом месте программы можно до установки низкого уровня на выв. 35 сформировать на пример меню настроек.

 

Код, который выполняется при включении

LED = ON;               // включаем индикацию

DDRC.1 = 0;             //устанавливаем порт С1 как вход

DDRC.0  = 1;            //порт С0 как выход

POWER = ON;             //устанавливаем порт С0 в 1

while (POWER_BUTTON);   //ожидаем отпускания кнопки

                       LED = OFF;              //Выключаем индикацию

Код при выключении

       if (POWER_BUTTON == ON) {

       lcd_clear();                //Если нажата кнопка, очищаем экран

       //Здесь может быть ваша менюшка J

                       gotoxy(0,3);              

                       print_message("    Good bye    ");  //Выводим надпись

                       POWER = OFF;                   //Выключаем питание

                       LED = ON;               //Включаем индикацию

                       while (POWER_BUTTON);                        //ждем отпускания кнопки

                         };   

            Для питания Плеера используется как уже упоминалось ранее литий-полимерный аккумулятор типа BP6M емкостью 1100ма. Для его зарядки используется ключ на транзисторах Т2, Т3. Делитель на резисторах R4,R5 необходим для определения подключения зарядного устройства, которое так же используется от любого мобильного телефона. В моем случае используется зарядное устройство ATM style с выходным напряжением (как указано на корпусе) 4,7-11в и током до 600ма.

            Для заряда литий-ионных и литий-полимерных аккумуляторов обычно используют метод СС-CV, то есть зарядка постоянным током, а по достижению напряжения аккумулятора 4.1-4.2 вольт зарядка продолжается постоянным напряжением 4.2в, пока ток заряда не упадет до 10-20% от емкости батареи. В данном устройстве используется более простая схема заряда. В схеме нет датчика тока и режим CV не применяется. Ключ открываясь примерно на 30 секунд заряжает батарею, затем закрывается и через 200мс контроллер измеряет напряжение батареи. Как только напряжение достигнет 4.2в зарядка прекращается. На этом этапе ток заряда находится в пределах 220-240ма (значение измерено), что как раз и составляет 20% от емкости батареи. Зарядка батареи начнется, если напряжение на ней упадет ниже 4.0 в. Для индикации режима заряда батареи используется светодиод HL2 подключенный к порту А3 контроллера, выв.48, который в режиме зарядки моргает примерно 1 раз в секунду, а по окончании зарядки горит, до отсоединения зарядного разъема. Ниже приведен код, который отвечает за зарядку батареи:

while (CHARGE_MODE)

   {

     for (i=0; i<30; i++)

             {

               if (!CHARGE_MODE) return;

               DDRG |= 0x08;

               CHARGE_ON();

               delay_ms(900);

               LED=ON;

               delay_ms(100);

               LED=OFF;

               }; //delay (30sec)

     CHARGE_OFF();

     LED = ON;

     delay_ms(200);

     LED = OFF;

     //battary voltage measure and print

     ADCSRA  = 0x97;

     ADMUX   = 0xE0;

     ADCSRA |= 0x40;

     while ((ADCSRA & (1<<ADIF))==0);

     ADCSRA |= (1<<ADIF);

     bat_voltage = ADCH;

     bat_voltage = bat_voltage*2;

 

     gotoxy(60,0);

     print_char('v');

     __tmp = bat_voltage;

     for (i=4; i>0; i--)

         {gotoxy(6*(i+5),0);

          if (i == 2) {print_char('.');}

          else {

                 print_char(digit[bat_voltage-(bat_voltage/10)*10]);

                 bat_voltage = bat_voltage/10;

                 };

         };

     bat_voltage = __tmp;

 

     if (bat_voltage >= 420)  //charge complete;

        {//DDRG &= 0xF7;

         CHARGE_OFF();

         while (CHARGE_MODE)LED = ON;

         LED = OFF;

         return;

         };

    };

                           LED = OFF;

Теперь поговорим непосредственно о подключении карты памяти. Карта используется типа SD (Secury Digital), выглядит как показано на рисунке 2

Рис.2

Назначение выводов следующее:

Pin

Pin Name

SD Signal function (SD mode)

SPI Signal function (SPI mode)

1

DAT3/CS

DATA Line3

Chip Select [CS]

2

CMD/DI

Command Line

Data Input [SI] (serial input)

3

VSS1

Ground

Ground

4

VDD

Voltage supply

Voltage supply

5

CLK

Clock

Clock [SCK] (serial clock)

6

VSS2

Ground

Ground

7

DAT0/D0

Data Line0

Data output [SO] (serial output)

8

DAT1/IRQ

Data Line1

 

9

DAT2/NC

Data Line2

 

 

            В нашем случае используется SPI режим, по этому вторая колонка нам не интересна. В квадратных скобках указано обозначение на схеме. Выводы CD (Carddetect) и WP(Writeprotect) находятся на разъеме карты. Про то как работать с SDкартой на низком уровне можно прочитать тут https://avrlab.com/node/156 или тут https://elm-chan.org/docs/mmc/mmc_e.html . Программа для Плеера полностью написана на C, в        CodeVisionAVRверсии 2.05.5 и всю тяжелую работу по обмену с картой, CVAVR берет на себя, наше дело только высокоуровневое программирование. К стати библиотека для работы с SD картами и файловой системой в CVAVR взяты вот отсюда https://elm-chan.org/fsw/ff/00index_e.html . Для индикации обмена с картой используется светодиод HL1 подключенный к выводу 11 контроллера через резистор R6. Для уменьшения устройства в целом можно использовать карты формата microSD, заменив соответственно разъем.

            В настоящее время развелось много различных карт памяти и даже SD карты не все одинаковые. Карты объемом более 2Гб имеют отличную от остальных процедуру инициализации и чаще всего другую файловую систему (обычно FAT32) и данным Плеером не читаются, кроме того существуют карты емкостью до 2Гб с надписью х100, иногда пишут HD. Такие карты также не читаются, так как они имеют такую же процедуру инициализации как и карты высокой плотности, емкостью более 2Гб. Мне попалась такая карта фирмы QUMO 2Гб 100x, на упаковке было написано, что только для устройств совместимых с картами высокой плотности. Некоторые конструкции разработанные ранее (как на пример эта), имеют еще более старую процедуру инициализации применимую только для карт формата MMC и карты емкостью более 512Мб не понимают.

         Вывод информации осуществляется на экран от мобильного телефона Nokia 1100. Протокол для общения с контроллером дисплея используется  I2C, исходники библиотеки для работы с дисплеем в CVAVR есть в архиве. Внешний вид дисплея и расположение контактов показаны на рисунке 3. Сразу оговорюсь, мой дисплей немного по внешнему виду отличается, но контакты расположены точно так же.


Рис. 3

 

Для формирования звука используется таймер 3 в режиме ШИМ. В качестве усилителя (но скорее он нужен для развязки с наушниками и регулировки громкости) используется NJM3414, который был успешно изъят из старого CD-ROMа, вместо него можно использовать любой другой аналогичный.


Рис. 4 Внешний вид Плеера. (сразу после включения питания)



Рис.5 Выбор файла для воспроизведения.

Рис. 6 воспроизведение файла


Рис.7 Вид с на монтаж

Рис. 8 Вид со стороны батареи

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

            Выбранный контроллер ATMEGA128 может кому-то показаться избыточно большим для данного проекта, но 128 кб встроенной флеш памяти позволили использовать системные звуки для озвучивания событий. Размер программы составил 62850 байт, что составляет 48% памяти контроллера и дает возможность добавить и функционала устройству и при желании звуков.

            Транзисторы выдирались из различной отслужившей свое аппаратуры и их вполне можно заменить на те, что окажутся у вас под рукой. К транзисторам Т1, Т3, Т5 особых требований не предъявляется, так, что можно ставить любые на ток до 100ма (с соблюдением полярности соответственно), Т2 был взят из сотового телефона и рассчитан на ток до 1А, Т4 - 200ма.

            Для программирования использовался программатор STK200/300, FuseBitsвыставляем как на рисунке 9.


Рис. 9 Fuse Bits


 

 

 

 


Файлы:
Файлы проекта, фото, прошивка, описание


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

10 0 0