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

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

Сообщение 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 КиБ) Просмотров: 7482
1215466034_schematic-sound-sens_v2.gif
схема микрофонного усилителя
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

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

Сообщение EdGull » 18 июл 2008, 08:46

Коллеги, а как будем громкость регулировать?
программно получится?
или прийдется еще один цап городить?
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

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

Сообщение =DeaD= » 18 июл 2008, 08:56

IMHO лучше программно, ну или переменник воткнуть на плату настроечный дополнительно. А то такими темпами все ноги МК уйдут на всякую обвязку типа памяти, экрана, звука и будет прямо микро ПК а не робот :) если бы на цену не заморачивались - налепили бы везде дешевых МК, чтобы все девайсы были на шине i2c.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение blindman » 18 июл 2008, 09:21

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

А нельзя для громкости ШИМ использовать? Поставить интегрирующую цепочку и еще один транзистор. Программно - не лучшее решение. И так разрешение ЦАП невысокое.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение EdGull » 18 июл 2008, 09:26

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

Добавлено спустя 2 минуты 39 секунд:
только в коде порт мне смените плиз
и хекс выложите
сёдня вечером буду пробывать запускать
Вложения
SoundCard.GIF
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

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

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

Есть такая тема - цифровой потенциометр. Работает как обычный петеменник с управлением от МК. Самое то громкость регулировать!
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

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

Сообщение Myp » 18 июл 2008, 17:36

а какая у него скорость?
мож нафик ковокс этот?
сразу 1 резистором рулить...
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

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

Сообщение blindman » 18 июл 2008, 17:52

Кстати, они еще и сдвоенные бывают. Вот вам и регулятор громкости сразу. А по скорости никаких проблем - они по I2C или SPI управляются. По SPI лучше - на хрена там на I2C второй мастер
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение alegz » 18 июл 2008, 18:26

было бы круто если бы ктонить осилил собрать и скомпелировать эту схемку... а вы опять начали говорить о планах какихто )))
я вот сеня весь день пытался найти и поработать с нормальным исходником на си fat16 .... кстати... почему в сорцах которые в теме ничего нет про это дело?!
Аватара пользователя
alegz
 
Сообщения: 63
Зарегистрирован: 01 июн 2008, 08:48
Откуда: Новосибирск
прог. языки: С++, Asm, PHP

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

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

А есть и оперционники с цифровой регулировкой коэффицента усиления...
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

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

Сообщение MiBBiM » 18 июл 2008, 23:14

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

Добавлено спустя 24 минуты 33 секунды:
Не смог найти время переключения ножек мк 1-0 и 0-1. Быть может частоту дискредитации побольше дать?
Tomorrow will be. Better
Аватара пользователя
MiBBiM
 
Сообщения: 1866
Зарегистрирован: 29 окт 2007, 18:11
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript

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 бит, остальное на растопку :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение MiBBiM » 18 июл 2008, 23:19

Можно проект протеуса?
Tomorrow will be. Better
Аватара пользователя
MiBBiM
 
Сообщения: 1866
Зарегистрирован: 29 окт 2007, 18:11
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript

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

Сообщение Кирилл » 18 июл 2008, 23:42

А может лучше все таки микросхемку ЦАП управляемую по SPI поставить вместо этого резисторного огорода например? :wink:
Кирилл
 
Сообщения: 432
Зарегистрирован: 20 окт 2005, 16:11
Откуда: Вильнюс,Литва
прог. языки: Basic

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

Сообщение MiBBiM » 19 июл 2008, 00:08

В протеусе обвязку мк надо рисовать, или он так заработает?
Так заработает
Последний раз редактировалось MiBBiM 19 июл 2008, 10:45, всего редактировалось 1 раз.
Tomorrow will be. Better
Аватара пользователя
MiBBiM
 
Сообщения: 1866
Зарегистрирован: 29 окт 2007, 18:11
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript

След.

Вернуться в Электроника

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3