ISD17XX sesli yanıt(öneri ve tavsiye)

Başlatan fryrmnd, 24 Mayıs 2011, 23:10:21

fryrmnd

merhaba arkdaşlar... 3-5 sene önce az buçuk picle uğraşmışıtım... şimdi gene bişeyler yapma durumundayım(severek)... programlamayla baya uğraştık tabii içine hardware  de girince biraz sıkıntı oluyo... onun için tavsiye,önerileri ve deneyimlerinizi paylaşırsanız sevinicem...
  ISD 1790(büyük ihtimal) ses kayıt entegresine 8-12 kişinin ismini kaydedicem... ve duruma göre herhangi bir bölgeden bir ismi çalıcam...  buraya kadar olan kısımda bir ilerlemem yok. tabi inasıl olcağını kafamda tasarladım biraz... ama daha da detaylandırıp... hafızayı 12 bölgeye bölüp tuş takımı ile seçilen hafızayı silip oraya tekrar dan kayıt yapma ve kaydedilen veri ayrılmış sınırı geçiyosa "fazla konuştun tekrar dene :)"  gibi bi uyarı verecek bir düzenek oluştursam diye düşünüyorum hatta lcd de ekleyip değişik özellikler de eklesem diye de düşünmüyo değilim...
   tabii 3-5 led yakıp bi kaç isis simülasyonu yapan biri olarak fazla uçtum ama... sizce bu işin oluru varmıdır... ilk kıısımlar neyse de şu mesaj sınırı aşınca uyarı verdirme felan fantezi mi oldu acaba... aleti kayıttan çıkaramazsak başka bir mesaj da silinicek tabii haliyle... gerçi gerekirse  tümden siler gene kayıt yaparız ama...  işte böyle kendi kendime konuşup duruyom...  entegere bir kç güne gelir sanırım tabiii bsitten kayıt sonra tek kaydı okuma felan yapıcam... inşallah aleti yakmayız fazla denerken...
  şimdiden herkese teşekkürler....   

fryrmnd

çok mu saçmaladım yada konuya hakim olanlar vakit mi bulamıyo :(

fryrmnd

hiç bilgisi olan yok mu...  bu çipe hardware spı la mı yoksa shiftout shiftin lemi ulaşmya çalışsam... hızdan başka farkı varmıdır... birde shiftout ve shitın kullanırken SDI ve SDO bacaklarını de değiştirebiliyomuyuz...  örnek bir kodda spi haberleştiğini yazan biri farklı bacakları kullanmış.... kodu ekleyebilirim... biraz uzunca ama

Maxim

sizin ne istediğinizi anlamadım açıkçası
kodu biz yazıp, devreyi kurup size`mi sunalım, bunun gibi birşeymi ?

soru:
siz ne yaptınız?
elinizde ne var ?
devreyi kurdunuzmu ?
deneme yaptınızmı ?
kod yazmaya başladınız ama bir yerde takıldınızmı ?
başka türlü bu başlık bir yere varmaz ben size söyleyeyim

siz şunu diyorsunuz, xxx entegresi ile yyy devresi yapmak istiyorum ... yapıcam edicem..
tamam yapın o zaman, peki bizden ne istiyorsunuz o net değil , onu demek istiyorum
birşeyler yapın bir yerde takılın soru sorun .


Bu arada picbasic forumunda yayınlanmış bir kod var
sizin istediğinizi vermeyebilir ama çalışıyordur birşekilde.

bence daha basit kontrol imkanı veren ISD entegrelerini kullanın, bunun kullanımı biraz zorlu gözüküyor.


'****************************************************************
'*  Name    : ISD17XX.BAS                                       
'*  Authors : Jerson,Brenon,Jim,Gary                            
'****************************************************************

define OSC 20

Time1 var word          'these variables used for the Erase flash
Time2 var byte          'LEDS when the device is erased
                        'used in Label - FlashLED:
time1 = 5000
time2 = 50

'******************** DEFINE VARIABLES ***********************

temp_bit    VAR BIT

temp		VAR BYTE
spi_cnt 	var byte	' counter for SPI transfer
bSPI 		var byte 	' the byte being transferred on SPI

s_addr		VAR WORD	' Start Address
e_addr		VAR WORD	' End Address

ISD_Data 	var byte[7]	' This array contains data to/from ISD

SR0a 		var ISD_Data[0]
SR0b 		var ISD_Data[1]
SR1 		var ISD_Data[2]    ' only valid after ReadStatus

isCmdErr 	var SR0a.0	' 1=previous command failed/ignored
isFull 		var SR0a.1	' 1=memory full
isPU		var SR0a.2	' 1=ISD powered up
isEOM		VAR SR0a.3	' 1=EOM detected (clear by CLR_INT command)
isINT 		var SR0a.4	' 1=current operation completed (clear by CLR_INT command)

isReady 	var SR1.0	' 1=Ready to receive SPI command (only valid after ReadStatus)
				        ' Some SPI commands can still be sent when isReady=0


'******************** PIN ASSIGNMENTS ************************

Symbol miso		= PORTC.5			'ISD1760 SPI MISO 
Symbol LED1	    = PORTA.5			'  
Symbol LED2	    = PORTA.0			'
Symbol ss		= PORTC.7			'ISD1760 SLAVE SELECT  
Symbol sclk		= PORTC.4			'ISD1760 SPI CLOCK 
Symbol mosi 	= PORTC.6         	'ISD1760 SPI MOSI	

'******************** INITIALIZATION *************************
initialize:

  ' Im using a PIC 16F876A with an external 20 MHZ clock
  ' there is really little setup. 

    	
	HIGH ss			'start with Slave Select HIGH
	HIGH sclk		'start with SPI Clock HIGH
	LOW  MOSI		'start with MOSI LOW
	
	LOW LED1
	LOW led2
	
	
start:                       'Initialize the ISD
	GoSub isd_pu
	PAUSE 50		         '50 mS Power Up Delay (per datasheet)
	
       'I removed the APC because it doesn't work on my Audio Board 
    
	PAUSE 10
	GoSub isd_clr_int	     'clear interrupt and EOM
	
	gosub erase              'this will erase the ISD chip whenever
	                         'I reprogram my PIC
	
	

'********************* MAIN PROGRAM **************************

main_loop:	'(MAIN PROGRAM LOOP)
     
    PAUSE 2000
    
RecordLoop:                       'Here is my board waiting for me to 
    if portc.3 = 1 then Record       'push the record button
    goto recordLoop
    
Record:

    high led1                   'a record LED
    
    if portc.3 = 1 then record  'it will not continue until i 
                                   'release the button
    
    s_addr = $010               'a 1 second clip takes approx 16 rows of 
    e_addr = $01f               'memory space $010-$01F = 16
    
    GOSUB isd_set_rec           'this Set_rec identical to set_play
                                'was added so i could record a message
                                
    
    PAUSE 2000    
    
    GOSUB isd_stop              ' an immediate stop to stop recording
    
    low led1                    ' turn record LED off
      

Playloop:                       'the same button then becomes a play button
    'pause 2000
    if portc.3 = 1 then play
    goto playloop

Play:
    high led2                   'a different LED for play
    
    if portc.3 = 1 then play    'wont play until button is released 
    
    s_addr = $010               'playing back from the same 16 rows
    e_addr = $01f
    
    GOSUB isd_set_play

    PAUSE 2000
    
    GOSUB isd_stop
       
    low led2
    
Eraseloop:                       
    'pause 2000                  
    if portc.3 = 1 then play     'in this loop you can either play the sound
    if portc.5 = 1 then erase    'again or erase it and record another one
    goto Eraseloop               'two different buttons are used

Erase:                           'this is the erase subroutine which is also 
    if portc.5 = 1 then erase    'called at the beginning of this program
    s_addr = $010                'this is not a Gang erase so the Start and
    e_addr = $01f                'End address must be present or you will get
    GOSUB isd_set_erase          'a command error
    
    gosub flashLED               'when i erase the chip a series of LEDS
                                 'are flased to indicate an erase.
    pause 1000
                
    goto recordloop              'after an erase it goes back to record loop
    
    

'********************** SUBROUTINES **************************
isd_pu:				
	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_wait_ready:
	GOSUB isd_rd_status
	IF isReady = 0 THEN isd_wait_ready
	RETURN

'--------------------------------------------------------------------------
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
	
'--------------------------------------------------------------------------
isd_Set_Erase:
	LOW ss

	bSPI = $82		           '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
	
'--------------------------------------------------------------------------
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

'--------------------------------------------------------------------------
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

'--------------------------------------------------------------------------
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

'--------------------------------------------------------------------------
isd_stop:					 ' Stop Immediately
	LOW ss

	bSPI=$02		         'Stop Command
	gosub isd_spi
	ISD_Data[0] = bSPI 	     'SR0a

	bSPI=$00
	gosub isd_spi
	ISD_Data[1] = bSPI 	     'SR0b

	HIGH ss

	RETURN

'--------------------------------------------------------------------------
isd_rd_status:				'read status of ISD1700 
	LOW ss                  '

	bSPI=$05		        'Read Status Command
	gosub isd_spi
	ISD_Data[0] = bSPI	    'SR0a

	bSPI=$00
	gosub isd_spi
	ISD_Data[1] = bSPI	    'SR0b

	bSPI=$00
	gosub isd_spi
	ISD_Data[2] = bSPI	    'SR1

	HIGH ss

	RETURN

'*********** Erase Indicators ********************************
FlashLED:
    pulsout porta.5,time1
    pause time2
    pulsout porta.3,time1
    pause time2
    pulsout porta.2,time1
    pause time2
    pulsout porta.1,time1
    pause time2
    pulsout porta.0,time1
    pause time2
    low porta.0
return   

End

Mucit23

ISDxxxx spı ile nasıl kullanılıyor hiç bir bilgim yok ama kullananlar genelde soft spı kullanıyorlar. İnternettede zaten donanımsal spı ile ilgili tek bir uygulama bulamadım. Demekki kimse ihtiyaç duymuyor bu zımbırtıya :D
Yazılımsal spı de SDI ve SDO bacaklarını sen kendin belirlersin. Yani picde özel pinlerin dışında tüm pinleri kullanabilirsin bu iş için kullanabilirsin. Donanımsal spı de ise bu pinler sabittir. Değiştirilemez..
Kolay gelsin.

fryrmnd

teşekkürler maxim ve mucit... sadece kullananlar varsa başlamadan öneri almak istedim... yazdığımda da zaten örnek kod veya şema istedğim yok... haftalardır yaptığım aramalarda da zzaten verdiğiiniz kodu, o kodun kısa versiyonunu  ve daha değişiklerini ben de  bulup uzun uzadıya  inceledim... datashet ve design notunu da zaten bayadır inceliyorum... sadece kullanan varsa ve şu kısam dikkat et,ne bileyim şunu yaparsan yakabilirsin diyebilecek birileri varmı diye yazmıştım ilk mesajımı dikkat ederseniz... çok fazla tecrübem olmadığından son mesajda kodlamaya ilişkin bi soru sordum... yani kod felan istemedim... tekrar teşekkürler