The FV-1 Reverb IC from Spin Semiconductor was designed to add reverb effects to any audio system, from electric guitar amplifiers to karaoke machines to car audio. By applying it to a FeatherWing, these effects can be put into a very compact application, such as a voice changer, portable instrument mike, or pocket stereo.
While the chip's title only refers to reverb, and the board's name (EchoWing) follows that pattern, the chip is actually capable of a good deal more; its internal programs have features such as changing pitch up to 4 semitones, adding tremolo and/or flange, and filtering high and low frequencies. It can only handle three functions at a time, but it can do them.
(It actually would be more accurate to say that it can handle three variables at a time; more than one variable can affect any function, and the chip can have functions that only used fixed values. Thinking of those three variables as "functions" just makes things easier to visualize.)
While this is intended for use in conjunction with the SoundWing, I do expect that other users can find many other uses for it. (Makers are, by definition, a pretty creative bunch!)
Please note that corrections, suggestions, and any other constructive criticism is always welcome -- including offers of practical help!
The dozen I/O ports on the FV-1 are handled with a Maxim Semiconductor MAX11312. While that chip can be configured to any of 8 I2C ports (using its A0 and A1 pins), four of those involve hooking up the A0 pin to either SCL or SDA, which would be just a little difficult using solder jumpers. So, besides the default address of 0111000, the chip on this board can be changed to 0111100, 0111011, or 0111111 (A1 controls the fourth digit, and A0 controls the last two together; the solder jumpers are marked "4" and "3" respectively). This still allows up to four of these boards in one project, for an even dozen effects parameters; it's unlikely that anyone would need more than two, but at least the possibility exists.
The port assignments are:
- Port 0: Left-channel In
- Port 1: Right-channel In
- Port 2: Clip LED
- Port 3: Internal/External Program select
- Port 4: Program select LSB
- Port 5: Program select
- Port 6: Program select MSB
- Port 7: Pot 0
- Port 8: Pot 1
- Port 9: Pot 2
- Port 10: Left-channel out
- Port 11: Right-channel out
The "Pot" (potentiometer) pins control the three characteristics chosen by the current Program.
There are two programming matters for this board: programming the MAX11312 configuration, and putting any additional presets on the EEPROM. (For now, this section is mostly just a long-term placeholder to remind me that these need to be written out and posted, and a notepad for what I've figured out so far. Once I'm confident that the code all works like it's supposed to, I'll make it all downloadable in the Files section.)
This code is a work in progress; currently it's just notes showing the parameter name from the data sheet, the value assigned, and what that value represents.
ADCCTL : 3 [ADCs in continuous sweep mode] DACCTL : 1 [DACs in immediate upgrade mode] ADCCONV : 3 [ADC conversion rate is 400 ksps] DACREF : 0 [DAC uses external reference] TMPCTL : 0 [all temperature monitors disabled] FUNCPRM_0 : 800 FUNCPRM_1 : 800 FUNCPRM_7 : 800 FUNCPRM_8 : 800 FUNCPRM_9 : 800 [all DACs set to -5 to +5V] FUNCPRM_10 : 860 FUNCPRM_11 : 860 [both ADCs set to 0 to 2.5V, 8 samples] FUNCID_0 : 5 FUNCID_1 : 5 [DAC] FUNCID_2 : 1 [GPI] FUNCID_3 : 3 FUNCID_4 : 3 FUNCID_5 : 3 FUNCID_6 : 3 [GPO] FUNCID_7 : 5 FUNCID_8 : 5 FUNCID_9 : 5 [DAC] FUNCID_10 : 7 FUNCID_11 : 7 [ADC]
Of course the numbers in the first two blocks may be subject to change, based on the performance of the device once I'm able to test it.
I don't yet have anything worked out for the EEPROM (though see the final paragraph below).
Once I have a physical board (or even just a breadboard with the parts), I'd like to figure out Presets -- combinations of Programs and settings -- for some popular voice-changer settings (in no particular order):
- Mandalorian/Stormtrooper (Star Wars)
- Darth Vader (Star Wars)
- Dalek (Doctor Who) [Instructable w/Arduino; another guide]
- Cyberman (Doctor Who)
- The Monitor ("Arrowverse")
- Goa'uld (Stargate) [helpful tutorial video]
- Munchkin (The Wizard of Oz)/Chipmumk (as in Alvin and the...)
This is my main list because the main purpose I want to use this for is as part of a voice-changer. I may make a second list of Presets for making an electric guitar sound like those of various famous guitarists at their favorite settings; George Benson, Jimi Hendrix, and Brian May come right to mind for this. (These Presets will be in addition to the voice ones if I can fit them all in.) If anyone knows of a good guide or other resource for finding what those settings would be, please let me know in the Comments!
The Programs will be as broadly-purposed as I can make them, written in the chip's code; the Presets will set the Program and the Pot inputs to match (as closely as I can) the respective characters, using the main processor.
I'll probably come up with more possible Presets over time, and I'm open to suggestions. There's certainly room for more; I can have as many as will fit into the Programs, and many can probably share Programs (for example, the only substantial difference between Darth Vader and the other Star Wars modes would a pitch change; also, the Monitor and Munchkin can probably use Internal Programs).
There's a nice Program for Distortion on the Spin Semiconductor website; this may be usable for the Star Wars settings as easily as it works for electric guitar. Other than that one, anything meant for music, radio, or other conventional audio projects can probably be handled with the Internal Programs. (There may also be others at Spin's Program download page that this device could use.) I do know that, even if only for the Dalek Preset, I'll need to devise a ring modulation function.