اطلاعیه

Collapse
No announcement yet.

پخش صدا توسط AVR

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

    پخش صدا توسط AVR

    با سلام خدمت دوستان

    من میخواستم اطلاعاتی رو که تو یه حافظه مثلا MMC نوشته شده رو به عنوان صوت پخش کنم
    یک سری بایت رو از حافظه میآ‌خونم و به یک پورت avr مثلا پورت D میفرستم

    میدونم باید یک دیجیتال به آنالوگ کنورتر داشته باشم
    DAC0808 را که 8 بیتی هست را در اختیار دارم

    برای کار، DAC0808 احتیاج به منبع تغذیه مثبت و منفی داره
    من LMC7660 را که برای همین کار هست تهیه کردم

    حالا برای ادامه سوالهای زیر رو دارم که اگه راهنمایی کنید ممنون میشم

    1) نحوه اتصال DAC0808 به LMC7660
    2) خازنها و تنظیمات ولتاژ LMC7660
    3) ولتاژ مورد نیاز برای DAC0808 (آیا +5 و -5 است؟(خازن های LMC7660 چقدره؟))
    4) خروجی مطلوب DAC0808 و تقویت کننده مناسب برای اتصال به بلندگو

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

    در ضمن قطعاتم هم محدوده(DAC0808 & LMC7660)

    منتظرم . . .
    پیشاپیش متشکرم

    #2
    پاسخ : پخش صدا توسط AVR

    نیازی به dac نیس من این کار رو با pwm انجام دادم .کافیه با فقط تقویتش کنی

    اینم برنامش
    $regfile = "m8def.dat"
    '$prog &HFF , &H7F , &HD9 , &H00 ' generated. Take care that the chip supports all fuse bytes.$regfile = "M8def.dat"
    $crystal = 16000000
    '$PROG &HFF,&HFF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes. ' generated. Take care that the chip supports all fuse bytes.000000
    $baud = 9600
    '$PROG &HFF,&HFF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes.
    '-------------------------- MMC Pin Configuration ------------------------------
    ' Change this pin configuration if it is necessary in your project.
    Cs Alias Portb.2 : Config Pinb.2 = Output 'Connected to Pin No.1 Of MMC (CS)
    Mosi Alias Portb.3 : Config Pinb.3 = Output 'Connected to Pin No.2 Of MMC (DataIn)
    Clk Alias Portb.5 : Config Pinb.5 = Output 'Connected to Pin No.5 Of MMC (Clock)
    Miso Alias Pinb.4 : Config Pinb.4 = Input
    Config Portc.5 = Output
    Led Alias Portc.5
    '---------------------------- MMC Var. Define ----------------------------------
    ' MMC function declarations and variables.
    ' DONT TOUCH THIS PART!!!

    Config Pind.2 = Input
    Config Pind.3 = Input



    Declare Sub Mmc_init
    Declare Sub Mmc_status


    Dim Mmc_buffer(512) As Byte
    Dim Sector_pointer As Word
    Dim Free_counter As Word
    Dim Sector_number As Long
    Dim Addr As Long
    Dim Mmc_dat As Byte
    Dim Mmc_resp As Byte
    Dim Mmc_resp2 As Word
    Dim Y As Byte
    Dim Shomare1 As Eram Long
    Dim Shomare2 As Eram Long
    Dim Shomare22n As Long
    Dim I As Word
    Dim V As Byte
    Dim Safe As Eram Byte
    Dim T As Byte
    Dim S As String * 70
    Dim D As String * 70
    Dim Dd As String * 1
    Dim Ss As String * 1
    Dim Idx As Byte
    Dim My_counter As Integer
    Dim In_char As String * 1

    Dim A As Byte
    Const Msbl = 0 : Const Msbh = 1
    Const Spidelay = 5

    '-----------------------adc and timer------------------------------------------
    Enable Interrupts
    Config Adc = Single , Prescaler = 16 , Reference = Internal


    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1
    Wait 1


    Mmc_init


    '----------------------- Your Functions Declarations ---------------------------
    ' Write Your Functions Declarations Here:

    '-------------------------------------------------------------------------------

    '-------------------------------- M A I N --------------------------------------
    If Mmc_resp2 <> 0 Then
    For A = 1 To 5
    Toggle Led
    Wait 1
    Next A
    End If



    T = Safe
    Waitms 4
    If T < 50 Then
    Safe = 50
    Waitms 4
    End If

    Incr T
    Safe = T
    Waitms 4
    Print T


    'If T > 11 Then Goto Laince










    Shomare22n = Shomare1
    Waitms 4
    If Shomare22n < 50 Then
    Shomare22n = 1100 '\/\/\/\/\/\/\/\/\/\/\
    Shomare1 = Shomare22n
    Print "shomare 1 has been chenged"
    End If


    Shomare22n = Shomare2
    Waitms 4
    If Shomare22n < 50 Then
    Shomare22n = 1100 '/\/\/\/\/\/\/\/\/\/\/
    Shomare2 = Shomare22n
    Print "shomare 2 has been chenged"
    End If
    Sector_number = Shomare2
    Waitms 4
    Ss:
    If Sector_number > 941000 Then
    For A = 1 To 5
    Toggle Led
    Wait 1
    Next A
    Goto Laince
    End If
    A = 0
    T = 0
    Reset Led
    Do
    If Pind.2 = 0 Then Goto Recstar
    If Pind.3 = 0 Then Goto Readstar
    Incr A

    If A > 253 Then
    Incr T
    If T > 200 Then
    A = 0
    T = 0
    Toggle Led
    End If
    End If
    Loop








    Restart:

    If Pind.2 = 0 And Pind.3 = 0 Then
    Waitms 620
    Toggle Led
    Shomare2 = 1100
    Waitms 4
    Shomare1 = 1100
    Waitms 4
    Print "restarting in procses"
    Waitms 550
    Toggle Led
    End If
    Waitms 600
    Toggle Led
    Return

















    '--------------------------------- E N D ---------------------------------------


    '------------------------------- Functions -------------------------------------
    '-------------------------------------------------------------------------------
    ' Write your functions here :


    '-------------------------------------------------------------------------------
    '---------------------------- Initializing MMC ---------------------------------
    Sub Mmc_init

    Print "--Start Initializing MMC ..."
    'Set Portb.1
    Set Cs
    Mmc_dat = &HFF
    For Free_counter = 1 To 10
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Next Free_counter
    Mmc_resp = 255

    Print "--Command No.=0"
    Reset Cs
    '40 dar asl argooman ast
    'yani bite aval 0(start)bit 2vom(1){safhey 473 va 474 ketab}va 6 bit cmd ast}
    Cmd0:
    Mmc_dat = &H40 : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay '8 bite avval
    Addr = 0 : Shiftout Mosi , Clk , Addr , Msbl , 32 , Spidelay '32 bit argooman
    Mmc_dat = &H95 : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay 'crc(tashkise khata)
    While Mmc_resp <> &H01 'mitoni inja beshmari bebini chand ta klock mizaneh
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Wend
    Print "--Command Response :" ; Hex(mmc_resp)

    Set Cs
    Waitms 50

    Print "--Command No.=1"
    Reset Cs
    Mmc_dat = &HFF
    Cmd1:
    While Mmc_resp <> &H00
    Set Cs
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay

    Reset Cs
    Mmc_dat = &H41 : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Addr = 0 : Shiftout Mosi , Clk , Addr , Msbl , 32 , Spidelay
    Mmc_dat = &HFF : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Wend
    Mmc_dat = &HFF
    Set Cs

    Print "--Command Response :" ; Hex(mmc_resp)
    Print ""
    Mmc_status '***************************chek for status
    Print "--Initialize Complete."



    End Sub
    '-------------------------- MMC Initializing END -------------------------------

    '-------------------------------------------------------------------------------

    '---------------------------- Read MMC Status ----------------------------------
    Sub Mmc_status

    Cmd13:
    Set Cs
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay

    Reset Cs
    Mmc_dat = &H4D : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay 'mmc dat=4d yani 4 ro bi khial d=13
    'ya dakhele dastore cmd 1=mishe 41 va to cmd 0 mishe 40(yooohooo)
    Addr = 0 : Shiftout Mosi , Clk , Addr , Msbl , 32 , Spidelay
    Mmc_dat = &HFF : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp2 , Msbl , 8 , Spidelay
    Print "" : Print "--Status :" ; Hex(mmc_resp2)
    Set Cs

    End Sub

    '------------------------------- Functions -------------------------------------
    '-------------------------------------------------------------------------------
    '******************************playing******* **********************************
    '------------------------------- Functions -------------------------------------
    '-------------------------------------------------------------------------------
    Readstar:
    Gosub Restart
    Set Led
    Print "playing......"
    Sector_number = Shomare1
    Shomare22n = Shomare2
    Waitms 4
    Waitms 4
    Print Sector_number
    'Shomare22 = Shomare2
    'Waitms 4
    Wait 1
    Enable Oc1a
    Do

    Addr = Sector_number * 512
    Set Cs
    Mmc_dat = &HFF
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay

    Cmd170:
    Reset Cs
    Mmc_dat = &H51 : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftout Mosi , Clk , Addr , Msbl , 32 , Spidelay
    Mmc_dat = &HFF : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay

    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay

    While Mmc_resp <> 0
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Wend
    While Mmc_resp <> &HFE

    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Wend

    For Sector_pointer = 1 To 512

    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Mmc_buffer(sector_pointer) = Mmc_resp
    Pwm1a = Mmc_resp
    Waitus 35 '\/\/\/\/\delay for play
    Next Sector_pointer

    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay

    Set Cs


    Incr Sector_number
    If Sector_number = Shomare22n Then Exit Do
    Loop Until Pind.3 = 0
    Disable Oc1a
    Print "finishing........."
    Wait 1
    Reset Led
    Goto Ss

    '------------------------------- end Functions --------------------------------
    '-------------------------------------------------------------------------------








    '------------------------------- Functions -------------------------------------
    '-------------------------------------------------------------------------------

    '*********************************recording** ***********************************

    '------------------------------- Functions -------------------------------------
    '-------------------------------------------------------------------------------
    Recstar:

    Gosub Restart
    Set Led
    Sector_number = Shomare2
    Waitms 4
    Print Sector_number
    Shomare1 = Sector_number
    Waitms 4
    Print "shomare1 and sector number"
    Print Sector_number
    Pwm1a = 0
    Disable Oc1a



    Start Adc
    Wait 1


    Do
    Addr = Sector_number * 512
    Set Cs
    Mmc_dat = &HFF : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay

    Cmd24:
    Reset Cs
    Mmc_dat = &H58 : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftout Mosi , Clk , Addr , Msbl , 32 , Spidelay
    Mmc_dat = &HFF : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay

    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    While Mmc_resp <> 0
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Wend
    Mmc_dat = &HFE : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    For Sector_pointer = 1 To 512
    Mmc_buffer(sector_pointer) = Getadc(0)
    Mmc_dat = Mmc_buffer(sector_pointer)
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Next Sector_pointer
    Mmc_dat = &HFF : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Mmc_dat = &HFF : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    While Mmc_resp = 0
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Wend
    Set Cs
    Incr Sector_number
    If Sector_number > 941000 Then Exit Do
    Loop Until Pind.2 = 0



    Stop Adc
    Shomare2 = Sector_number
    Waitms 5
    Print "shomare2"
    Print Sector_number

    Wait 1
    Reset Led
    Goto Ss



    '------------------------------- end Functions --------------------------------
    '-------------------------------------------------------------------------------


    '------------------------------- end Functions --------------------------------
    '-------------------------------------------------------------------------------

    Laince:
    Do


    Loop

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

    دیدگاه


      #3
      پاسخ : پخش صدا توسط AVR

      یکی یه کمک برسونه
      من اصلا بیسیک بلد نیستم
      اصلا هم مشکلی با خوندن و نوشتن از MMC ندارم

      مشکل من پخش اطلاعاتیه که تو MMC به عنوان یک صوت قبلا ذخیره شده

      چون اصلا تا حالا روش کار نکردم

      میخوام بوسیله یک DAC این کارو بکنم :angry:
      فقط DAC0808 دارم
      در ضمن DAC0808 نیاز به +5 و -5 ولت داره که با LMC7660 اونو تامین کردم

      اگه شماتیک مداری برای قسمت DAC0808 و LMC7660 و تقویت کننده و خروجی بلندگو باشه ممنون میشم :angry: :cry: :cry: :angry:

      اگه دوست عزیزم OMEGA هم بتونه برنامه رو برای Codevision بده خوبه

      چون کار با PWM رو بهتر یاد میگیرم

      دیدگاه


        #4
        پاسخ : پخش صدا توسط AVR

        کسی نیست که یه کمک برسووونه
        :angry: :angry: :angry:

        حسابی گیجم کرده
        دیتا شیت هم توضیح خوبی نداده

        پین 14 DAC0808 باید به کجا وصل بشه؟

        :question: :question: :question:

        دیدگاه


          #5
          پاسخ : پخش صدا توسط AVR

          دوست خوبم
          حیفه بخوای کار صوتی بکنی و از pwm یا D/Aآ‌ استفاده کنی. اگه می خوای کارت تروتمیز بشه از آی سی های مخصوص اینکار یعنی CODEC استفاده کن که همه چی حتی تقویت کننده ی پاورهم توش داره. تازه به SPIآ‌هم وصل میشه و pcb ساده میشه. تازه دوطرفه هم هست یعنی می تونی صدا رو ضبط هم بکنی
          یکیشو برات پیدا کردم که آرا داشت:
          http://www.datasheetcatalog.org/datasheet/SGSThomsonMicroelectronics/mXysuq.pdf
          با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

          دیدگاه


            #6
            پاسخ : پخش صدا توسط AVR

            ahmadmn جان متشکرم
            ولی در حال حاضر از لحاظ زمانی امکانشو ندارم
            میخوام ببینم مدارم تا حالا درست کار میکنه یا نه
            خواستم کاملش کنم حتما میرم سراغ آی سی هایی مثل VS1001 , ...

            الان میخام کیفیت را فدای سادگی کنم

            اگه ممکنه یه راه حل جلوی پام بزارید تا همین امشب یا فردا صبح یه جواب امیدوار کننده بگیرم

            یه مدار ساده با DAC0808 و LM386 بستم اما جواب نمیگیرم ....
            :cry2: :cry2: :cry2:

            دیدگاه


              #7
              پاسخ : پخش صدا توسط AVR

              قبول
              مقاومت 1کیلو و 2 کیلو اگه داری dac رو بکن بنداز دور
              اگه نداری پس بریم سر عیب یابی
              با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

              دیدگاه


                #8
                پاسخ : پخش صدا توسط AVR

                سلام

                دیدگاه


                  #9
                  پاسخ : پخش صدا توسط AVR

                  نوشته اصلی توسط AFSHARAN
                  سلام
                  سلام
                  اگه پیشنهادی دارید بفرمایید

                  دیدگاه


                    #10
                    پاسخ : پخش صدا توسط AVR

                    نوشته اصلی توسط ehsan_akbari


                    سلام
                    اگه پیشنهادی دارید بفرمایید
                    من خودم با مگا32 آهنگ روی MMC رو پخش کردم با PWM اما کیفیت خوبی نداشت

                    دیدگاه


                      #11
                      پاسخ : پخش صدا توسط AVR

                      اگه ممکنه برنامه به زبان C codevisin رو بزاری ممنون میشم
                      یه توضیحی هم راجع به کار PWM میآ‌خوام

                      ممنون :nice:

                      دیدگاه


                        #12
                        پاسخ : پخش صدا توسط AVR

                        نوشته اصلی توسط ehsan_akbari
                        یه توضیحی هم راجع به کار PWM میآ‌خوام

                        ممنون :nice:
                        سلام ...............

                        PWM مخفف Pulse Width Modulation هست و همون طور که از اسمش مشخصه مدولاسیون پهنای پالس رو انجام میده به این مفهوم که میتونید با تغییر پهنمای پالس موج مربعیتون، منظور خاصی رو در مدار پیاده سازی کنید .. در حقیقت با تغییر پهنای پالس ، ولتاژ متوسط dc حاصل از موج مربعی شما تغییر میکنه و میتونید با تغییر پهنای پالستون، این مقدار رو افزایش یا کاهش بدید .. روندی هم که در میکروکنترلر دنبال میکنه به همین ترتیبه ..

                        یکی از واحد هایی که در میکروکنترلر وجود داره واحد تایمر کانتره .. این واحد مسئولیت تنظیمات و Aplication های زمانی و شمارشی رو بر عهده داره و اصولا برای Sequential Operation استفاده میشه به این معنا که برای مجموعه عملیات ترتیبی یا شمارشی میتونید از اون استفاده کنید .. یه رجیستر معروفی که توی تایمر کانتر وجود داره و به عنوان رجیستر تایمر/کانتر محسوب میشه .. این رجیستر TCNT هست که شمارش های بیتی شمارنده ی این واحد رو حافظه ی S SRAM میکروکنترلر ذخیره میکنه .. با افزایش شمارش شمارنده، مقدار بارگذاری شده توی رجیستر هم زیا میشه تا به مقدار ماگزیمم خودش برسه و OverFlow بشه به این معنا که یه بیت Carry تولید میکنه و ریست میشه .. یکی از مدهایی که در تایمر کانتر وجود داره مد PWM هست .. همونطور که میدونید دو حالت مختلف برای این مد وجود داره یکی سریع و دیگری تصحیح فاز یا دوشیب ..

                        حالت سریع یا تک شیب عمل مقایسه رو در یه لبه یا جهت شمارش انجام میده و اون یکی در دو جهت .. اما معیار کلی فعالیت PWM در میکرو به چه ترتیبه؟ همونطور که گفتیم این یکی از مدهای واحد تایمره .. پس با فعالیت تایمر میشه از PWM هم استفاده کرد و در صورتی که تایمر غیر فعال باشه، استفاده از PWM به عنوان مدی از مدهای تایمر/کانتر کاملا بی معنی خواهد بود .. حالا شمارش تایمر داره انجام میشه .. یه مقدار مبنا برای مقایسه با رجیستر تایمر تعریف میشه که با رسیدن به اون مقدار خروجی مقایسه کننده که به یه Pin میکرو متصل شده Toggle میشه .. اون مقدار مبنایی که به عنوان معیار برای مقایسه تعریف کردیم در رجیستری به نام OCR ذخیره میشه و این به اون معناست که معیار کمقایسه همون OCR هست .. که میتونیم توش بنویسیم (خودمون تعیینش کنیم ..) و هم میتونیم اون رو بخونیم .. (خاصیت های RAM ..) به این ترتیب میتونید خروجی به عنوان موج مربعی داشته باشید .. موفق باشید ..
                        دوستان! مدتی کمتر به سایت میام ..

                        دیدگاه

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