General Instruments SP0256-AL2 English Phoneme Speech chip & an Arduino
The GI SP0256 chip is an early 1980s bit of technology. It’s a 5V (to 7V) NMOS chip which is compatible enough with the 5V TTL circuity common in that era. 5V TTL disappeared for a while, then came back with the Atmel _28-based Arduino boards, many of which run at 5V.
The SP0256 chip contains a [crude] electronic model of the human voicebox, and the -AL2 variant comes with 59 English language phonemes built into it. In theory that ought to be sufficient, though in practice perhaps a few more (like an EEEEE sound like in “E.T. the extra-terrestrial”) seem to be needed. Anyway the manufacturer isn’t going to update this part .
Listen to what it sounds like:
Right-click and download if it doesn’t play in your browser.
When looking through a box of parts I came across this big chip I vaguely remembered buying as a teenager after reading an article in some 8-bit Atari centric home computing magazine. Maybe this was the article Cheep Talk – Build Your Own Speech Synthesizer in the April 1985 issue of Analog Computing, or this article Talking Typewriter in the January 1987 issue of Antic Magazine, or maybe a handout from Radio Shack. I think I built the circuit and played around with it because the chip’s sound was familiar. Anyway now, in 2014, the chip was there, alone, stuck into the far end of a breadboard for safekeeping.
There isn’t anything very complicated about using the SP0256. In fact the circuit is tolerant of a lot of Muntzing.
- The 3.14 MHz crystal was hard to find in 1985, and is impossible now. I found a 3.28 MHz crystal on Mouser and used that. The magazine articles from the 1980s state a common 3.59 MHz crystal works too.
- But really the crystal and occumpanying capacitors are unnecessary. The arduino can be programmed to generate a 16MHz / 6 = 2.66 MHz square wave from a timer, and that can be sent into the OSC1 (pin 27). It turns out 2.6 MHz is close enough for the SP0256. It doesn’t even sound slurred. The #define DRIVE_CLOCK_USING_ATMEL enables this feature in the source code.
- The better example circuits have a diode across the resistor in the 0.1uF C + 100KOhm R reset circuit. The diode is there to discharge the capacitor quickly if power drops before the capacitor has discharged through the resistor. This is needed for a reliable reset if power might blip on and then off. Do you need it in a home use test circuit? Nope!
- In fact the whole analog reset circuit is unnecessary. The two reset pins (~RESET and ~SBY_RESET) can be controled from an arduino GPIO. That has the advantage that you reset the SP0256 when the arduino sketch restarts. The #define DRIVE_RESET_USING_ATMEL enabled this feature in the source code.
- The input pins float reliably at a low logic level (which must be an NMOS characteristic, since TTL would float high) so you can omit grounding A7 and A8.
- The output low-pass 33KOhm-0.22uF RC filter is unnecessary if you use a speaker with a coil. The inductance of the coil is apparently sufficient. (With a piezo electric speaker, however, no amount of filtering helps, even the two stages of RC filtering one circuit diagram suggests. I used half of a cheap (& broken) Koss Ur/29 headphone
- As an advantage, if you don’t put the output through an RC circuit, it’s already a 5V peak-to-peak signal and opamp amplification stage is unnecessary.