ارتباط با mmc sd
سلام دوستان خوب هستین من میخوام یه ظبط پخش دیجیتال درست کنم با avr برنامه زیر رو ؟آزمایش کردم جواب داد و کار میکنه ولی فقط پخش از کلیات برنامه یه چیزای فهمیدم ولی جزیاتشو نه ممنون میشم دوستان توضیح بدن قسمتهای مثل آدرس دهی mmc و... و توضیحی برای اضافه کردن ظبط به این برنامه البته میخوام هر جا که خواستم ضبط کنم از همونجا هم بخونم و یه مشکل دیکه من با mmc 32 مگابایت مشکلی ندارم ولی 1گیگو نمیخونه ؟ همینطور sd مشکل کجاس ممنون میشم راهنمای کنید
نقل قول :
$regfile = "m8def.dat"
$crystal = 11059200 '
Config Pinc.4 = Input
Pause Alias Pinc.4
'-------------------------------
Config Pinc.5 = Input
Kelid Alias Pinc.5
'--------------------------------
Config Pinc.6 = Input
Kelid2 Alias Pinc.6
'-------------------------------
Config Pinb.4 = Output
Config Pind.3 = Output
Set Portd.3
'---------------------------------
Config Debounce = 20
'-------------------------------------
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1
Pwm1a = 255
Pwm1b = 255
'Constants
'warter are FAM & Behnam
Const Msbl = 0
Const Msbh = 1
Const Dly = 2
Const Bits8 = 8
Const Bits16 = 16
Const Bits32 = 32
'Dim
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 Ali As Byte
Dim Test As Long
Dim Copy As Long
Dim Shomare As Long
Dim Hassan As Byte
'Aliases
Cs Alias Portc.0
Mosi Alias Portc.1
Clk Alias Portc.3
Miso Alias Pinc.2
'Declarations
Declare Sub Minit
Declare Sub Mread(byval Addr As Long )
'Configs
Config Portc.2 = Output
Config Portc.0 = Output
Config Portc.3 = Output
Config Pinc.1 = Input
Waitms 300
Config Spi = Soft , Din = Pinc.2 , Dout = Portc.1 , Ss = Portc.0 , Clock = Portc.3
Enable Interrupts
Enable Spi
Spiinit
'******** MAIN PROGRAM *************
Reset Portd.3
Main:
'Initialize the MMCC
Minit
Adres = 1048576
Ali = 0
Reset Portd.3
Inja:
Toggle Portb.4
Mread Adres
Debounce Pause , 1 , Stop_play , Sub
Debounce Kelid2 , 1 , Jolo2 , Sub
Debounce Kelid , 1 , Jolo , Sub
Adres = Adres + 512
'baraye in ke ta dastgah roshan shod peygham 1 ra ped konad
'-----------------------------------------------------------------
If Ali = 0 Then
Adres = Adres + 5120000
Test = 512 * 7800
'Test = 512 * 8000
Adres = Adres - Test
Ali = 1
Test = Adres
End If
'-------------------------------------------------------------------
Goto Inja
Xloop:
Set Cs
Shiftout Mosi , Clk , Dat , Msbl
Endloop:
Goto Endloop
End 'end program
'***************************** END OF PROGRAM **********************************
'======= SUB ROUTINES AND FUNCTIONS =======
'warter are FAM & Behnam
'*** 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
'warter are FAM & Behnam
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
'warter are FAM & Behnam
'**** 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
Pwm1b = Resp
Waitus 29
'Waitus 3 '&Oacute;&Ntilde;&Uacute;&Eci rc;
Next I
Shiftin Miso , Clk , Resp , Msbl
Shiftin Miso , Clk , Resp , Msbl
Set Cs
'warter are FAM & Behnam
End Sub
Jolo:
Adres = Adres + 153600
For Shomare = 1 To 500
If Kelid = 0 Then Return
Waitms 1
Next
Adres = Adres + 972800
Return
Jolo2:
Adres = Adres - 153600
For Shomare = 1 To 500
If Kelid2 = 0 Then Return
Waitms 1
Next
Adres = Adres - 972800
If Adres < Test Then Adres = Test
Return
Stop_play:
Set Portd.3
Pwm1a = 255
Pwm1b = 255
Copy = Adres
Do
Debounce Pause , 1 , Play
Loop
Play:
Reset Portd.3
Adres = Copy
Return
سلام دوستان خوب هستین من میخوام یه ظبط پخش دیجیتال درست کنم با avr برنامه زیر رو ؟آزمایش کردم جواب داد و کار میکنه ولی فقط پخش از کلیات برنامه یه چیزای فهمیدم ولی جزیاتشو نه ممنون میشم دوستان توضیح بدن قسمتهای مثل آدرس دهی mmc و... و توضیحی برای اضافه کردن ظبط به این برنامه البته میخوام هر جا که خواستم ضبط کنم از همونجا هم بخونم و یه مشکل دیکه من با mmc 32 مگابایت مشکلی ندارم ولی 1گیگو نمیخونه ؟ همینطور sd مشکل کجاس ممنون میشم راهنمای کنید
نقل قول :
$regfile = "m8def.dat"
$crystal = 11059200 '
Config Pinc.4 = Input
Pause Alias Pinc.4
'-------------------------------
Config Pinc.5 = Input
Kelid Alias Pinc.5
'--------------------------------
Config Pinc.6 = Input
Kelid2 Alias Pinc.6
'-------------------------------
Config Pinb.4 = Output
Config Pind.3 = Output
Set Portd.3
'---------------------------------
Config Debounce = 20
'-------------------------------------
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1
Pwm1a = 255
Pwm1b = 255
'Constants
'warter are FAM & Behnam
Const Msbl = 0
Const Msbh = 1
Const Dly = 2
Const Bits8 = 8
Const Bits16 = 16
Const Bits32 = 32
'Dim
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 Ali As Byte
Dim Test As Long
Dim Copy As Long
Dim Shomare As Long
Dim Hassan As Byte
'Aliases
Cs Alias Portc.0
Mosi Alias Portc.1
Clk Alias Portc.3
Miso Alias Pinc.2
'Declarations
Declare Sub Minit
Declare Sub Mread(byval Addr As Long )
'Configs
Config Portc.2 = Output
Config Portc.0 = Output
Config Portc.3 = Output
Config Pinc.1 = Input
Waitms 300
Config Spi = Soft , Din = Pinc.2 , Dout = Portc.1 , Ss = Portc.0 , Clock = Portc.3
Enable Interrupts
Enable Spi
Spiinit
'******** MAIN PROGRAM *************
Reset Portd.3
Main:
'Initialize the MMCC
Minit
Adres = 1048576
Ali = 0
Reset Portd.3
Inja:
Toggle Portb.4
Mread Adres
Debounce Pause , 1 , Stop_play , Sub
Debounce Kelid2 , 1 , Jolo2 , Sub
Debounce Kelid , 1 , Jolo , Sub
Adres = Adres + 512
'baraye in ke ta dastgah roshan shod peygham 1 ra ped konad
'-----------------------------------------------------------------
If Ali = 0 Then
Adres = Adres + 5120000
Test = 512 * 7800
'Test = 512 * 8000
Adres = Adres - Test
Ali = 1
Test = Adres
End If
'-------------------------------------------------------------------
Goto Inja
Xloop:
Set Cs
Shiftout Mosi , Clk , Dat , Msbl
Endloop:
Goto Endloop
End 'end program
'***************************** END OF PROGRAM **********************************
'======= SUB ROUTINES AND FUNCTIONS =======
'warter are FAM & Behnam
'*** 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
'warter are FAM & Behnam
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
'warter are FAM & Behnam
'**** 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
Pwm1b = Resp
Waitus 29
'Waitus 3 '&Oacute;&Ntilde;&Uacute;&Eci rc;
Next I
Shiftin Miso , Clk , Resp , Msbl
Shiftin Miso , Clk , Resp , Msbl
Set Cs
'warter are FAM & Behnam
End Sub
Jolo:
Adres = Adres + 153600
For Shomare = 1 To 500
If Kelid = 0 Then Return
Waitms 1
Next
Adres = Adres + 972800
Return
Jolo2:
Adres = Adres - 153600
For Shomare = 1 To 500
If Kelid2 = 0 Then Return
Waitms 1
Next
Adres = Adres - 972800
If Adres < Test Then Adres = Test
Return
Stop_play:
Set Portd.3
Pwm1a = 255
Pwm1b = 255
Copy = Adres
Do
Debounce Pause , 1 , Play
Loop
Play:
Reset Portd.3
Adres = Copy
Return
دیدگاه