اطلاعیه

Collapse
No announcement yet.

ایجاد ملودی موسیقی با AVR

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

    ایجاد ملودی موسیقی با AVR

    به عنوان مقدمه ای برای بحث تولید موسیقی با AVR، سورس بسیار ساده تولید یک آژیر خطر روی یکی از پین های خروجی mega8515 با کامپایلر IAR نوشته شده است. فرض بر این است که کلاک داخلی 1 مگاهرتز فعال باشد. توضیح برنامه به این صورت است که هر دو TIMER در مد CTC کار می کنند و TIMER0 وظیفه toggle کردن پین خروجی تولید صدا را بر عهده دارد و TIMER1 فرکانس تولید شده توسط TIMER0 را تغییر می دهد. با تغییر مقادیر ابتدا و انتهای دو تایمر می توان به صداهای مختلفی دست پیدا کرد و با کمی تغییر نرم افزار و اضافه کردن چند شرط می توان آژیر چند صدا (مانند آژیر دزدگیر ماشین) را ایجاد کرد. برای وصل یک بلندگو به خروجی میکروکنترلر باید از یک طبقه بافر ترانزیستوری استفاده شود تا صدای بلند و رسایی برای آژیر خطر ایجاد شود.
    این نرم افزار برای هر شماره دیگری از خانواده AVR که بیش از یک تایمر داشته باشد با تغییرات جزئی قابل استفاده است و برای سایر کامپایلرها هم میتوان از همین منطق برنامه استفاده کرد .

    #include<ioavr.h>
    /* written for ATMEGA8515
    CLOCK = 1MHz
    OUTPUT PIN = PA0 */
    void main( void )
    {
    DDRA =0X01; // set PA0 to output
    OCR0=90;
    TCCR0=0X0A;
    OCR1A=10000;
    TCCR1B=0X09;

    TIMSK=0X41;
    asm("sei"
    while(1);
    }

    #pragma vector=TIMER0_COMP_vect
    __interrupt void TIMER0_compare()
    {
    if (PORTA==0X01) PORTA=0X00;
    else PORTA=0X01;
    }

    #pragma vector=TIMER1_COMPA_vect
    __interrupt void TIMER1_compareA()
    {
    if (OCR0==124) OCR0=90;
    else OCR0+=1;
    }
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    #2
    پاسخ : ایجاد ملودی موسیقی با AVR

    مبانی تئوری تولید ملودی های موسیقی در تاپیک زیر بیان شده است:

    http://www.eca.ir/forum2/index.php?topic=37196.0

    برای نشان دادن روش پیاده سازی عملی این تئوری، ملودی موسیقی سرود " ای ایران " ساخته مرحوم روح الله خالقی را در برنامه ای پیاده سازی کرده ام. این برنامه با فرض فعال بودن اسیلاتور 1 مگاهرتز داخلی، در خروجی PB0 شکل موج لازم را تولید می کند و برای شنیدن آن کافی است یک بلندگو از طریق یک ترانزیستور به پورت متصل شود. به این منظور خروجی PB0 را بدون مقاومت به بیس یک ترانزیستور PNP و emitter آن را به بلندگو متصل کنید و سر دیگر بلندگو هم به ولتاژ مناسب(مثلا 5 ولت) وصل می شود.کلکتور ترانزیستور PNP هم باید به زمین متصل شود.
    از آنجایی که این برنامه با IAR نوشته شده و ظاهرا این کامپایلر چندان برای دوستان آشنا نیست، در مرحله اول فایل HEX را قرار می دهم و چنانچه دوستان علاقه مند باشند نسخه BASCOM و code vision آنرا بعد از نوشتن و تست، در سایت قرار خواهم داد. فعلا برای MEGA16 و MEGA32 ، فایل های HEX قرار داده شده است.

    نسخه MEGA16

    http://electronicdesigner.persiangig...r/IRAN_M16.HEX

    نسخه MEGA32

    http://electronicdesigner.persiangig.com/other/IRAN_M32.HEX

    پی نوشت:

    http://www.aparat.com/v/w5I1E
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      #3
      پاسخ : ایجاد ملودی موسیقی با AVR

      سلام
      دستت درد نکنه طراح
      میشه کدویژن " ای ایران " را بگذارید
      بعد یک خواهش دیگه اگر لطف کنی از مدار بسته شده موسیقی سرود " ای ایران " یک فیلم یا این که صدایش را ضبط کنید و بگذارید ممنون میشم

      دیدگاه


        #4
        پاسخ : ایجاد ملودی موسیقی با AVR

        اگه نحوه برنامه نویسی با بسکام رو بزاری مارو بدجور شرمنده میآ‌کنی
        سایت لاچینی یه پروژه ملودی با AVR گذاشته ولی از تایمر استفاده نکرده ولی مشکلش اینه که اگه فرکانس میکرو رو تغییر بدیم ، آهنگ میآ‌ریزه بهم(انگار که روی دور تند پخش میآ‌شه)

        دیدگاه


          #5
          پاسخ : ایجاد ملودی موسیقی با AVR

          نسخه BASCOM تولید ملودی "ای ایران" در زیر آورده شده است.
          نکته قابل توجه این است که در عمل با وجود آنکه همان صدا با همان فرکانس و طول نت ها تولید می شود ولی تمیزی صدای تولید شده مانند نرم افزار نوشته شده با IAR و اسمبلی نیست( هر دو نرم افزار نوشته و تست شده است) و در متن ملودی تولید شده، صدای نویز مانند خفیفی ایجاد می شود.
          با توجه به اینکه این اولین برنامه ای است که به زبان BASCOM می نویسم و تاکنون لزومی به کار با آن نبوده( و بعد از این هم نخواهد بود) ، از دوستانی که در این امر صاحب تجربه هستند درخواست می کنم که به متن برنامه توجه کنند و اگر نکته ای برای اصلاح در آن وجود دارد متذکر شوند تا آن را بهینه کنم.
          همچنین یکی از دوستان در مورد مسئله تغییر کلاک فرمودند که باید گفت در اینجا هم با افزایش کلاک، فرکانس و طول نت ها تغییر می کند و باید مقادیر را اصلاح کرد و یا یک ضریب را برای لحاظ تغییر کلاک اعمال نمود.

          ساختار برنامه به گونه ای است که با تغییر جدول نت ها می توان هر موسیقی دلخواهی را تولید نمود و کافی
          است نت مورد نظر را به همراه طول آن در جدول بجای نت فعلی وارد کنید.

          کد:
          $regfile = "M32def.dat"
          $crystal = 1000000
          
          Const Sil = 0
          Const Sol1 = 1
          Const Sol1_ = 2
          Const La1 = 3
          Const La1_ = 4
          Const Si1 = 5
          Const Do2 = 6
          Const Do2_ = 7
          Const Re2 = 8
          Const Re2_ = 9
          Const Mi2 = 10
          Const Fa2 = 11
          Const Fa2_ = 12
          Const Sol2 = 13
          Const Sol2_ = 14
          Const La2 = 15
          Const La2_ = 16
          Const Si2 = 17
          Const Do3 = 18
          Const Do3_ = 19
          Const Re3 = 20
          Const Re3_ = 21
          Const D1 = 1
          Const D2 = 2
          Const D3 = 3
          Const D4 = 4
          Const D6 = 6
          Const D7 = 7
          Const D8 = 8
          Const D16 = 16
          Const D32 = 32
          Const End_of_table = 255
          
          Dim Note_f As Bit
          Dim Duration As Byte
          Dim I As Word
          Dim J As Byte
          Dim Table_value As Byte
          Dim Ocr1a_temp As Word
          Speaker Alias Portb.0
          
          Note_f = 0
          I = 0
          
          Config Pinb.0 = Output
          Config Timer0 = Timer , Prescale = 1024 , Clear Timer = 1
          Config Timer1 = Timer , Prescale = 1 , Clear Timer = 1
          Ocr0 = &H40
          On Oc0 Timer0_compare_isr
          On Oc1a Timer1_comparea_isr
          Enable Oc0
          Enable Oc1a
          Enable Interrupts
          
          Loop1:
          
          Table_value = Lookup(i , Note_table)
          If Table_value = End_of_table Then
          I = 0
          Goto Loop1
          End If
          If Table_value = Sil Then Goto Silent_play
          I = I + 1
          Disable Interrupts
          Note_f = 1
          Duration = Lookup(i , Note_table)
          I = I - 1
          J = Lookup(i , Note_table)
          J = J - 1
          Timer1 = 0
          Ocr1a_temp = Lookup(j , Ocr1a_value_table)
          Ocr1a = Ocr1a_temp
          Enable Interrupts
          Do
          Loop Until Duration = 0
          I = I + 2
          Goto Loop1
          
          Silent_play:
          Note_f = 0
          I = I + 1
          Duration = Lookup(i , Note_table)
          Do
          Loop Until Duration = 0
          I = I + 1
          Goto Loop1
          
          Timer0_compare_isr:
          If Duration > 0 Then Duration = Duration - 1
          Return
          
          Timer1_comparea_isr:
           If Note_f = 1 Then Toggle Speaker
          Return
          
          Note_table:
          
          Data Re2 , D4 , La2 , D1 , Sil , D1 , La2 , D1 , Sil , D1 , La2 , D4 , Re2 , D3
          Data Sil , D1 , Re2 , D4 , La2 , D1 , Sil , D1 , La2 , D1 , Sil , D1 , La2 , D4
          Data Re2 , D4 , La2 , D4 , La2_ , D2 , Do3 , D2 , La2 , D8 , Re3 , D2 , Do3 , D1
          Data Sil , D1 , Do3 , D1 , Sil , D1 , La2_ , D1 , Sil , D1 , La2_ , D1 , Sil , D1
          Data La2 , D1 , Sil , D1 , La2 , D1 , Sil , D1 , Sol2 , D2 , Fa2 , D4 , Sol2 , D2
          Data Do3 , D2 , La2 , D8 , Re2 , D2 , Do2 , D2 , Re2 , D2 , Re2_ , D2 , Fa2 , D2
          Data Re2_ , D2 , Fa2 , D2 , Sol2 , D2 , La2 , D2 , Do3 , D2 , La2_ , D2 , La2 , D2
          Data Sol2 , D2 , Fa2 , D2 , Re2_ , D2 , Re2 , D2 , Do2 , D4 , Sol2 , D1 , Sil , D1
          Data Sol2 , D1 , Sil , D1 , Sol2 , D4 , La2 , D4 , La2_ , D4 , La2 , D2 , Sol2 , D2
          Data Fa2 , D4 , Sol2 , D4 , La2 , D4 , Sol2 , D2 , Fa2 , D2 , Re2_ , D4 , Fa2 , D4
          Data Sol2 , D4 , Fa2 , D2 , Re2_ , D2 , Re2 , D8 , La2_ , D2 , La2 , D1 , Sil , D1
          Data La2 , D1 , , Sil , D1 , Sol2 , D1 , Sil , D1 , Sol2 , D1 , Sil , D1 , Fa2 , D1
          Data Sil , D1 , Fa2 , D1 , Sil , D1 , Re2_ , D2 , La2 , D2 , Sol2 , D1 , Sil , D1
          Data Sol2 , D1 , Sil , D1 , Fa2 , D1 , Sil , D1 , Fa2 , D1 , Sil , D1 , Re2_ , D1
          Data Sil , D1 , Re2_ , D1 , Sil , D1 , Re2 , D2 , Fa2 , D2 , Sil , D2 , Fa2 , D2
          Data Sol2 , D2 , La2 , D8 , Re2 , D4 , La2 , D1 , Sil , D1 , La2 , D1 , Sil , D1
          Data La2 , D4 , Re2 , D3 , Sil , D1 , Re2 , D4 , La2 , D1 , Sil , D1 , La2 , D1
          Data Sil , D1 , La2 , D4 , Re2 , D4 , La2 , D4 , La2_ , D2 , Do3 , D2 , La2 , D8
          Data Re3 , D2 , Do3 , D1 , Sil , D1 , Do3 , D1 , Sil , D1 , La2_ , D1 , Sil , D1
          Data La2_ , D1 , Sil , D1 , La2 , D1 , Sil , D1 , La2 , D1 , Sil , D1 , Sol2 , D2
          Data Fa2 , D4 , Sol2 , D2 , Do3 , D2 , La2 , D8 , Re2 , D2 , Do2 , D2 , Re2 , D2
          Data Re2_ , D2 , Fa2 , D2 , Re2_ , D2 , Fa2 , D2 , Sol2 , D2 , La2 , D2 , Do3 , D2
          Data La2_ , D2 , La2 , D2 , Sol2 , D2 , Fa2 , D2 , Re2_ , D2 , Re2 , D2 , Do2 , D4
          Data Sol2 , D1 , Sil , D1 , Sol2 , D1 , Sil , D1 , Sol2 , D4 , La2 , D4 , La2_ , D4
          Data La2 , D2 , Sol2 , D2 , Fa2 , D4 , Sol2 , D4 , La2 , D4 , Sol2 , D2 , Fa2 , D2
          Data Re2_ , D4 , Fa2 , D4 , Sol2 , D4 , Fa2 , D2 , Re2_ , D2 , Re2 , D8 , La2_ , D2
          Data La2 , D1 , Sil , D1 , La2 , D1 , Sil , D1 , Sol2 , D1 , Sil , D1 , Sol2 , D1
          Data Sil , D1 , Fa2 , D1 , Sil , D1 , Fa2 , D1 , Sil , D1 , Re2_ , D2 , La2 , D2
          Data Sol2 , D1 , Sil , D1 , Sol2 , D1 , Sil , D1 , Fa2 , D1 , Sil , D1 , Fa2 , D1
          Data Sil , D1 , Re2_ , D1 , Sil , D1 , Re2_ , D1 , Sil , D1 , Re2 , D2 , Re2 , D4
          Data Re2_ , D2 , Fa2 , D2 , Re2 , D6 , Sil , D2 , Re2 , D8 , La2 , D8 , Re2 , D8
          Data La2 , D7 , Sil , D1 , La2 , D6 , La2_ , D2 , Do3 , D6 , La2_ , D2 , La2 , D8
          Data Sil , D8 , Re3 , D8 , Do3 , D8 , La2_ , D8 , La2 , D8 , Sol2 , D6 , Fa2 , D2
          Data Sol2 , D6 , Do3 , D2 , La2 , D8 , Sil , D8 , Re2 , D8 , La2_ , D8 , La2 , D8
          Data Sol2 , D8 , Fa2 , D6 , Re2_ , D2 , Re2 , D6 , Re2_ , D2 , Do2 , D8 , Sil , D8
          Data Fa2 , D8 , Re2_ , D8 , Re2 , D6 , Sol2 , D2 , Fa2 , D8 , Re2_ , D6 , Re2 , D2
          Data Do2 , D6 , Re2_ , D2 , Re2 , D4 , La1 , D4 , La1_ , D4 , Do2 , D4 , Re2 , D4
          Data Sol1 , D4 , Do2 , D4 , Sol1 , D4 , La1_ , D4 , Re2 , D4 , La1 , D4 , Re2 , D4
          Data Sol1 , D4 , Re2 , D4 , La1 , D4 , Re2 , D4 , La1_ , D4 , Re2 , D4 , Do2 , D4
          Data Re2 , D4 , Re3 , D32 , Do3 , D6 , Re3_ , D2 , Re3 , D6 , Do3 , D2 , La2_ , D6
          Data Re3 , D2 , Do3 , D6 , La2_ , D2 , La2 , D6 , Do3 , D2 , La2_ , D6 , La2 , D2
          Data Sol2 , D8 , Sil , D8 , Sol1 , D6 , La1 , D2 , La1_ , D6 , Do2 , D2 , Re2 , D6
          Data Re2_ , D2 , Do2 , D6 , Re2 , D2 , Re2_ , D6 , Do2 , D2 , Re2 , D6 , Re2_ , D2
          Data Re2 , D8 , Sil , D8 , Do3 , D8 , Si2 , D6 , Re3 , D2 , Do3 , D16 , La2_ , D6
          Data La2 , D2 , Sol2 , D6 , La2_ , D2 , La2 , D16 , Do3 , D8 , Si2 , D6 , Re3 , D2
          Data Do3 , D16 , La2_ , D6 , La2 , D2 , Sol2 , D6 , La2_ , D2 , La2 , D16 , Fa2 , D6
          Data Re2_ , D2 , Fa2 , D6 , Sol2 , D2 , La2 , D16 , La2_ , D6 , La2 , D2 , Sol2 , D6
          Data Fa2 , D2 , La2 , D6 , Sol2 , D2 , Fa2 , D6 , Re2_ , D2 , Sol2 , D6 , Fa2 , D2
          Data Re2_ , D6 , Fa2 , D2 , Sol2 , D16 , La2 , D6 , Sol2 , D2 , Fa2 , D6 , Re2_ , D2
          Data Sol2 , D6 , Fa2 , D2 , Re2_ , D6 , Re2 , D2 , Fa2 , D6 , Re2_ , D2 , Sol2 , D6
          Data Re2_ , D2 , Re2 , D8 , Sil , D8
          Data End_of_table
          
          Ocr1a_value_table:
          
          Data 1516% , 1431% , 1350% , 1275% , 1203% , 1135% , 1072% , 1011% , 955% , 901%
          Data 850% , 803% , 757% , 715% , 675% , 637% , 601% , 567% , 535% , 505% , 477%
          اوژن: به معنای افکننده و شکست دهنده است
          دانایی، توانایی است-Knowledge is POWER
          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

          دیدگاه


            #6
            پاسخ : ایجاد ملودی موسیقی با AVR

            جناب طراح ممنون از برنامتون
            اگه فرکانس رو افزایش بدیم (مثلا 8 مگ) چه تغییری باید تو برنامه بدیم؟
            نت های آهنگ های دیگه رو از کجا میآ‌شه پیدا کرد؟

            دیدگاه


              #7
              پاسخ : ایجاد ملودی موسیقی با AVR

              نوشته اصلی توسط hamid67
              اگه فرکانس رو افزایش بدیم (مثلا 8 مگ) چه تغییری باید تو برنامه بدیم؟
              برای تغییر فرکانس اسیلاتور باید به شیوه تولید نت در برنامه توجه کنیم. TIMER1 وظیفه ایجاد فرکانس مورد نظر و TIMER0 وظیفه تولید زمان تداوم نت (duration)را به عهده دارد. هر دو تایمر هم در مد CTC عمل می کنند. اگر فرکانس اسیلاتور میکروکنترلر افزایش یابد، فرکانس نت ها به همان نسبت افزایش و طول مدت زمان نواخته شدن به همان نسبت کاهش خواهد یافت.
              یک روش برای جبران سازی افزایش فرکانس نت، که البته به دلایل فنی خطای بسیار کوچکی به همراه دارد، N برابر کردن مقادیر جدول OCR1a_value_table است. یعنی اگر کلاک بجای 1 مگاهرتز مثلا 8 مگاهرتز شود، اعداد این جدول باید 8 برابر شوند و به این طریق مسئله فرکانس نت حل می شود.
              اما برای جبران سازی کاهش duration باید به این نکته توجه کنید که TIMER0 با حداکثر تقسیمات 1024 خود در حال کار است و طول آن هم 8 بیت بیشتر نیست.به ازای کلاک 1 مگاهرتز، زمان ساخته شده توسط این تایمر برابر با (1+OCR0) ضرب در 1024 تقسیم بر فرکانس کلاک است که در کلاک 1 مگاهرتز و به ازای OCR0=&H40 برابر 66.56 میلی ثانیه می شود. اگر کلاک مثلا دو برابر شود، میتوان با افزایش OCR0 بصورتی کهOCR0+1 دو برابر شود جبران سازی لازم را انجام داد. اما توجه کنید که ظرفیت OCR0 به دلیل 8 بیتی بودن محدود است و نمی توان آنرا برای کلاک 8 مگاهرتز تا حد 8 برابر افزایش داد. راه چاره آن است که برای کلاک 8 مگاهرتز OCR0 را برابر 129 قرار دهید و جدول متناظر D1 تا D8 را 4 برابر کنید. یعنی بجای D1=1 قرار دهید D1=4 و به همین ترتیب. در اینصورت طول نت شما هم ثابت خواهد ماند.

              نوشته اصلی توسط hamid67
              نت های آهنگ های دیگه رو از کجا میآ‌شه پیدا کرد؟
              برای قرار دادن نت های دیگر باید از علم موسیقی اطلاع کافی داشته باشید و یا از کسی که در این مورد اطلاع دارد کمک بخواهید تا بتوانید نت موسیقی مورد نظر خود را پیاده سازی کنید.
              اوژن: به معنای افکننده و شکست دهنده است
              دانایی، توانایی است-Knowledge is POWER
              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

              دیدگاه


                #8
                پاسخ : ایجاد ملودی موسیقی با AVR

                نسخه codevision نرم افزار تولید ملودی در زیر آورده شده است.


                کد:
                /*****************************************************
                Project : IRAN_M32
                Chip type        : ATmega32
                AVR Core Clock frequency: 1.000000 MHz
                *****************************************************/
                #include <mega32.h>
                
                #define sil 0
                #define sol1 1
                #define sol1_ 2
                #define la1 3
                #define la1_ 4
                #define si1 5
                #define do2 6
                #define do2_ 7
                #define re2 8
                #define re2_ 9
                #define mi2 10
                #define fa2 11
                #define fa2_ 12
                #define sol2 13
                #define sol2_ 14
                #define la2 15
                #define la2_ 16
                #define si2 17
                #define do3 18
                #define do3_ 19
                #define re3 20
                #define re3_ 21
                #define d1 1
                #define d2 2
                #define d3 3
                #define d4 4 
                #define d6 6
                #define d7 7
                #define d8 8
                #define d16 16
                #define d32 32
                bit note_f=0;
                volatile unsigned char duration;
                
                flash unsigned char notes[]={re2,d4,la2,d1,sil,d1,la2,d1,sil,d1,la2,d4,
                re2,d3,sil,d1,re2,d4,la2,d1,sil,d1,la2,d1,sil,d1,la2,d4,re2,d4,la2,d4,
                la2_,d2,do3,d2,la2,d8,re3,d2,do3,d1,sil,d1,do3,d1,sil,d1,la2_,d1,sil,d1,
                la2_,d1,sil,d1,la2,d1,sil,d1,la2,d1,sil,d1,sol2,d2,fa2,d4,sol2,d2,do3,d2,
                la2,d8,re2,d2,do2,d2,re2,d2,re2_,d2,fa2,d2,re2_,d2,fa2,d2,sol2,d2,la2,d2,
                do3,d2,la2_,d2,la2,d2,sol2,d2,fa2,d2,re2_,d2,re2,d2,do2,d4,sol2,d1,sil,d1,
                sol2,d1,sil,d1,sol2,d4,la2,d4,la2_,d4,la2,d2,sol2,d2,fa2,d4,sol2,d4,la2,d4,
                sol2,d2,fa2,d2,re2_,d4,fa2,d4,sol2,d4,fa2,d2,re2_,d2,re2,d8,la2_,d2,la2,d1,
                sil,d1,la2,d1,sil,d1,sol2,d1,sil,d1,sol2,d1,sil,d1,fa2,d1,sil,d1,fa2,d1,
                sil,d1,re2_,d2,la2,d2,sol2,d1,sil,d1,sol2,d1,sil,d1,fa2,d1,sil,d1,fa2,d1,
                sil,d1,re2_,d1,sil,d1,re2_,d1,sil,d1,re2,d2,fa2,d2,sil,d2,fa2,d2,sol2,d2,
                la2,d8,re2,d4,la2,d1,sil,d1,la2,d1,sil,d1,la2,d4,re2,d3,sil,d1,re2,d4,
                la2,d1,sil,d1,la2,d1,sil,d1,la2,d4,re2,d4,la2,d4,la2_,d2,do3,d2,la2,d8,
                re3,d2,do3,d1,sil,d1,do3,d1,sil,d1,la2_,d1,sil,d1,la2_,d1,sil,d1,la2,d1,
                sil,d1,la2,d1,sil,d1,sol2,d2,fa2,d4,sol2,d2,do3,d2,la2,d8,re2,d2,do2,d2,
                re2,d2,re2_,d2,fa2,d2,re2_,d2,fa2,d2,sol2,d2,la2,d2,do3,d2,la2_,d2,la2,d2,
                sol2,d2,fa2,d2,re2_,d2,re2,d2,do2,d4,sol2,d1,sil,d1,sol2,d1,sil,d1,sol2,d4,
                la2,d4,la2_,d4,la2,d2,sol2,d2,fa2,d4,sol2,d4,la2,d4,sol2,d2,fa2,d2,re2_,d4,
                fa2,d4,sol2,d4,fa2,d2,re2_,d2,re2,d8,la2_,d2,la2,d1,sil,d1,la2,d1,sil,d1,
                sol2,d1,sil,d1,sol2,d1,sil,d1,fa2,d1,sil,d1,fa2,d1,sil,d1,re2_,d2,la2,d2,
                sol2,d1,sil,d1,sol2,d1,sil,d1,fa2,d1,sil,d1,fa2,d1,sil,d1,re2_,d1,sil,d1,
                re2_,d1,sil,d1,re2,d2,re2,d4,re2_,d2,fa2,d2,re2,d6,sil,d2,re2,d8,la2,d8,
                re2,d8,la2,d7,sil,d1,la2,d6,la2_,d2,do3,d6,la2_,d2,la2,d8,sil,d8,re3,d8,
                do3,d8,la2_,d8,la2,d8,sol2,d6,fa2,d2,sol2,d6,do3,d2,la2,d8,sil,d8,re2,d8,
                la2_,d8,la2,d8,sol2,d8,fa2,d6,re2_,d2,re2,d6,re2_,d2,do2,d8,sil,d8,fa2,d8,
                re2_,d8,re2,d6,sol2,d2,fa2,d8,re2_,d6,re2,d2,do2,d6,re2_,d2,re2,d4,la1,d4,
                la1_,d4,do2,d4,re2,d4,sol1,d4,do2,d4,sol1,d4,la1_,d4,re2,d4,la1,d4,re2,d4,
                sol1,d4,re2,d4,la1,d4,re2,d4,la1_,d4,re2,d4,do2,d4,re2,d4,re3,d32,do3,d6,
                re3_,d2,re3,d6,do3,d2,la2_,d6,re3,d2,do3,d6,la2_,d2,la2,d6,do3,d2,la2_,d6,
                la2,d2,sol2,d8,sil,d8,sol1,d6,la1,d2,la1_,d6,do2,d2,re2,d6,re2_,d2,do2,d6,
                re2,d2,re2_,d6,do2,d2,re2,d6,re2_,d2,re2,d8,sil,d8,do3,d8,si2,d6,re3,d2,
                do3,d16,la2_,d6,la2,d2,sol2,d6,la2_,d2,la2,d16,do3,d8,si2,d6,re3,d2,
                do3,d16,la2_,d6,la2,d2,sol2,d6,la2_,d2,la2,d16,fa2,d6,re2_,d2,fa2,d6,
                sol2,d2,la2,d16,la2_,d6,la2,d2,sol2,d6,fa2,d2,la2,d6,sol2,d2,fa2,d6,
                re2_,d2,sol2,d6,fa2,d2,re2_,d6,fa2,d2,sol2,d16,la2,d6,sol2,d2,fa2,d6,
                re2_,d2,sol2,d6,fa2,d2,re2_,d6,re2,d2,fa2,d6,re2_,d2,sol2,d6,re2_,d2,
                re2,d8,sil,d8};    
                
                flash unsigned int timer1_values[]={1516,1431,1350,1275,1203,1135,1072,1011,955,901,850,803,757,
                715,675,637,601,567,535,505,477}; //...
                
                // Timer 0 output compare interrupt service routine
                interrupt [TIM0_COMP] void timer0_comp_isr(void)
                {
                 if (duration!=0) duration--;
                }
                
                // Timer1 output compare A interrupt service routine
                interrupt [TIM1_COMPA] void timer1_compa_isr(void)
                {
                 if (note_f!=0)
                 {
                 if ((PORTB&0X01)==0x01) PORTB&=0XFE;
                 else PORTB|=0X01;
                 }
                }
                
                void main(void)
                {
                unsigned int i;
                DDRB=0x01;
                TCCR0=0x0D;
                OCR0=0x40;
                TCCR1B=0x09;
                TIMSK=0x12;
                #asm("sei")
                
                while(1)  
                 {
                 for(i=0;i<sizeof (notes);i+=2)
                 { 
                
                  if (notes[i]!=sil)
                  { 
                  #asm("cli");
                  note_f=1;   
                  duration=notes[i+1];    
                  TCNT1=0;
                  OCR1A=timer1_values[notes[i]-1];   
                  #asm("sei");
                  }
                  
                  else
                  {    
                  note_f=0;
                  duration=notes[i+1];     
                  }  
                  while(duration);
                 }    
                 }
                }
                اوژن: به معنای افکننده و شکست دهنده است
                دانایی، توانایی است-Knowledge is POWER
                برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                دیدگاه


                  #9
                  پاسخ : ایجاد ملودی موسیقی با AVR

                  میشه در مورد الگوریتمش کمی توضیح بدید
                  من یه بار با تایمر تولید صدا کردم ولی مشکل من ایه که نمیشه زمان صدا را دقیق تنظیم کرد

                  دیدگاه


                    #10
                    پاسخ : ایجاد ملودی موسیقی با AVR

                    نوشته اصلی توسط شهریار رجب زاده
                    میشه در مورد الگوریتمش کمی توضیح بدید
                    من یه بار با تایمر تولید صدا کردم ولی مشکل من اینه که نمیشه زمان صدا را دقیق تنظیم کرد
                    در چند پست بالاتر در مورد مبانی عملکرد TIMER0 و TIMER1 برای تولید نت توضیح داده شده است.
                    اوژن: به معنای افکننده و شکست دهنده است
                    دانایی، توانایی است-Knowledge is POWER
                    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                    دیدگاه


                      #11
                      پاسخ : ایجاد ملودی موسیقی با AVR

                      در سایت BASCOM برای تولید ملودی برنامه ای قرار داده شده است:

                      http://www.mcselec.com/index.php?opt...&Itemid=57
                      اوژن: به معنای افکننده و شکست دهنده است
                      دانایی، توانایی است-Knowledge is POWER
                      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                      دیدگاه


                        #12
                        پاسخ : ایجاد ملودی موسیقی با AVR

                        سلام
                        من این تاپیک و اون یکی تاپیک تولید موسیقی رو واقعا عالی میدونم و از جناب طراح که این اطلاعات رو برا بقیه قرار داده واقعا تشکر میکنم.
                        جناب طراح در مورد فرمت MID اگه اطلاعاتی دارید میشه لطف کنید قرار بدید.
                        میخوام یه پخش کننده MID با AVR بسازم هنوز وقت نشده جدی روش کارکنم.
                        ولی میخوام بزودی شروع کنم.اگه اطلاعاتی درمورد چگونگی پیاده سازیش بگید ممنون میشم
                        تشکر
                        یاعلی

                        دیدگاه


                          #13
                          پاسخ : ایجاد ملودی موسیقی با AVR

                          سلام...توضیحاتی که دادید بسیار عالی بود...اما میشه ازتون خواهش کنم تیکه تیکه برای برنامه کد ویژن چی کار کردید...راستش من نمی فهمم :cry2:
                          خواهش می کنم :cry2:

                          دیدگاه


                            #14
                            پاسخ : ایجاد ملودی موسیقی با AVR

                            توضیح کلی عملکرد برنامه در پست های قبلی ارائه شده است. بصورت جزئی هم در مورد هر بخشی که سوال دارید آن را مطرح کنید تا توضیح بیشتری داده شود.
                            اوژن: به معنای افکننده و شکست دهنده است
                            دانایی، توانایی است-Knowledge is POWER
                            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                            دیدگاه


                              #15
                              پاسخ : ایجاد ملودی موسیقی با AVR

                              میشه برنامه رو برای زنگ دینگ دانگ هم بزارید آقای طراح؟

                              دیدگاه

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