اطلاعیه

Collapse
No announcement yet.

پخش صدا از mmc با استفاده از fat

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

    پخش صدا از mmc با استفاده از fat

    درود . : :biggrin:
    من با استفاده از avr-dos و mmc فایلی رو از mmc می خونم . ولی صدا به صورت برش خوره پخش میشه .
    البته من بدون استفاده از fat این کارو کردم و صدا تقریبا قابل قبول پخش شد ولی در مورد fat کیفیت خوب نیست
    و جالب اینجاست که با کد wait موجود در برنامه (mmc - fat) میتوان سرعت صدا رو کم و زیاد کرد . منظورم اینکه با توجه به این موضوع این ایراد نمیتونه از کلاک avr باشه که به اصطلاح کلاک کم بیاره .

    با توجه به این مشکل راه حل چیه ؟؟ :biggrin:
    دریای آرام دریانورد حرفه ای نمیسازد .

    #2
    پاسخ : پخش صدا از mmc با استفاده از fat

    سلام
    میشه بگین با چه فرمتی از صدا کار میکنین
    انجام پروژه های برنامه نویسی اندروید
    [glow=red,2,300]نرم افزار نقشه های پاور کامپیوتر اندورید[/glow]
    http://cafebazaar.ir/app/?id=com.atxdroid

    دیدگاه


      #3
      پاسخ : پخش صدا از mmc با استفاده از fat

      سلام

      بهتره که از تایمر برای تعیین کردن سمپل ریت استفاده کنید

      برنامه تون رو بذارید تا روش بحث کنیم
      ِِDie for Life, Not Live to Die
      Freedom Fighter
      " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

      دیدگاه


        #4
        پاسخ : پخش صدا از mmc با استفاده از fat

        سلام .
        دوست عزیز این برنامه تغریبا شبیه برنامه بحث شده در تاپیک (ایجاد فایل بروی mmc با فرمت fat ) و فرقی که داره
        Dim Buf As Byte
        Open "32khz.wav" For Binary As #2
        do
        Get #2 , Buf
        Ocr0 = Buf
        loop

        البته من با انواع نرخ بیت ها کار کردم و باید دوباره تاکید کنم که تابع waitus هم باعث تغییر حالت در صدا هم میشه (عدم کمبود کلاک). فرکانس میکرو 16 مگاهتز - میکرو mega64 - تایمر برای pwm استفاده شده timer0
        و همینطور باید بگم که با همین میکرو و فرکانس و تایمر و مموری اینشیال (spi) و مدار خارجی میکرو و فقط و فقط بدون استفاده از FAT جواب گرفتم.
        توضیح در مورد فایل wav هم باید بگم که من فایل ویو رو مستقم روی مموری کپی میکنم و به راحتی میکرو اون رو میخونه ولی فقط بستگی به نرخ بیت داره که اگه پایین باشه قبل از اینکه اشاره گر به اطلاعات صدا برسه یک سری اصوات نامناسب پخش میکنه (خیلی کم)و این اطلاعات مربوط به فایل ویو (تایم - نرخ بیت و ) که این مشکل هم با ادرس دهی حل میشه.
        دریای آرام دریانورد حرفه ای نمیسازد .

        دیدگاه


          #5
          پاسخ : پخش صدا از mmc با استفاده از fat

          یک نکته رو متذکر بشم و اونم اینه که فایل ویو ی که با کامپیوتر ایجاد میشه به صورت 16 یا 32 بیتیه و شما به صورت 8 بیتی عمل پخش رو انجام دادید

          و یکی دیگه هم اینکه شما باید تا ست شدن پرچم مربوط به مقایسه ی رجیستر pwm صبر کنید بعد مجددا رجیستر pwm رو تغییر بدید که این رو هم رعایت نکردید
          ِِDie for Life, Not Live to Die
          Freedom Fighter
          " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

          دیدگاه


            #6
            پاسخ : پخش صدا از mmc با استفاده از fat

            سلام .
            من فایل رو به صورت 8 بیت ذخیره کردم با استفادهSound Recorder از و این رو هم بگم که درسته از وقفه pwm استفاده نکردم ولی به نظر شما چرادر برنامه ای که بدون fat کار کردم مشکلی نداشت و صدا بدون برش پخش میشد .

            در اون برنامه از همین فایل و از همین پیکر بندی تایمر استفاده کرده بود (در پست قبل به اینها اشاره کردم)

            از شما به خاطر پیگیری تان مشکرم . منتظر نظرتان هستم .
            دریای آرام دریانورد حرفه ای نمیسازد .

            دیدگاه


              #7
              پاسخ : پخش صدا از mmc با استفاده از fat

              برای کار در حالت fat نیاز به زیر برنامه های حجیمی هست که احتمالا به این دلیل در برنامه ی fat صدا به صورت بریده بریده پخش میشه

              حالا شما یه کم فرکانس اسیلاتور میکرو رو افزایش بدید ببینید با افزایش سرعت میشه این مشکل رو حل کرد یانه

              بهتره که اطلاعات رو به صورت سکتور سکتور بخونید و از یک بافر نرم افزاری برای خوندن اطلاعات استفاده کنید
              ِِDie for Life, Not Live to Die
              Freedom Fighter
              " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

              دیدگاه


                #8
                پاسخ : پخش صدا از mmc با استفاده از fat

                من همان طور که گفتم از اسیلاتور داخلی شروع کردم تا 16mhz خارجی (کوارتز) این در مورد اسیلاتور .

                ودر مورد سکتور منظورتان چیه خود fat میره میخونه البته نو برنامه رابط بسکام avr-dos یک بافر تعریف کرده و سایز اون هم 512 هست . یعنی شما میگین که جدا از fat برم بخونم ؟

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

                دیدگاه


                  #9
                  پاسخ : پخش صدا از mmc با استفاده از fat

                  ببین شما یک متغیر Array به اندازه ی 512 بایت باز کنید و دستور get رو مثل دستور زیر بنویسید و اطلاعات رو سکتور ی بخونید ببینید تفاوتی میکنه
                  Dim Mmc_data(512) As Byte
                  Get #2 , Mmc_data(1) , , 512

                  در مورد سرعت هم اگه اسیلاتورتون 16 هست و باز م بریده بریده است ، احتمالا سرعت کلاک spi کمه، میتونید رجیستر مربوط به رابط spi رو دستکاری کنید و سرعت کلاک خوندن از مموری رو افزایش بدید

                  راستی میشه برنامه ای که میگید بدون fat خوندید رو بذارید :smile:
                  ِِDie for Life, Not Live to Die
                  Freedom Fighter
                  " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

                  دیدگاه


                    #10
                    پاسخ : پخش صدا از mmc با استفاده از fat

                    ببخشید من تمام پست ها رو خوندم همش حرف از 512 بایت زدید. یعنی یک سکتور (بلاک) یعنی از یه MMC مثلاً 64 مگی فقط 512 بایت.........؟؟!!
                    بعد یه چیز دیگه.. من وقتی روی یک سکتور می نویسم بعد از اینکه مدار رو ریست می کنم همه ی اطلاعات MMC پاک می شه .کجای کار من اشکال داره؟

                    دیدگاه


                      #11
                      پاسخ : پخش صدا از mmc با استفاده از fat

                      خیر منظور از 512 بایت سکتورها یا پیجها ی مموری هست که به صورت 512 بایتی هستن

                      در مورد ذخیره نشدن هم احتمالا اصلا روی کارت نوشته نمیشه. از اتصال صحیح کارت اطمینان حاصل کنید

                      از چه برنامه ای برای خوندن ونوشتن استفاده کردید؟
                      ِِDie for Life, Not Live to Die
                      Freedom Fighter
                      " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

                      دیدگاه


                        #12
                        پاسخ : پخش صدا از mmc با استفاده از fat

                        Oops

                        ببخشید این پست رو اشتباهی زدم :redface:
                        ِِDie for Life, Not Live to Die
                        Freedom Fighter
                        " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

                        دیدگاه


                          #13
                          پاسخ : پخش صدا از mmc با استفاده از fat

                          سلام دوست عزیز .
                          با راهنمایی که کردی صدا بهتر شد این کدی که گفتی من چند بار تا نزدیکاش رفتم ولی برگشتم و با این پیشنهادی که دادی تقربیا مشکلم رو حل کردی دستت درد نکنه :nice:
                          من مقدار 512 رو تا جایی که میشد بردم بالا و صدا از زمین تا اسمون تغییر کرد ولی باز هم باید بهتر بشه به نظر شما باید از رم خارجی برای بافر استفاده کنم من خودم تا حالا از با رم خارجی کار نکردم اگر وقت داری و کار کردی یکم تجربه انتقال بده .

                          اینم برنامه ای که بدون فت کار کرد

                          $regfile = "M64def.dat"
                          $crystal = 16000000
                          $baud = 57600
                          Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1

                          'Constants
                          Dim Dat As Byte
                          Dim Resp As Byte
                          Dim I As Word
                          Dim Addr As Long
                          Dim Adres As Long
                          Dim Tanzim As Byte
                          Dim F As Byte
                          'Aliases
                          Cs Alias Portb.0
                          Mosi Alias Portb.2
                          Clk Alias Portb.1
                          Miso Alias Pinb.3
                          'Declarations
                          Declare Sub Minit
                          Declare Sub Mread(byval Addr As Long )
                          'Configs
                          Config Portb.0 = Output
                          Config Portb.2 = Output
                          Config Portb.1 = Output
                          Config Pinb.3 = Input
                          Waitms 300
                          Config Spi = Soft , Din = Pinb.3 , Dout = Portb.2 , Ss = Portb.0 , Clock = Portd.1
                          Spiinit
                          '******** MAIN PROGRAM *************
                          Main:
                          'Initialize the MMCC
                          Minit
                          Adres = 280576 'eshareghar aghaze 'WAV' '1048576

                          Inja:
                          'Print Adres
                          Mread Adres

                          Adres = Adres + 512
                          Goto Inja
                          Xloop:
                          Set Cs
                          Shiftout Mosi , Clk , Dat , Msbl
                          Endloop:
                          Goto Endloop
                          End 'end program
                          '***************************** END OF PROGRAM **********************************
                          '======= SUB ROUTINES AND FUNCTIONS =======
                          '*** INITIALIZATION OF MMC ***
                          Sub Minit
                          Set Cs
                          Dat = &HFF
                          For I = 1 To 10
                          Shiftout Mosi , Clk , Dat , Msbl
                          Next I
                          Resp = 255
                          Reset Cs
                          Cmd0:
                          Dat = &H40
                          Shiftout Mosi , Clk , Dat , Msbl
                          Addr = &H00000000
                          Shiftout Mosi , Clk , Addr , Msbl
                          Dat = &H95
                          Shiftout Mosi , Clk , Dat , Msbl
                          While Resp <> &H01
                          Shiftin Miso , Clk , Resp , Msbl
                          Wend
                          Set Cs
                          Waitms 50
                          Reset Cs
                          Dat = &HFF
                          Cmd1:
                          While Resp <> &H00

                          Set Cs
                          Shiftout Mosi , Clk , Dat , Msbl
                          Shiftin Miso , Clk , Resp , Msbl
                          Reset Cs
                          Dat = &H41
                          Shiftout Mosi , Clk , Dat , Msbl
                          Addr = 0
                          Shiftout Mosi , Clk , Addr , Msbl
                          Dat = &HFF
                          Shiftout Mosi , Clk , Dat , Msbl
                          Shiftout Mosi , Clk , Dat , Msbl
                          Shiftin Miso , Clk , Resp , Msbl
                          Wend
                          Dat = &HFF
                          Set Cs
                          End Sub

                          '**** READ routine assumes ADDR uses Status subroutine *****
                          Sub Mread(byval Addr As Long)
                          Set Cs
                          Dat = &HFF
                          Shiftout Mosi , Clk , Dat , Msbl
                          Shiftin Miso , Clk , Resp , Msbl
                          Reset Cs
                          Dat = &H51
                          Shiftout Mosi , Clk , Dat , Msbl
                          Shiftout Mosi , Clk , Addr , Msbl
                          Dat = &HFF
                          Shiftout Mosi , Clk , Dat , Msbl
                          Shiftin Miso , Clk , Resp , Msbl
                          While Resp <> 0
                          Shiftin Miso , Clk , Resp , Msbl
                          Wend
                          While Resp <> &HFE
                          Shiftin Miso , Clk , Resp , Msbl
                          Wend
                          For I = 1 To 512
                          Shiftin Miso , Clk , Resp , Msbl

                          Pwm1a = Resp
                          '>> Waitus ? 'Baraye tanzim sorat
                          Next I
                          Shiftin Miso , Clk , Resp , Msbl
                          Shiftin Miso , Clk , Resp , Msbl
                          Set Cs

                          End Sub

                          دریای آرام دریانورد حرفه ای نمیسازد .

                          دیدگاه


                            #14
                            پاسخ : پخش صدا از mmc با استفاده از fat

                            نوشته اصلی توسط ecb2
                            سلام .
                            دوست عزیز این برنامه تغریبا شبیه برنامه بحث شده در تاپیک (ایجاد فایل بروی mmc با فرمت fat ) و فرقی که داره
                            Dim Buf As Byte
                            Open "32khz.wav" For Binary As #2
                            do
                            Get #2 , Buf
                            Ocr0 = Buf
                            loop

                            البته من با انواع نرخ بیت ها کار کردم و باید دوباره تاکید کنم که تابع waitus هم باعث تغییر حالت در صدا هم میشه (عدم کمبود کلاک). فرکانس میکرو 16 مگاهتز - میکرو mega64 - تایمر برای pwm استفاده شده timer0
                            و همینطور باید بگم که با همین میکرو و فرکانس و تایمر و مموری اینشیال (spi) و مدار خارجی میکرو و فقط و فقط بدون استفاده از FAT جواب گرفتم.
                            توضیح در مورد فایل wav هم باید بگم که من فایل ویو رو مستقم روی مموری کپی میکنم و به راحتی میکرو اون رو میخونه ولی فقط بستگی به نرخ بیت داره که اگه پایین باشه قبل از اینکه اشاره گر به اطلاعات صدا برسه یک سری اصوات نامناسب پخش میکنه (خیلی کم)و این اطلاعات مربوط به فایل ویو (تایم - نرخ بیت و ) که این مشکل هم با ادرس دهی حل میشه.
                            سلام
                            اگه میشه توضیح بدین که از چه پینی با چه دستوری از چه میکروی تقویت میخاد یا نه و....
                            ممنوننننننن
                            انجام پروژه های برنامه نویسی اندروید
                            [glow=red,2,300]نرم افزار نقشه های پاور کامپیوتر اندورید[/glow]
                            http://cafebazaar.ir/app/?id=com.atxdroid

                            دیدگاه


                              #15
                              پاسخ : پخش صدا از mmc با استفاده از fat

                              درود
                              من از پینهای تعریف شده برای رابط spi در atmega64 , و توابع موجود در بسکام استفاده کردم و در مورد op-amp شما اگه میخوای مستقیم به amp بدی لازم نیست ولی اگه از فیلتر استفاده کنی بهتره .
                              دریای آرام دریانورد حرفه ای نمیسازد .

                              دیدگاه

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