SES KAYIT YARDIM

Başlatan xxlxxl, 22 Kasım 2011, 20:32:05

xxlxxl

arkadaşlar bir konuda yardımlarınız istiyorum..

5 adet ses kayıt edeceğim...

test1
test2
test3
test4
test5
kayıt ettiğiğim entegreden pic ile göndericeğim birkomut ilee istediğim test sesini çaldırmak istiyorum saygılarımla  not: ISDN ORNEGI buldum fakat yeterli açıklamalar yok sizlerden anlaşılrı bir şekilde örnek olacak bir kod ve devre açıklama yardımı bekliyorum teşekkür ederim

fryrmnd

'Code Version: 01 
'Words Used = 354
'Revision Date: 8 Feb 2009
'PicBasic Pro Compiler version 2.50b
'Processor=PIC16F684  (WDT=ON, MCLR=INPUT, OSC=INTOSC)

'Modified from code posted by Jerson and Brenon

'Memory Reference:
'ISD17XX First Address = 0x010
'ISD1730 Max Address   = 0x0FF
'ISD1760 Max Address   = 0x1EF
'ISD1790 Max Address   = 0x2DF

	DEFINE OSC 8
'*************************************************************
'*************************************************************
'******************** 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 sensor	= PORTA.0			' 
Symbol miso		= PORTA.3			'ISD1760 SPI MISO 
Symbol led1	    = PORTC.1			'  
Symbol led2	    = PORTC.2			'
Symbol ss		= PORTC.3			'ISD1760 SLAVE SELECT  
Symbol sclk		= PORTC.4			'ISD1760 SPI CLOCK 
Symbol mosi 	= PORTC.5         	'ISD1760 SPI MOSI	
	
'*************************************************************
'*************************************************************
'******************** INITIALIZATION *************************
'*************************************************************
'*************************************************************
initialize:
    CLEAR
	OSCCON = %01111000
	CMCON0 = 7				'turn off comparators
	ANSEL = 0
	
	PR2 = 35				'PWM Period (40K=49, 56K=35) (35 to 55)
	CCPR1L = 15				'PWM Duty Cycle (1 to 15)
	T2CON = 4				'Timer2 = ON; Prescale = 1:1
	CCP1CON = 0				'PWM module off
	OPTION_REG = %11111111	'Turn off PortA weak pull-ups
	
	TRISA = %111111    		'set PortA directions
	WPUA =  %000000			'enable weak pull-ups PortA
	IOCA =  %000000			'disable PORTA.0 Int On Change

	TRISC = %000000    		'set PortC directions

	PORTA = %000000
	PORTC = %000000    		'
	
	HIGH ss			'start with Slave Select HIGH
	HIGH sclk		'start with SPI Clock HIGH
	LOW MOSI		'start with MOSI LOW
	
    INPUT sensor
	LOW led1
	LOW led2
	
	
start:                       'Initialize the ISD
	GoSub isd_pu
	PAUSE 50		         '50 mS Power Up Delay (per datasheet)
	GoSub isd_wr_apc 	     'set volume and config bits 
	PAUSE 10
	GoSub isd_clr_int	     'clear interrupt and EOM
'*************************************************************	
'*************************************************************
'********************* MAIN PROGRAM **************************
'*************************************************************
'*************************************************************
main_loop:	'(MAIN PROGRAM LOOP)
     
    PAUSE 2000
    
    s_addr = $010
    e_addr = $02b
    GOSUB isd_set_play

    PAUSE 2500
    
    GOSUB isd_stop
    
    PAUSE 2000
    
    s_addr = $02c
    e_addr = $048
    GOSUB isd_set_play
    
    PAUSE 2500

    GOSUB isd_stop
    
    PAUSE 2000
        
    s_addr = $049
    e_addr = $07c
    GOSUB isd_set_play
    
    PAUSE 4800

    GOSUB isd_stop
    
    PAUSE 2000
        
    s_addr = $07d
    e_addr = $093
    GOSUB isd_set_play
    
    PAUSE 2000

    GOSUB isd_stop
        
	GoTo 	main_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_wr_apc:			'Write to APC Register using bits D2:D0 to set Volume 
	LOW ss

	bSPI = $65		'Write APC2 
	GoSub isd_spi
	ISD_Data[0] = bSPI 	'SR0a

	bSPI = %01000011	'Volume set by D2:D0 (000=Max)
				'Output set by D7 (0=Aud, 1=Aux)
	GoSub isd_spi
	ISD_Data[1] = bSPI 	'SR0b
					
	bSPI = %00000100 	'PWM Speaker Output D8 (0=Enable, 1=Disable)
				
	GoSub isd_spi
	ISD_Data[2] = 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_pd:					' Stop Immediately
	LOW ss

	bSPI=$07		'Power Down 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

'*************************************************************
'*************************************************************


	End
 '   Edit


'mainloop:

 '   PAUSE 1000
        
  '  s_addr = $049
   ' e_addr = $07c
   ' GOSUB isd_set_play
    
   ' GOSUB isd_wait_int
   ' GoSub isd_clr_int
    
   ' PAUSE 1000
        
   ' s_addr = $07d
   ' e_addr = $093
   ' GOSUB isd_set_play
    
   ' GOSUB isd_wait_int
   ' GoSub isd_clr_int
    
    'GoTo 	main_loop

'--------------------------------------------------------------------------
'isd_wait_int:
'	GOSUB isd_rd_status
'	IF isINT = 0 THEN isd_wait_int
'	RETURN


bu anlaşılabilir. bir bakın isterseniz.

xxlxxl

#2
çok güzel teşekkür ederim ama şema devre yok ben bunu nasıl nereye yapacağım nerde derleyeceğim sadece kod var hocam koda bişi demiyorum ama devre + şema + kod nedir bu beni aşar gibi


sayın hocam bn deneme1 deneme2 deneme3 diye ses kaydettim entegreye  picden ne göndericem bu sesleri istedim gibi çalsın anlamında pice ben 01 gönderdim zaman d1 02 gönderdim zaman d2 gibi çalsın istiyorum veya buna benzer bişi ama devre olarak şema olarak bir şey göremedim ?? birde kayıt entegresine ait bir şema ses kayıt ayrı ayrımı kayıt ediyoruz porta yoksa bir porttan mı daha sonra içierideki sesleri ayırt etme işlemi nasıl oluyor hesaplama yaparakmı....

fryrmnd

#3
hocam devre ısd nin datasheetinde var. onu kur olmazsa gene yardımcı olmaya çalışırım . kodlar da pic basic kodları. ccs ye falan uyarlanabilir diye düşünüyorum.  kodları değiştirerek kullandım. ama bu haliylede çalışıyor.

basic biliyormusunuz bilmiyorum ama. kodları incelerseniz nasıl yapıldığı gayet açık. şema işi en kolay kısmı.  programda ayrı ayrı fonksiyonlar tanımlanmış.
mesala
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


daha önceden yapılmış kaydı adress değreini de belirtere dinlemek için yazılmı fonksiyon.

tabii fonksiyonda ne yapıldığını anlamak için ısd yi iyi bilmeniz gerekir. pic her işlem için ısd ye Spi yoluyla farklı komut yolluyo(hex değeriyle).
kayıt yapılcak ise kayıt yapılacak adresin başlangıç ve bitiş değerini yine hex olarak yolluyor. aynı şekilde silme dinleme vs için. baya deteylı bir entegre.



xxlxxl

sayın hocam devre şema olarak yardımcı olursan makbule geçek datasetlerle yapamıyorum

fryrmnd

şuan elimde çizilmiş bir şema yok. datasheet te sayfa vereyim orayı kur. pic ile olan bağlantılarını da terif ederim.

http://www.elexp.com/a_data/ISD1700.pdf

18. sayfa