Some notes on the Basic Stamp 1 and the ISD1000A Voice Chip

Some notes on the Basic Stamp 1 and the ISD1000A Voice Chip

Home

Here are some notes on interfacing an ISD 1000AP 20 second voice recording chip. This part is pretty old but it is available at Radio Shack, which counts for a lot. (see my "Why can't you just buy components anymore page?" page for more thoughts on this subject).

This chip I had already programmed with the words "zero" through "nine" for an earlier version of a goniometer running on a Basic Stamp II. See my goniometer page for details on getting the sounds into the chip.

This version uses just six IO pins. I'm using a Scott Edwards BS1/LCD with a backpack LCD display, so pin 7 is tied up. Pin 4 is used to read a potentiometer and is also unavailable. While all seven address lines are needed to program the chip, since you need access down to .125 second increments, to access the chips memory at 1 second intervals you can get by with 4 pins. One pin for Power Down and one pin for Chip enable and you are in business.

The Schematic in ASCII format:

BASIC STAMP 1                       ISD1000A          Stamps +5 VDC Pin
                                                      |    |     |      |
                                                      |    >     |      | All 10
                         _________________________    |    <     <      | K OHM
    Stamps Ground Pin+--|pin 1            Pin 28  |---+    >     <      > Resistors
               Ground+--|Pin 2            Pin 27  |--------+     >Stamp <     
               Ground+--|Pin 3            Pin 26  |Not Connected |Pin   > Stamp
Stamp Pin 0+------------|Pin 4 ADR3       Pin 25  |--+Ground     | 5    | Pin
Stamp Pin 1+------------|Pin 5 ADR4    PD Pin 24  |--------------+----> | 6
Stamp Pin 2+------------|Pin 6 ADR5    CE Pin 23  |---------------------+-->
           Not Connected|Pin 7            Pin 22  |Not Connected
           Not Connected|Pin 8            Pin 21  |Not Connected
Stamp Pin 3+------------|Pin 9 ADR6       Pin 20  |Not Connected
               Ground+--|Pin 10           Pin 19  |Not Connected                      
           Not Connected|Pin 11           Pin 18  |Not Connected   |+ 5 VDC
               Ground+--|Pin 12           Pin 17  |Not Connected   |
               Ground+--|Pin 13           Pin 16  |----------------+
          Speaker Red+--|Pin 14           Pin 15  |--+ Speaker Black
                        |_________________________|                                              
                    
The voice chips memory is partitioned as follows:
ADDRESS SECONDS
0000 0000 0 seconds
0000 0001 .125 second
0000 1000 beginning of first second
0001 0000 beginning of second second on up through:
...
1011 0000 beginning of nineteenth second.
Since we're getting the words at the beginning of each second we can tie address lines A0,A1,A2 to ground. Also, I've found that the chip is very sensitive to the pins being tied high, left to float, or grounded. If you're having problems be sure every pin is as it should be.

Here's a BS1 code snippet for testing:

start:
dirs=%11111111
for b0=0 to 10
pin0 = bit0
pin1 = bit1
pin2 = bit2
pin3 = bit3
debug cls,pin0,pin1,pin2,pin3,cr
' 6 Power down Voice chip when high
' 5 Start playing when low
high 5
pause 25
low 5
pause 50
low 6
pause 600
high 6
debug pin0,pin1,pin2,pin3,cr
next
goto start
end
1. If you try "pins=b0" and the pins don't change state, you've forgotten the dirs command. It won't work without this.
2. Since Pins 5 and 6 control the voice chip, they can't be changed at the same time as 0 through 3. If you try doing a bytewise instead of bitwise operation, your chip will play randomly.
3. The chip just plain needs a PD cycle, I don't know why. Every PD does reset the memory pointer.
4. Pin 5 is the chip enable, and goes active low. That '600' may vary from chip to chip. If you hear your number twice, it's too long. On a BS2 this number worked better at 750.
5. Every reset, all the Pins on the stamp toggle. No way around it I'm aware of.

If everything is working correctly you should see on debug:
0000 and hear "zero"
0001 and hear "one" etc.

Good Luck.