ısd1760 kullanımı hakkında yardım

Başlatan zerolax, 23 Ocak 2014, 18:53:48

zerolax

herkese hayırlı akşamlar

ısd1760 var elimde bunu spı kullanarak pic ile haberleştirmek istiyorum istenilen adresteki sesi çalmasını daha sonra baska bir adresteki sesi çalmasını istiyorum ama ısd ye ne göndereceğimi tam olarak bilmiyorum ısd25xx serisi gibi süre hesaplaması yapıp onu byte olarak mı göndermem gerekiyor bilen varsa lütfen yardım etsin
EMRE SALMAN

Hattuşa

slm arkadaşlar ISD1760 ı işlemci ile kontrol ederek ses kaydı ve ses çaldırma işlemini yaptırabiliyorum. ihtiyacı olan arkadaşlara yardımcı olabilirim.
NOT. direk kod olarak elimdekileri paylaşamadım, zira ticari bir projedir.
ama bu entegre ile ilgilenen üyelere buradan her türlü yardıma hazırım

Hattuşa

slm arkadaşlar bir arkadaşımız özelden ISD1760 ın kontrolü ile ilgili bilgi istemiş, buna istinaden bende kodları eklemeye çalışacağım. ISD1760 ı kontrol edebilmek için işlemcimiz ile 1760 arasına 4 adet pinle bağlantı kuruyoruz.
Symbol sS    = PORTA.1         'ISD1760 SLAVE SELECT  
Symbol ScLk  = PORTA.2         'ISD1760 SPI CLOCK
Symbol mOsI  = PORTA.3            'ISD1760 SPI MOSI
Symbol mIsO  = PORTA.5         'ISD1760 SPI MISO


değişkenlerimizde belirliyoruz

Dim SpI_cNt As Byte	' counter for SPI transfer
Dim bSpI As Byte ' the byte being transferred on SPI
Dim S_aDdR As Word ' Start Address
Dim E_AdDr As Word ' End Address
Dim IsD_DaTa[7] As Byte ' This array contains data to/from ISD
Dim sR0A As Byte
Dim Sr0B As Byte
Dim Sr1 As Byte
Dim IsCmDErR As sR0A.0 ' 1=previous command failed/ignored
Dim IsFuLL As sR0A.1 ' 1=memory full
Dim IsPu As sR0A.2 ' 1=ISD powered up
Dim IsEoM As sR0A.3 ' 1=EOM detected (clear by CLR_INT command)
Dim IsInT As sR0A.4 ' 1=current operation completed (clear by CLR_INT command)
Dim IsReAdY As Sr1.0 ' 1=Ready to receive SPI command (only valid after ReadStatus)
        ' Some SPI commands can still be sent when isReady=0

işlemciye start verdiğimizde ISD nin PU (power up bitini) ve set işlemlerini yapıyoruz.

IsD_pU:  'power up (ısd yi aç)				
Low sS
bSpI=$01 'Power Up Command
GoSub IsD_SpI
IsD_DaTa[0] = bSpI 'SR0a
bSpI=$00
GoSub IsD_SpI
IsD_DaTa[1] = bSpI 'SR0b
High sS
Return


IsD_cLr_InT:					' CLEAR INTERRUPT AND EOM BITS
Low sS
bSpI=$04             'Clear Interrupt Command
GoSub IsD_SpI
IsD_DaTa[0] = bSpI         'SR0a
bSpI=$00
GoSub IsD_SpI
IsD_DaTa[1] = bSpI         'SR0b
High sS
Return


daha sonra kayıt edeceksek şayet, kayıt için ses ayarını yapıp peşinden kayıt adreslemesini vererek ilgili noktayı kayıt ediyoruz.
IsD_wR_aPc:         'Write to APC Register using bits D2:D0 to set Volume
Low sS         ' table 7.1  sayfa=18 den bak 
   bSpI = %01100101      'Write APC2
   GoSub IsD_SpI
   IsD_DaTa[0] = bSpI    'SR0
If SeS_A =1 Then bSpI =%00000000   'Volume set by D2:D0 (000=Max)   'SESIN AYARIIIIIII
If SeS_A =2 Then bSpI =%00000001         
If SeS_A =3 Then bSpI =%00000011
If SeS_A =4 Then bSpI =%00000111           
   GoSub IsD_SpI
   IsD_DaTa[1] = bSpI    'SR0b           
   bSpI = %00000000    'PWM Speaker Output D8 (0=Enable, 1=Disable) 000 MAX.   
   GoSub IsD_SpI
   IsD_DaTa[2] = bSpI    'SR0a
High sS
Return


kayıt komutu için:
IsD_sEt_ReC:
Low sS
bSpI = $81            'Set Record Command (7 bytes)
GoSub IsD_SpI
IsD_DaTa[0] = bSpI        'SR0a
bSpI = $00
GoSub IsD_SpI
IsD_DaTa[1] = bSpI        'SR0b
bSpI = S_aDdR.LowByte    'Start Address low byte.
GoSub IsD_SpI
IsD_DaTa[2] = bSpI        'SR0a
bSpI = S_aDdR.HighByte    'Start Address high byte
GoSub IsD_SpI
IsD_DaTa[3] = bSpI        'SR0b
bSpI = E_AdDr.LowByte    'End Address low byte
GoSub IsD_SpI
IsD_DaTa[4] = bSpI        'SR0a
bSpI = E_AdDr.HighByte    'End Address high byte
GoSub IsD_SpI
IsD_DaTa[5] = bSpI        'SR0b
bSpI = $00            'Reserved Address - set to "0"
GoSub IsD_SpI
IsD_DaTa[6] = bSpI        'SR0a
High sS
Return



kayıt edilen yeri dinletmek için;önce dinletilecek adresi belirleyip komutu veriyoruz
IsD_sEt_PlAy:
Low sS
bSpI = $80 'Set Play Command (7 bytes)
GoSub IsD_SpI
IsD_DaTa[0] = bSpI 'SR0a
bSpI = $00
GoSub IsD_SpI
IsD_DaTa[1] = bSpI 'SR0b
bSpI = S_aDdR.LowByte ' Start Address low byte.
GoSub IsD_SpI
IsD_DaTa[2] = bSpI 'SR0a
bSpI = S_aDdR.HighByte ' Start Address high byte
GoSub IsD_SpI
IsD_DaTa[3] = bSpI 'SR0b
bSpI = E_AdDr.LowByte ' End Address low byte
GoSub IsD_SpI
IsD_DaTa[4] = bSpI 'SR0a
bSpI = E_AdDr.HighByte ' End Address high byte
GoSub IsD_SpI
IsD_DaTa[5] = bSpI 'SR0b
bSpI = $00 ' Reserved Address - set to "0"
GoSub IsD_SpI
IsD_DaTa[6] = bSpI 'SR0a
High sS
Return


tabi kayıt dinletmede istersek play komutundan önce volum kontrolu yapabiliriz. paly volum kontrol şekli yukarıdaki gibi 8 basamak olarak hatırlıyorum.

eğer kayıdın belirli bir yerini silmek istersek;
IsD_SeT_ErAsE:
Low sS
bSpI = $42            'Set Erase Command (7 bytes)
GoSub IsD_SpI
IsD_DaTa[0] = bSpI         'sR0A
bSpI = $00
GoSub IsD_SpI
IsD_DaTa[1] = bSpI        'SR0b
bSpI = S_aDdR.LowByte    'Start Address low byte.
GoSub IsD_SpI
IsD_DaTa[2] = bSpI        'SR0a
bSpI = S_aDdR.HighByte    'Start Address high byte
GoSub IsD_SpI
IsD_DaTa[3] = bSpI        'SR0b
bSpI = E_AdDr.LowByte    'End Address low byte
GoSub IsD_SpI
IsD_DaTa[4] = bSpI        'SR0a
bSpI = E_AdDr.HighByte    'End Address high byte
GoSub IsD_SpI
IsD_DaTa[5] = bSpI        'SR0b
bSpI = $00            'Reserved Address - set to "0"
GoSub IsD_SpI
IsD_DaTa[6] = bSpI        'SR0a
High sS
Return



entegrenin tamamen içini silmek için yani genel erase komutu;
IsD_G_eRaSE:
Low sS
bSpI=$43             'Clear Interrupt Command
GoSub IsD_SpI
IsD_DaTa[0] = bSpI         'SR0a
bSpI=$00
GoSub IsD_SpI
IsD_DaTa[1] = bSpI         'SR0b
High sS
Return

IsD_cLr_InT: ' CLEAR INTERRUPT AND EOM BITS
Low sS
bSpI=$04             'Clear Interrupt Command
GoSub IsD_SpI
IsD_DaTa[0] = bSpI         'SR0a
bSpI=$00
GoSub IsD_SpI
IsD_DaTa[1] = bSpI         'SR0b
High sS
Return


son olarakta spı koduda şu şekilde;
IsD_SpI:				        ' shift SPI data out and into SPI byte 
For SpI_cNt = 0 To 7        '
    mOsI = bSpI.0     ' shift LSB of byte onto MOSI line
    Low ScLk         ' clock MISO data out to uC (Falling Edge)
    tEmP_bIt = mIsO         '
    High ScLk         ' clock MOSI into ISD1700 (Rising Edge)
    bSpI = bSpI >> 1 ' shift SPI byte Right
    bSpI.7 = tEmP_bIt
Next SpI_cNt
Return



bu kodları parca parca verdim, eğer yapacak arkadaşımız birleştiremezse buraya kodunu eklerse bütün hale getirebiliriz.

ugur_05

Hocam çok güzel anlatmışınız fakat kullandığnız dili bilmediğimden çözemedim ccs c veya arduino hangisi rahatınıza gelirse mantığnı bile anlatsanız yeter çok acil öğrenmem lazım.

Hattuşa

benim kullandığım dil proton yani basic mantık aslında basit datasheette yazıyor herşey, sizin takıldığınız nokta neresi ise o konuda yardımcı olayım.

samet

Merhaba ben şu an sadece ısd 1760 ile ses kayıt vs. ile ilgileniyorum.Devreyi pcb de kurdum fakat entegrenin nasıl çalıştığını anlayamadım.Sesi bir şekilde nasıl oldu bilmiyorum kayıt ettim.Sonra çaldım.Ama silme işlemi yapamıyorum.Yani erase tuşuna basılı tutup 2 kez led yanıp sönüyor fakat sonra 7 kez yanıp sönMÜYOR.Kayıt olayınıda anlamadım.Şu an tek yapabildiğim play ve volume.İsteğene yaptığım projeyi gönderebilirim.Arkadaşlar bu konuda yardıma ihtiyacım var.Yardımlarınızı bekliyorum

Powered by EzPortal