Winbond ISD1700 Voice Recorder


Closed Thread
Results 1 to 40 of 59

Hybrid View

  1. #1
    Join Date
    Nov 2006
    Location
    Murrieta, CA
    Posts
    62

    Default Winbond ISD1700 Voice Recorder

    Ok, I am trying to figure out this very simple procedure. I have a 16F876A interfaced via SPI to ISD17120 voice recorder chip. just to make this simple and get an idea i want to record 5 one second messages to the device. then I want to play those 5 messages randomly. if you look at the design guide follow the SPI command interface and these commands SET_PLAY SET_REC SET_ERASE. I am not fully understanding how to address the individual messages. if someone can give me some kind of clue as what to send to the ISD device that would be great. I have searched the forums please dont send me links to other projects involving different ISD devices unless its the 1700 series and pertains to my exact request.

    design guide www.gmdii.com/files/ISD1700_Design_Guide.pdf
    There are 10 kinds of people. Those that know binary and those that do not.

  2. #2
    Join Date
    Aug 2006
    Location
    Omaha, Nebraska USA
    Posts
    263


    Did you find this post helpful? Yes | No

    Default

    The simplest way would be to randomize a number to get a value between 1 and 5, then invoke the ISD1700 device's FWD command that number of times. You can't hit a dead end because the memory is circular.
    Russ
    N0EVC, xWB6ONT, xWN6ONT

    "Easy to use" is easy to say.

  3. #3
    Join Date
    Nov 2006
    Location
    Murrieta, CA
    Posts
    62


    Did you find this post helpful? Yes | No

    Exclamation ISD17120 SPI Commands Structure.

    Good lord... does anyone have any code to use SPI with the ISD1700 Series Devices. I wasted an entire saturday trial and erroring this thing.

    Just please give me a simple command set to record a message and then play it back..

    ANYONE !!!!
    There are 10 kinds of people. Those that know binary and those that do not.

  4. #4
    Join Date
    Nov 2007
    Posts
    8


    Did you find this post helpful? Yes | No

    Default

    Would second that, just ordered 1 and would be nice to have some sample code to test it out.

  5. #5
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    Ship me one, and I'll do it.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  6. #6
    Join Date
    Jun 2007
    Posts
    10


    Did you find this post helpful? Yes | No

    Default

    Gentlemen... I'm almost there, gimme a few days

  7. #7
    Join Date
    Jun 2007
    Posts
    10


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by mister_e View Post
    Ship me one, and I'll do it.


    Me too!


    Or... You can try it yourself


    Most of this code was written for me by Jerson and I reconfigured to "fit my needs". The following will give you an idea on how to make the ISD1700 series jump and also telling them how high to jump AND how loud...

    Code:
    SCLK        var portc.0
    MOSI        var portc.1
    MISO        var portc.2
    SS          var portc.3
    
    ' This array contains data to be sent to the ISD
    ' and on return it contains data reveived from ISD
    ISD_Data    var byte[8]
    SR0         var ISD_Data[0]
    SR1         var ISD_Data[1]
    
    isCmdErr    var SR0.0
    isINT       var SR0.4
    isReady     var SR1.0
    
    Reg         var byte
    Cnt         var byte
    bSPI        var byte      ' the byte being transferred on SPI
    
        ADCON1 = %00000111    'Sets all A/D conversion to Digital input/output.
        TRISA = %111111          ' All A Ports input
        TRISC = %00000100       ' MISO is input
        TRISB = %00000000
        SS = 1
        SCLK = 1
        MOSI = 0
    
    
    
        ' Initialize the ISD
    ' ------------------------------------------------------------------------------------
        gosub PowerUp
        pause 10
        gosub WR_APC2 ' In my application, this sets the volume and config bits. 
                               'You can use it as well if you desire.
        pause 10
        gosub ClrInt
    
    'This is the Set_Play command
    SetPlay:
        isCmdErr = 1
        while isCmdErr
          ss = 0
          bSPI = $80
          gosub SPI
          ISD_Data[0]=bSPI
    
          bSPI = $00    
          gosub SPI
          ISD_Data[1]=bSPI
    
          bSPI = $10       ' Start Address low byte. (First packet of memory after effects)(Use your begin low address here)
          gosub SPI
          ISD_Data[2]=bSPI
    
          bSPI = $00       ' Start Address high byte (Use your begin high address here)    
          gosub SPI
          ISD_Data[3]=bSPI
    
          bSPI = $00       ' end address low byte (Use your end address here)
          gosub SPI
          ISD_Data[4]=bSPI
    
          bSPI = $00       ' end address mid byte(Use your end address here)      
          gosub SPI
          ISD_Data[5]=bSPI
    
          bSPI = $00       ' end address high byte / Note end address is 24 bits long. (Use your end address here)
          gosub SPI            
          ISD_Data[6]=bSPI
    
          bSPI = $00
          gosub SPI
          ISD_Data[7]=bSPI
          ss = 1
        wend
        return
    
    PowerUp:
        isCmdErr = 1
        while isCmdErr
          SS=0
          bSPI=$01
          gosub SPI
          ISD_Data[0] = bSPI
          bSPI=$00
          gosub SPI
          ISD_Data[1] = bSPI
          SS=1
        wend
        return
        
    
    'This is the command I use to set the volume as stated above. I have the factory defaults tagged in brackets for reference...
    
    WR_APC2:
        isCmdErr = 1
        while isCmdErr
          ss = 0
          bSPI = $65
          gosub SPI
          ISD_Data[0]=bSPI
    
          bSPI = %01000011
          gosub SPI
          ISD_Data[1]=bSPI                      'Factory default
                                                     'high byte  'low byte
          bSPI = %00000100                   '(0100)    (01000000)
          gosub SPI
          ISD_Data[2]=bSPI
          ss=1
        wend
        return
    
    ' transact a byte with SPI interface
    ' You should come here after setting SS=0 for this to work
    SPI:
        for Cnt=0 to 7
          MOSI=bSPI.0         ' shift MOSI from LSB
    
          SCLK = 0            ' clock the MOSI data
          if MISO then        ' read the MOSI data
          @ bsf status,c
          else
          @ bcf status,c
          endif
          @ rrf _bSPI         ' shift MISO into MSB
          SCLK = 1
          
        next
        return
        
    
    ' clear Interrupt and EOM bits
    ClrInt:
        isCmdErr = 1
        while isCmdErr
          SS=0
          bSPI=$04
          gosub SPI
          ISD_Data[0] = bSPI
          bSPI=$00
          gosub SPI
          ISD_Data[1] = bSPI
          SS=1
        wend
        return
    
    ' read status of Chip
    ReadStatus:
        SS=0
        bSPI=$05
        gosub SPI
        ISD_Data[0]=bSPI
        bSPI=$00
        gosub SPI
        ISD_Data[1] = bSPI
        bSPI=$00
        gosub SPI
        ISD_Data[2] = bSPI
        SS=1
        return
    Brenon
    Last edited by ScaleRobotics; - 26th October 2010 at 23:13. Reason: added code tags

  8. #8
    Join Date
    Sep 2005
    Location
    Dayton, Ohio
    Posts
    72


    Did you find this post helpful? Yes | No

    Default

    I haven't tested the code yet (but thanks VERY much for posting it!!).

    But I noticed one thing...

    You have SR0 and SR1 as the first 2 bytes returned. The datasheet shows that the first TWO bytes returned are SR0 for every SPI command (as SR0 is 2 bytes long). So SR1 should actually be the THIRD byte returned?

    SR0 var ISD_Data[0]
    SR0b var ISD_Data[1] 'or whatever you want to name it
    SR1 var ISD_Data[2]

    Or am I missing something? I don't think this would cause a problem in your examples as you are not checking the isReady bit.
    Jim Robertson
    "MilesTag" DIY Lasertag
    www.lasertagparts.com/mtdesign.htm
    Dayton, Ohio

Similar Threads

  1. ISD1700 series Winbond chipcorder
    By rickeybell in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 21st March 2010, 06:13
  2. optical voice link
    By Macgman2000 in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 18th May 2008, 21:11
  3. Voice CODEC
    By Ron Marcus in forum Off Topic
    Replies: 0
    Last Post: - 15th May 2005, 19: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