اطلاعیه

Collapse
No announcement yet.

پخش صوت با Atmega16

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پخش صوت با Atmega16

    سلام بر عزیزان.
    خواستم بدونم چطوری میشه یه صدا رو با avr پخش کرد؟
    البته من با پروژه های تولید نت موسیقی کار کردم ولی میخوام فایل wav رو بخونم و پخش کنم.البته تو خوندن از مموری مشکل ندارم،فقط مشکل تو تبدیل بایتهای خونده شده به فرکانس صوتیه.
    اگه کسی بلده کامل توضیح بده تا هم من مشکلم حل بشه هم بقیه استفاده کنن.

    #2
    پاسخ : پخش صوت با Atmega16

    دوست عزیز برای تبدیل دیتای گرفته شده به صوت شما نیاز به این داری که دیتای دیجیتال رو به انالوگ تبدیل کنی.

    برای این کار میتونی از دو روش استفاده کنی که بسته به کارت میتونی یکی رو انتخاب کنی.

    اگه کیفیت صدا برات خیلی مهمه باید از یه ای سی مبدل دیجیتال به آنالوگ (D\A) استفاده کنی که خود این بستگی به این داره که دیتای صوتی که از مموری میخونی با چه فرکانس و چند بیتیه ، که بسته به این، مبدل D\A رو انتخاب میکنی. حالا اگه از این روش استفاده میکنی خیلی راحت تایمر میکرو رو با وقفه ی سر ریزش فعال میکنی و فرکانس تایمر رو بسته به فرکانس نمونه برداری سیگنال صوتت تنظیم میکنی.

    روش دوم استفاده از مد pwm میکرو هست تو این روش نیازی به مبدل D\A نیست کافیه تایمر یک میکرو رو در مد pwm با وقفه ی سر ریزش فعال کنی مثل روش قبل فرکانس تایمر رو بسته به فرکانی نمونه برداری صوتت انتخاب میکنی. حالا با هر بار سر ریز شدن تایمر یه وقفه ای رخ میده که شما باید تو زیر روال وقفه دیتای صوت رو از مموری بخونی و جایگزین رجیستر OCR تایمر کنی . با این کار بسته به مقدار دیتای صوت دیتوی سایکل موج pwm تغییر میکنه حالا این موج رو باید خارج میکرو فیلتر و تقویت کنی. میتونی از مدار زیر جهت فیلترینگ و تقویت استفاده کنی:



    تنظیم تایمرت هم اگه دیتای صوتت 8 بیتی و فرکانس نمونه برداریش 8 کیلو هرتزه میتونه به صورت زیر باشه:

    کد:
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 2000.000 kHz
    // Mode: Fast PWM top=00FFh
    // OC1A output: Inverted
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 Overflow Interrupt: On
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0xC1;
    TCCR1B=0x0A;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;




    [glow=red,2,300]گرد هم آمدن شروع است.با هم ماندن پیشرفت است.با هم کار کردن موفقیت است.[/glow]
    [img width=98 height=100]http://s3.picofile.com/file/7407857311/icon3.png[/img]

    دیدگاه


      #3
      پاسخ : پخش صوت با Atmega16

      خیلی ممنون از راهنماییت.اگه لطف کنی و سورس همین قسمت وقفه برنامه رو بذاری واقعا شاهکار کردی!!!!!!!!!!

      دیدگاه


        #4
        پاسخ : پخش صوت با Atmega16

        رئیس جان تو انجمن مطلب عین همین که میخواهی هست یه سرچ بزن
        همیشه به یاد خدا باش !

        دیدگاه


          #5
          پاسخ : پخش صوت با Atmega16

          سلام به همه دوستان
          دوستان من میخوام یه MP3 پلیر بسازم که تنظیمش کنم سر ساعت یه آهنگ خاصی رو از روی رم پخش کنه البته برنامه رو با نرم افزار کدویژن میخوام بنویسم
          تو نت خیلی گشتم ولی چیزایی هست که ادم رو گیج میکنه، از ماژول VS1003 هم استفاده کنم که کیفیت صدا خوب باشه، یه سری ماژول ها پیدا کردم مثل :

          http://eshop.eca.ir/%D9%85%D8%AD%D8%B5%D9%88%D9%84%D8%A7%D8%AA-eca/1326-%D9%85%D8%A7%DA%98%D9%88%D9%84-%D8%B6%D8%A8%D8%B7-%D9%88-%D9%BE%D8%AE%D8%B4-%D8%B5%D8%AF%D8%A7-vs1003.html

          این ماژول با SPI کار میکنه و MMC هم با SPI کار میکنه، میشه دوتاشون رو به SPI یه میکرو وصل کرد؟؟ جواب میده؟؟

          دیدگاه


            #6
            پاسخ : پخش صوت با Atmega16

            نوشته اصلی توسط vahidazizi90
            دوستان من میخوام یه MP3 پلیر بسازم ...
            تو نت خیلی گشتم ولی چیزایی هست که ادم رو گیج میکنه، از ماژول VS1003 هم استفاده کنم که کیفیت صدا خوب باشه، یه سری ماژول ها پیدا کردم مثل :
            ...
            به تاپیک زیر مراجعه کنید؛ پروژه mp3 player جناب مهندس اسدی (POLESTAR)
            http://www.eca.ir/forum2/index.php?topic=47701.0
            موفق باشید
            امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

            دیدگاه


              #7
              پاسخ : پخش صوت با Atmega16

              نوشته اصلی توسط حمیدجان
              دوست عزیز برای تبدیل دیتای گرفته شده به صوت شما نیاز به این داری که دیتای دیجیتال رو به انالوگ تبدیل کنی.

              برای این کار میتونی از دو روش استفاده کنی که بسته به کارت میتونی یکی رو انتخاب کنی.

              اگه کیفیت صدا برات خیلی مهمه باید از یه ای سی مبدل دیجیتال به آنالوگ (D\A) استفاده کنی که خود این بستگی به این داره که دیتای صوتی که از مموری میخونی با چه فرکانس و چند بیتیه ، که بسته به این، مبدل D\A رو انتخاب میکنی. حالا اگه از این روش استفاده میکنی خیلی راحت تایمر میکرو رو با وقفه ی سر ریزش فعال میکنی و فرکانس تایمر رو بسته به فرکانس نمونه برداری سیگنال صوتت تنظیم میکنی.

              روش دوم استفاده از مد pwm میکرو هست تو این روش نیازی به مبدل D\A نیست کافیه تایمر یک میکرو رو در مد pwm با وقفه ی سر ریزش فعال کنی مثل روش قبل فرکانس تایمر رو بسته به فرکانی نمونه برداری صوتت انتخاب میکنی. حالا با هر بار سر ریز شدن تایمر یه وقفه ای رخ میده که شما باید تو زیر روال وقفه دیتای صوت رو از مموری بخونی و جایگزین رجیستر OCR تایمر کنی . با این کار بسته به مقدار دیتای صوت دیتوی سایکل موج pwm تغییر میکنه حالا این موج رو باید خارج میکرو فیلتر و تقویت کنی. میتونی از مدار زیر جهت فیلترینگ و تقویت استفاده کنی:



              تنظیم تایمرت هم اگه دیتای صوتت 8 بیتی و فرکانس نمونه برداریش 8 کیلو هرتزه میتونه به صورت زیر باشه:

              کد:
              // Timer/Counter 1 initialization
              // Clock source: System Clock
              // Clock value: 2000.000 kHz
              // Mode: Fast PWM top=00FFh
              // OC1A output: Inverted
              // OC1B output: Discon.
              // Noise Canceler: Off
              // Input Capture on Falling Edge
              // Timer1 Overflow Interrupt: On
              // Input Capture Interrupt: Off
              // Compare A Match Interrupt: Off
              // Compare B Match Interrupt: Off
              TCCR1A=0xC1;
              TCCR1B=0x0A;
              TCNT1H=0x00;
              TCNT1L=0x00;
              ICR1H=0x00;
              ICR1L=0x00;
              OCR1AH=0x00;
              OCR1AL=0x00;
              OCR1BH=0x00;
              OCR1BL=0x00;
              دوست عزیز منون میشم اگه یه توضیح کلی راجع به نحوه تبدیل صوت به داده الکترونیکی(چه دیجیتال چه انالوگ)اگه مقدوره بدی صوت مشخصه اش شدت هست و فرکانس و اینکه پی دبلیو ام چطور حامل این اطلاعات هست.
              کرشمه ای کن و بازار ساحری بشکن @-}--@-}--@-}--به غمزه رونق و ناموس سامری بشکن
              یاصاحب الزمان(عج)

              دیدگاه


                #8
                پاسخ : پخش صوت با Atmega16

                نوشته اصلی توسط حمیدجان
                دوست عزیز برای تبدیل دیتای گرفته شده به صوت شما نیاز به این داری که دیتای دیجیتال رو به انالوگ تبدیل کنی.

                برای این کار میتونی از دو روش استفاده کنی که بسته به کارت میتونی یکی رو انتخاب کنی.

                اگه کیفیت صدا برات خیلی مهمه باید از یه ای سی مبدل دیجیتال به آنالوگ (D\A) استفاده کنی که خود این بستگی به این داره که دیتای صوتی که از مموری میخونی با چه فرکانس و چند بیتیه ، که بسته به این، مبدل D\A رو انتخاب میکنی. حالا اگه از این روش استفاده میکنی خیلی راحت تایمر میکرو رو با وقفه ی سر ریزش فعال میکنی و فرکانس تایمر رو بسته به فرکانس نمونه برداری سیگنال صوتت تنظیم میکنی.

                روش دوم استفاده از مد pwm میکرو هست تو این روش نیازی به مبدل D\A نیست کافیه تایمر یک میکرو رو در مد pwm با وقفه ی سر ریزش فعال کنی مثل روش قبل فرکانس تایمر رو بسته به فرکانی نمونه برداری صوتت انتخاب میکنی. حالا با هر بار سر ریز شدن تایمر یه وقفه ای رخ میده که شما باید تو زیر روال وقفه دیتای صوت رو از مموری بخونی و جایگزین رجیستر OCR تایمر کنی . با این کار بسته به مقدار دیتای صوت دیتوی سایکل موج pwm تغییر میکنه حالا این موج رو باید خارج میکرو فیلتر و تقویت کنی. میتونی از مدار زیر جهت فیلترینگ و تقویت استفاده کنی:



                تنظیم تایمرت هم اگه دیتای صوتت 8 بیتی و فرکانس نمونه برداریش 8 کیلو هرتزه میتونه به صورت زیر باشه:

                کد:
                // Timer/Counter 1 initialization
                // Clock source: System Clock
                // Clock value: 2000.000 kHz
                // Mode: Fast PWM top=00FFh
                // OC1A output: Inverted
                // OC1B output: Discon.
                // Noise Canceler: Off
                // Input Capture on Falling Edge
                // Timer1 Overflow Interrupt: On
                // Input Capture Interrupt: Off
                // Compare A Match Interrupt: Off
                // Compare B Match Interrupt: Off
                TCCR1A=0xC1;
                TCCR1B=0x0A;
                TCNT1H=0x00;
                TCNT1L=0x00;
                ICR1H=0x00;
                ICR1L=0x00;
                OCR1AH=0x00;
                OCR1AL=0x00;
                OCR1BH=0x00;
                OCR1BL=0x00;
                آقا من هم می خوام یک برنامه بنویسم که وقتی متغیر هی افزایش پیدا می کند یا یک ترک از حافظه پخش شه یا نشه کیفیت انچنان هم نمی خوام ولی کسی که گوش می ده بفهمه چی داره پخش می شه حجم کل ترک های صوتم هم کمه.فکر کنم روش دوم رو لازم دارم ولی توضیحتون رو یک کم ابتدایی تر می گین؟
                منهم منتظر منتظران مهدی ام .

                دیدگاه


                  #9
                  پاسخ : پخش صوت با Atmega16

                  با سلام خدمت دوستان
                  من میخوام با استفاده از ADC میکرو صدای میکروفون رو گرفته و اون رو با استفاده از یه تقویت کننده و بلندگو پخش کنم
                  ولی مشکلی که دارم خیلی صدلی خش خش داره وقتی پشت میکروفون کسی حرف میزنه فقط میشه گفت دامنه خش خش بالا میره و صدای مشخصی بیرون نمیاد
                  اگه میشه دوستان راهنمایی کنن
                  ممنون میشم
                  اینم برنامه ایی که من نوشتم
                  یه توضیح هم بدم که از DAC هشت بیتی قبل از تقویت کننده و میکروفون استفاده کردم و اونو وصل کردم به پورت D میکرو

                  #include <mega32a.h>

                  #include <delay.h>

                  #define ADC_VREF_TYPE ((1<<REFS1) | (1<<REFS0) | (1<<ADLAR))


                  unsigned char read_adc(unsigned char adc_input)
                  {
                  ADMUX=adc_input | ADC_VREF_TYPE;
                  delay_us(10);
                  ADCSRA|=(1<<ADSC);
                  while ((ADCSRA & (1<<ADIF))==0);
                  ADCSRA|=(1<<ADIF);
                  return ADCH;
                  }

                  void main(void)
                  {


                  DDRD=0xff;


                  ADMUX=ADC_VREF_TYPE;
                  ADCSRA=(1<<ADEN) | (0<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
                  SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);



                  while (1)
                  {
                  PORTD=read_adc(0);
                  delay_ms(1);

                  }
                  }
                  جدیدترین ویرایش توسط yasin136n; ۱۵:۳۲ ۱۳۹۷/۰۴/۰۹.

                  دیدگاه


                    #10
                    پاسخ : پخش صوت با Atmega16

                    نوشته اصلی توسط yasin136n نمایش پست ها
                    با سلام خدمت دوستان
                    من میخوام با استفاده از ADC میکرو صدای میکروفون رو گرفته و اون رو با استفاده از یه تقویت کننده و بلندگو پخش کنم
                    ولی مشکلی که دارم خیلی صدلی خش خش داره وقتی پشت میکروفون کسی حرف میزنه فقط میشه گفت دامنه خش خش بالا میره و صدای مشخصی بیرون نمیاد
                    اگه میشه دوستان راهنمایی کنن
                    ممنون میشم
                    اینم برنامه ایی که من نوشتم
                    یه توضیح هم بدم که از DAC هشت بیتی قبل از تقویت کننده و میکروفون استفاده کردم و اونو وصل کردم به پورت D میکرو
                    سلام
                    من همین امروز با میکرو آرم LPC1768 دقیقا همین کاری که شما انجام دادی رو انجام دادم با این تفاوت که خروجی صدای کامپیوتر رو مستقیم به میکرو دادم
                    و DAC خود میکرو رو بافر کردم ( تقویت جریان ) بعد دادم به آمپلی و مشکلی نبوده تا الان
                    اول اون تاخیر 1 میلی ثانیه رو بردار خود ADC میکرو همین جوریش سرعتش کمه حالا شما هم یه تاخیر اضافه کردید
                    دوم شما مطمئن شو که خروجی سیگنال میکروفون معتبر هست و نویز های شدید وجود نداره
                    مثلا میتونی یه سیگنال سینوسی رو به اسپیکر بدی بعد خروج میکروفون باید همون سیگنال سینوسی باشه
                    اگه این طوری بود یعنی درسته
                    از آی سی DAC مطمئن هستی یعنی تستش کردی سالمه درست کار میده ؟؟؟

                    ضمنا شماتیک رو حتما بزار
                    آرزوی سرافرازی برای ایران عزیز . . .


                    دیدگاه


                      #11
                      پاسخ : پخش صوت با Atmega16

                      نوشته اصلی توسط rezamajdi نمایش پست ها
                      سلام
                      من همین امروز با میکرو آرم LPC1768 دقیقا همین کاری که شما انجام دادی رو انجام دادم با این تفاوت که خروجی صدای کامپیوتر رو مستقیم به میکرو دادم
                      و DAC خود میکرو رو بافر کردم ( تقویت جریان ) بعد دادم به آمپلی و مشکلی نبوده تا الان
                      اول اون تاخیر 1 میلی ثانیه رو بردار خود ADC میکرو همین جوریش سرعتش کمه حالا شما هم یه تاخیر اضافه کردید
                      دوم شما مطمئن شو که خروجی سیگنال میکروفون معتبر هست و نویز های شدید وجود نداره
                      مثلا میتونی یه سیگنال سینوسی رو به اسپیکر بدی بعد خروج میکروفون باید همون سیگنال سینوسی باشه
                      اگه این طوری بود یعنی درسته
                      از آی سی DAC مطمئن هستی یعنی تستش کردی سالمه درست کار میده ؟؟؟

                      ضمنا شماتیک رو حتما بزار
                      ممنون
                      یه سوالی که دارم چه جوری صدای کامپیوتر رو به میکرو دادی ؟؟؟
                      چه جوری میشه یه DAC رو به بافر تبدیل کرد؟؟دلیل اینکارت چی بوده؟؟
                      خروجی سیگنال میکروفون درسته از ماژول میکروفون موجود تو فروشگاه استفاده کردم
                      چیزی که مطمن نیستم همین DAC هستش طبق دیتاشیتش مدارشو بستم ولی خیلی مطمن نیستم

                      دیدگاه


                        #12
                        پاسخ : پخش صوت با Atmega16

                        نوشته اصلی توسط yasin136n نمایش پست ها
                        ممنون
                        یه سوالی که دارم چه جوری صدای کامپیوتر رو به میکرو دادی ؟؟؟
                        چه جوری میشه یه DAC رو به بافر تبدیل کرد؟؟دلیل اینکارت چی بوده؟؟
                        خروجی سیگنال میکروفون درسته از ماژول میکروفون موجود تو فروشگاه استفاده کردم
                        چیزی که مطمن نیستم همین DAC هستش طبق دیتاشیتش مدارشو بستم ولی خیلی مطمن نیستم
                        شما یه فیش بگیر وصل کن به جک صدای خروجی کامپیوتر سپس دوسیم مربوط به سیگنال رو که یکیش زمین ( پتانسیل صفر ) و یکیش خود سیگنال هست رو به میکرو وصل کن
                        یعنی زمین رو به زمین مدار و سیگنال رو به adc میکرو بده
                        نکته : هر فیش صدا معمولا سه تا سیم داره یکیش زمینه دوتای دیگه یکیش سیگنال کانال چپ یکیش کانال راست شما هر کانال رو که خواستی بده به adc میکرو
                        یه نکته دیگه این که قبل از این که بدی میکرو باید سیگنال رو شیفت بدی بالا یعنی به اندازه ولتاژ رفرنس adc تقسیم بر دو که میشه 2.5 باید شیفت بدی بالا
                        که این کار با دوتا مقاومت برابر که به صورت سری بسته شدن قابل اجرا هست
                        سیگنال رو با یه خازن مثلا 10 میکروفاراد به پایه وسطی مقاومت ها وصل میکنید سپس به adc میکرو میدی

                        موفق باشید
                        آرزوی سرافرازی برای ایران عزیز . . .


                        دیدگاه


                          #13
                          پاسخ : پخش صوت با Atmega16

                          نوشته اصلی توسط rezamajdi نمایش پست ها
                          شما یه فیش بگیر وصل کن به جک صدای خروجی کامپیوتر سپس دوسیم مربوط به سیگنال رو که یکیش زمین ( پتانسیل صفر ) و یکیش خود سیگنال هست رو به میکرو وصل کن
                          یعنی زمین رو به زمین مدار و سیگنال رو به adc میکرو بده
                          نکته : هر فیش صدا معمولا سه تا سیم داره یکیش زمینه دوتای دیگه یکیش سیگنال کانال چپ یکیش کانال راست شما هر کانال رو که خواستی بده به adc میکرو
                          یه نکته دیگه این که قبل از این که بدی میکرو باید سیگنال رو شیفت بدی بالا یعنی به اندازه ولتاژ رفرنس adc تقسیم بر دو که میشه 2.5 باید شیفت بدی بالا
                          که این کار با دوتا مقاومت برابر که به صورت سری بسته شدن قابل اجرا هست
                          سیگنال رو با یه خازن مثلا 10 میکروفاراد به پایه وسطی مقاومت ها وصل میکنید سپس به adc میکرو میدی

                          موفق باشید
                          ممنون از پاسختون
                          میشه بگین چرا از خازن استفاده کردین ؟؟
                          به خاطر فیلتر و اینجور چیزا ؟

                          دیدگاه


                            #14
                            پاسخ : پخش صوت با Atmega16

                            نوشته اصلی توسط yasin136n نمایش پست ها
                            ممنون از پاسختون
                            میشه بگین چرا از خازن استفاده کردین ؟؟
                            به خاطر فیلتر و اینجور چیزا ؟
                            نباید سیگنال dc وارد منبع تولید موج بشه برای همین یه خازن میزاریم
                            در مورد dac هم که تو پست قبلی پرسیده بودی باید بگم خود میکرو lpc1768 این واحد رو داره حالا چون avr نداره باید بری یه آی سی dac بگیری
                            یه جور دیگه هم میتونی dac درست کنی که بعدا برات میگم
                            آرزوی سرافرازی برای ایران عزیز . . .


                            دیدگاه

                            لطفا صبر کنید...
                            X