اطلاعیه

Collapse
No announcement yet.

پخش صدا با avr

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

    پخش صدا با avr

    سلام
    برای پخش صدا با avr اول باید فایل صوتی را تبدیل به wav کنیم
    برای این کار از این نرم افزار استفاده می کنیم Switch Sound File Converter




    مر حله ی بد باید تنظیمات فایل wav را در حالت pcm قرار بدهیم



    حال باید فایل تبدیل به کد سی شود
    نرم افزار WinHex را دانلود و نصب کنید . فایل صدای wav با این نرم افزار باز کنید

    ;
    با این کار فایل هکز صدا تبدیل به کاراکتر شد که در کیبرد کامپیوتر ذخیره شد ه
    حال به محیط برنامه نویسی میریم و پیس می زنیم
    نکته ی اخر که باید در نظر بگیرید نام متغییر را تغییر دهید
    فرض کنید می خواهید یک متغییر فلش تغریف کنید مثلا در کد ویژن باید ابتدای تعریف باید flash باشد و کمپایل های دیگر مثلا cont ...
    تقریبا 90 درصد کار برای پخش صدا را انجام دادید
    در این مرحله باید یک تایمر هش بیتی میکرو را در حالت پی دبلیو ام تعریف کنید . و بایت به بایت این متغییر را در ocrx قرار دهید و زمان 160 میکرو ثانیه صبر کنید
    سخت افزار :
    خروجی pwm را به یک مقاومت 10 کیلو و یک خازن مثلا 10 نانو یا 33 نانو یا هر چی به زمین وصل کنید و در نهایت سیگنال خروجی را به امپریفایر بدهید .
    نکته ی نهایی برای کیفیت بالا تر تایمر را با ماکزیمم فرکانس کلاک راه اندازی کنید و کلاک میکرو حداکثر قرار دهید .

    #2
    پاسخ : پخش صدا با avr

    راستش من خودم یه پروژه ی پخش صدای کامل برای atmega 8 و آردوینو نوشتم انداختم رو گیت هاب
    حالا که بحثش شد لینکشو میذارم اینجا:

    همونجا چن تا کتابخونه خوب برای آردوینو و به خصوص atmega8 نوشتم اونام یه نگاه بندازین دوستان

    Sent from my SM-A305F using Tapatalk

    دیدگاه


      #3
      پاسخ : پخش صدا با avr

      توضیح خیلی خوب و کاملی بود. من تازگی با بحث پخش فایل wav به کمک pwm درگیر شدم و خیلی به اطلاعاتم مطمئن نیستم. چند تا سوال:
      1. اگه بخوایم نمونه گیری رو هر 160 میکرو ثانیه انجام بدیم، فرکانش نهاییمون میشه 6250 هرتز که 250 تا بیشتر از sample rate فایل wav هست. اگه اشتباه نکنم، این قضیه باعث میشه صدا کمی سریع تر (یا زیر تر) پخش بشه. درسته؟
      2. اینکه 160 میکروثانیه صبر کنیم یعنی چی؟ احتمالا منظور با استفاده از یه تایمر هست درسته؟ چون استفاده از delay عملا برنامه رو فریز میکنه.
      3. بیشتر میکروها تا فرکانس 8 مگاهرتز رو پتشبانی می کنن. یعنی یه تایمر 8 بیتی با مقدار 0، هر 32 میکروثانیه یه بار و تایمر 16 بیتی هر 8192 میکرو ثانیه یه بار ovf میشه. با این حساب اگه قرار باشه با فرکانس 6000 هرتز نمونه برداری کنیم بهتر نیست از تایمر 16 بیتی استفاده بشه (هر جا که در این مورد خوندم، از تایمر 8 بیتی استفاده می کنن، صرف نظر از اینکه چه sample rate رو میخوان! چرا؟!).
      4. سوال بعدی اینکه این روش فقط برای ذخیره صداهای کوتاه هست؟ یا فایل های صوتی بزرگ رو هم میشه به همین روش پخش کرد؟ اگه درست فهمیده باشم ما هر ثانیه 6000 بایت باید از حافظه یه داده جدید بخونیم و تو وقفه تایمر، مقدار جدید OCRx مربوط به پالسهای خروجی 160 میکروثانیه بعدی رو بهش بدیم. با این حساب مثلا برای یه میکروی atmega16 فکر نمیکنم بشه بیشتر از 2-3 ثانیه داده ذخیره کرد (12 کیلوبایت). درسته؟

      دلیل: ادغام دو پست برای جلوگیری از اسپم

      متاسفانه نتونستم کد شما رو ببینم :(
      کد یا کتابخونه ای که با atmel studio بشه اجرا کرد ندارین؟

      دیدگاه

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