Winbond ISD1700 Voice Recorder


Closed Thread
Results 1 to 40 of 59

Hybrid View

  1. #1
    Join Date
    Jun 2007
    Posts
    10


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by milestag View Post
    I did some further testing. Seems the best way to determine when a sound has finished playing is to monitor the INT status bit. Just remember to clear the INT before each SET_PLAY...
    So monitoring the Int bit - reads 0 when the file is playing and sets to 1 when completed... I have completed the program for this chip in my application! : INSERT BOUNCY HERE:


    I'd REALLY like to thank Jerson for the initial beginning of this coding and to thank Jim for the clarifications needed to succeedingly write the final piece to operate my products.


    Brenon
    Last edited by ivirscar; - 8th February 2009 at 21:53. Reason: Clarification of post...

  2. #2
    Join Date
    Jan 2014
    Posts
    84


    Did you find this post helpful? Yes | No

    Default Re: Winbond ISD1700 Voice Recorder

    I tried to play a recorded sound on ISD1730 but something is wrong. I use 16F1503 set at 4 MHZ. Can somebody help me..? Thx in advance


    CODE:

    #CONFIG
    __config _CONFIG1, _FOSC_INTOSC & _MCLRE_OFF & _CP_ON & _CLKOUTEN_OFF
    __config _CONFIG2, _LVP_OFF & _LPBOR_OFF
    #ENDCONFIG

    DEFINE OSC 4
    OSCCON = %01101000 ' set 4MHz internal osc


    CM1CON0.7 = 0 ; Disable comparator 1
    CM2CON0.7 = 0 ; Disable comparator 2

    ADCON0 = 0 'all ports set as digital
    ADCON1 = 0

    TRISA = %00100000 'PORTA.5 as input
    ANSELA = %00000000
    PORTA = 0

    TRISC = %00000100 'PORTC.3 as input
    LATC = 0
    PORTC = 0
    ANSELC = 0


    '******************** 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 LED = PORTA.0 '
    Symbol miso = PORTC.2 'ISD1730 SPI MISO
    Symbol ss = PORTC.3 'ISD1730 SLAVE SELECT
    Symbol sclk = PORTC.1 'ISD1730 SPI CLOCK
    Symbol mosi = PORTC.0 'ISD1730 SPI MOSI

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

    HIGH ss 'start with Slave Select HIGH
    HIGH sclk 'start with SPI Clock HIGH
    LOW MOSI 'start with MOSI LOW
    LOW led


    start: 'Initialize the ISD
    GoSub isd_pu
    PAUSE 50 '50 mS Power Up Delay (per datasheet)
    GoSub isd_clr_int 'clear interrupt and EOM


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

    main_loop: '(MAIN PROGRAM LOOP)

    Playloop:
    if porta.5 = 1 then play
    goto playloop

    Play:
    high led ' LED for play

    if porta.5 = 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 led
    goto main_loop
    end

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

Similar Threads

  1. ISD1700 series Winbond chipcorder
    By rickeybell in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 21st March 2010, 07:13
  2. optical voice link
    By Macgman2000 in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 18th May 2008, 22:11
  3. Voice CODEC
    By Ron Marcus in forum Off Topic
    Replies: 0
    Last Post: - 15th May 2005, 20:28

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts