roboforum.ru

Технический форум по робототехнике.

Звуковая карта для МиниБота и МиниБота-ПРО

Звуковая карта для МиниБота и МиниБота-ПРО

EdGull » 17 июл 2008, 23:22

Делаем звуковую стерео карту со своей автономной памятью на SD-Card

и так берем схему и исходники вот отсюда
http://eldigi.ru/site/house/18.php

Изображение

Код: Выделить всёРазвернуть
/*
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Project : PCM Player
Version : 0.0.0.6
Date    : 19.01.2006
Author  : Pavel Sirotkin
Mail to : pol_s@list.ru


Chip type       : ATmega32
Fuses Settings   : CKSEL = 1110, SUT = 01, CKOPT = 0
Program type    : Application
Clock frequency : 16,000000 MHz
Memory model    : Small
Heap         : 0x300
Data Stack      : 0x100
Return Stack   : 64
Compiler      : IAR EWAVR 4.12A
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/

#include "main.h"

// Заголовок WAV файла
typedef struct
{
   unsigned char id_riff[4];   // 4 byte
   unsigned long len_riff;      // 4 byte

   unsigned char id_chuck[4];   // 4 byte
   unsigned char fmt[4];      // 4 byte
   unsigned long len_chuck;   // 4 byte

   unsigned int  type;         // 2 byte
   unsigned int  channels;      // 2 byte
   unsigned long freq;         // 4 byte
   unsigned long bytes;      // 4 byte
   unsigned int  align;      // 2 byte
   unsigned int  bits;         // 2 byte

   unsigned char id_data[4];   // 4 byte
   unsigned long len_data;      // 4 byte
} TitleWave;// 44 byte

/*
---------------------------------------------------------------------------------------------
   Глобальные переменные
---------------------------------------------------------------------------------------------
*/
volatile unsigned char   data;
unsigned char         song;
unsigned char         play;
unsigned char         gotoNextSong;
__flash char         FileNames [10][11] =
{
   "muson01.wav","muson02.wav","muson03.wav","muson04.wav","muson05.wav",
   "muson06.wav","muson07.wav","muson08.wav","muson09.wav","muson10.wav"
};

/*
=============================================================================================
   Проверка заголовка WAV файла на соответсвие параметрам воспроизведения.
   Формат WAV файла должен быть:   PCM 8 бит 16000 КГц Моно.
=============================================================================================
*/
unsigned char WaveComp (char const __flash name[])
{
   //~~~~~~~~~~~~~
   FILE      *f;
   TitleWave   tw;
   //~~~~~~~~~~~~~

   f = fopenc(name,READ);
   if ( f==0 ) return (1);                           // Не открыть файл
   fread(&tw,sizeof(TitleWave),1,f);
   fclose(f);
   
   if ( strncmp_G(tw.id_riff,"RIFF",4) != 0 ) return (1);   // Не совпал идентификатор RIFF
   if ( strncmp_G(tw.id_chuck,"WAVE",4) != 0 ) return (1);   // Не совпал идентификатор CHUCK
   if ( strncmp_G(tw.fmt,"fmt ",4)!= 0 ) return (1);      // Не совпал идентификатор FMT
   if ( tw.type != 1 ) return (1);                     // Тип данных - не выборка
   if ( tw.channels != 1 ) return (1);                  // Не моно
   if ( tw.freq != 16000 ) return (1);                  // Не 16000 КГц
   if ( tw.bytes != 16000 ) return (1);
   if ( tw.bits != 8 ) return (1);                     // Не 8 бит
   if ( strncmp_G(tw.id_data,"data",4)!= 0 )return (1);   // Не совпал идентификатор DATA
   
   return (0);
}

/*
=============================================================================================
   MAIN.
=============================================================================================
*/
void main ()
{
   //~~~~~~~~~~
   FILE   *fp;
   //~~~~~~~~~~
   
   while (!initialize_media()){};
   
   PCMDDR = 0xFF;
   PCMPort = 0x00;
   
   PORTD_Bit2 = 1;
   PORTD_Bit3 = 1;
   
   // Sleep enable
   MCUCR |= (1 << SE);
   
   // External Interrupts enable
   GICR |= (1 << INT1)|(1 << INT0);
   
   SEI();
   
   
   while(1)
   {
      if (play)
      {
         GICR &= ~(1 << INT0);
         // Timer/Counter 0 initialization
         TCCR0 |= (1 << CS01);
         TCNT0 = 0x89;
         // Timer(s)/Counter(s) Interrupt(s) initialization
         TIMSK |= (1 << TOIE0);
         
         if (!WaveComp (FileNames[song]))
         {
            fp = fopenc(FileNames[song], READ);
            while ( ((fp -> position) < (fp -> length)) && !gotoNextSong )
            {
               data = fgetc(fp);
               SLEEP();
            };
            fclose(fp);
            if (!gotoNextSong) play = 0;
            gotoNextSong = 0;
         }
         else song = 0;
         
         // Stop Timer0
         TCCR0 &= ~(1 << CS01);
         TIMSK &= ~(1 << TOIE0);
         GICR |= (1 << INT0);
      }
      else SLEEP();
   };
}

/*
=============================================================================================
   Timer0 interrupt.
=============================================================================================
*/
#pragma vector = TIMER0_OVF_vect
__interrupt void Timer0_Ovf (void)
{
   PCMPort = data;
   TCNT0 = 0x89;
}

/*
=============================================================================================
   External interrupt0.
=============================================================================================
*/
#pragma vector = INT0_vect
__interrupt void Int0_Isr (void)
{
   _delay_ms(1000);
   while (!PIND_Bit2){};
   play = 1;
}

/*
=============================================================================================
   External interrupt1.
=============================================================================================
*/
#pragma vector = INT1_vect
__interrupt void Int1_Isr (void)
{
   _delay_ms(1000);
   while (!PIND_Bit3){};
   gotoNextSong = 1;
   play  = 1;
   song++;
}


Добавлено спустя 1 минуту 33 секунды:
добавляем возможность управления через уарт и и2ц
системный разъем естественно миниботовский
там как раз уже выведен уарт и и2ц

Добавлено спустя 5 минут 19 секунд:
добавлем взятый у уважаемого FireFly вот от сюда http://robozone.su/2008/07/08/zvukovojj ... lm386.html
его схему микрофонного усилителя (только я думаю мы их стерео сделаем, чтобы можно было на звук ехать)
и получается у нас еще и аудиовход естественно с возможностью записи
Вложения
на микросхеме LM386.gif
усилитель мощности делаем на LM386
на микросхеме LM386.gif (76.12 КиБ) Просмотров: 7181
1215466034_schematic-sound-sens_v2.gif
схема микрофонного усилителя

Re: Звуковая карта для МиниБота и МиниБота-ПРО

EdGull » 18 июл 2008, 08:46

Коллеги, а как будем громкость регулировать?
программно получится?
или прийдется еще один цап городить?

Re: Звуковая карта для МиниБота и МиниБота-ПРО

=DeaD= » 18 июл 2008, 08:56

IMHO лучше программно, ну или переменник воткнуть на плату настроечный дополнительно. А то такими темпами все ноги МК уйдут на всякую обвязку типа памяти, экрана, звука и будет прямо микро ПК а не робот :) если бы на цену не заморачивались - налепили бы везде дешевых МК, чтобы все девайсы были на шине i2c.

Re: Звуковая карта для МиниБота и МиниБота-ПРО

blindman » 18 июл 2008, 09:21

Так это и так отдельная плата со своим конроллером.

А нельзя для громкости ШИМ использовать? Поставить интегрирующую цепочку и еще один транзистор. Программно - не лучшее решение. И так разрешение ЦАП невысокое.

Re: Звуковая карта для МиниБота и МиниБота-ПРО

EdGull » 18 июл 2008, 09:26

ну вот что получилось в первом приближении

Добавлено спустя 2 минуты 39 секунд:
только в коде порт мне смените плиз
и хекс выложите
сёдня вечером буду пробывать запускать
Вложения
SoundCard.GIF

Re: Звуковая карта для МиниБота и МиниБота-ПРО

-= Александр =- » 18 июл 2008, 17:33

Есть такая тема - цифровой потенциометр. Работает как обычный петеменник с управлением от МК. Самое то громкость регулировать!

Re: Звуковая карта для МиниБота и МиниБота-ПРО

Myp » 18 июл 2008, 17:36

а какая у него скорость?
мож нафик ковокс этот?
сразу 1 резистором рулить...

Re: Звуковая карта для МиниБота и МиниБота-ПРО

blindman » 18 июл 2008, 17:52

Кстати, они еще и сдвоенные бывают. Вот вам и регулятор громкости сразу. А по скорости никаких проблем - они по I2C или SPI управляются. По SPI лучше - на хрена там на I2C второй мастер

Re: Звуковая карта для МиниБота и МиниБота-ПРО

alegz » 18 июл 2008, 18:26

было бы круто если бы ктонить осилил собрать и скомпелировать эту схемку... а вы опять начали говорить о планах какихто )))
я вот сеня весь день пытался найти и поработать с нормальным исходником на си fat16 .... кстати... почему в сорцах которые в теме ничего нет про это дело?!

Re: Звуковая карта для МиниБота и МиниБота-ПРО

-= Александр =- » 18 июл 2008, 20:08

А есть и оперционники с цифровой регулировкой коэффицента усиления...

Re: Звуковая карта для МиниБота и МиниБота-ПРО

MiBBiM » 18 июл 2008, 23:14

Раз это отдельная плата...То, быть может, 16 бит врубить?

Добавлено спустя 24 минуты 33 секунды:
Не смог найти время переключения ножек мк 1-0 и 0-1. Быть может частоту дискредитации побольше дать?

Re: Звуковая карта для МиниБота и МиниБота-ПРО

=DeaD= » 18 июл 2008, 23:15

MiBBiM писал(а):Раз это отдельная плата...То, быть может, 16 бит врубить?

Точность системы равна точности наименее качественного компонента. В данном случае это будут сопротивления. Их точность обычно 5%, в лучшем случае 0.5% (1/200), хотя это еще поискать специально надо, значит больше 8 бит (1/256) ставить при создании карты на этих принципах смысла не имеет. Т.е. неправильное соотношение сопротивления двух резисторов соответствующих старшим битам будет давать гораздо большее искажение, чем полезный сигнал с младших битов.

PS: 2EdGull - кстати, обрати внимание на выбор резисторов, если будет 5% точность, то смысл будет только от первых (1/20 ~ 1/16-1/32) 4-5 бит, остальное на растопку :)

Re: Звуковая карта для МиниБота и МиниБота-ПРО

MiBBiM » 18 июл 2008, 23:19

Можно проект протеуса?

Re: Звуковая карта для МиниБота и МиниБота-ПРО

Кирилл » 18 июл 2008, 23:42

А может лучше все таки микросхемку ЦАП управляемую по SPI поставить вместо этого резисторного огорода например? :wink:

Re: Звуковая карта для МиниБота и МиниБота-ПРО

MiBBiM » 19 июл 2008, 00:08

В протеусе обвязку мк надо рисовать, или он так заработает?
Так заработает
Последний раз редактировалось MiBBiM 19 июл 2008, 10:45, всего редактировалось 1 раз.


Rambler\'s Top100 Mail.ru counter