Close
0%
0%

EchoWing Audio Reverb Board

Add reverb (and other) effects to a Feather-based audio project with the Spin Semiconductor FV-1

Public Chat
Similar projects worth following
This project simply takes the Spin Semiconductor FV-1 Reverb IC and connects its pins to the I2C bus on a Feather.

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!

Channel Info:

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.

Programming:

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).

Links:

Spin Semiconductor FV-1 data sheet

Maxim MAX11312 data sheet

Octopart BOM

Future plans:

Once I have a physical...

Read more »

FV-1 Feather.fzz

Fritzing file for the PCB.

- 53.25 kB - 12/30/2019 at 15:53

Download

  • 1 × Printed circuit board from the Fritzing file provided
  • 1 × Spin Semiconductor FV-1 The Reverb IC that serves as the centerpiece of the production
  • 1 × 15pF ceramic capacitor (TFT) C5
  • 1 × 100Ω resistor (SMD 0805)
  • 2 × Headers (one 12-pin, one 16-pin) Male, female, or through, depending on how you're mounting this thing

View all 13 components

  • Sound Processing Shield

    bobgreenwade08/18/2020 at 14:08 0 comments

    The replacement project for this is under way here.

  • Switching to a Shield

    bobgreenwade06/10/2020 at 15:09 0 comments

    I was advised recently that I2C is not a good way to pass audio around, and that I should use I2S instead.

    However, after much struggling and researching, I've been unable to figure out how to use I2S as a bidirectional multi-slave bus for audio. Maybe it can be done, and maybe it can't; I'm just not able to figure it out.

    I've thus decided to set this project aside and turn my attention to an Arduino Shield that combines this with the AudioWing. That will bypass the need for I2S, taking the processor out of the audio flow altogether and leaving it to control the effects and other functions.

    I'll supply a link in a separate log here once I've started that project here on Hackaday.

  • A few little improvements

    bobgreenwade03/03/2020 at 01:55 0 comments

    I've now replaced the TFT capacitors on the design with surface-mount equivalents, and tightened up the copper just a wee bit more. Electronically it's the same, of course, but it's a more efficient design.\

    (Keeping copper traces as short as possible both saves on copper, and minimizes the electrical resistance between components. The amount of either is tiny and the amount saved is minuscule, but these things do add up.)

  • Rearranged

    bobgreenwade01/17/2020 at 00:35 0 comments

    As planned, I've rearranged the connections between the MAX11312 and the FV-1, and I do think that this is an improvement. It did, of course, require some shuffling of pin connections, and I'm not sure that I ended up with fewer vias, but I'm pretty sure this at least uses less copper.

    (I've left the jpg of the board layout in the Gallery for comparison. The new one has the name vertically; the old one has it horizontally.)

    I'm still a bit uncertain about those pull-up resistors, though (as noted in my previous Log Entry). Whether to remove them, leave them be, or put in a switch or a couple of solder headers, I don't know. For now, I'll leave them.

    I think I'm done with major revisions, though, at least until I have a good, working SoundWing.

  • Now Do 2 Pull-Ups

    bobgreenwade01/12/2020 at 20:02 0 comments

    After finding that I'd neglected to include pull-up resistors on the SoundWing, I decided to check this board as well. Sure enough, no pull-ups were on board.

    While probably electronically sound, this layout is a horrible mess of leads and vias, and I think it can be better. I probably will rework the whole thing (including changing the order of I/O connections between the two big chips) before I send this off to anyone.

    EDIT: How much do you folks think this board will need pull-up resistors, anyway? This board is intended for use with a SoundWing (another project of mine), which will have them on board; I really can't think of any application that would happen without it. Some feedback on this question would be helpful.

  • Only one I2C chip needed after all!

    bobgreenwade01/03/2020 at 20:59 0 comments

    Contrary to my earlier assumption, I found a multi-mode I2C chip with 12 ports: the Maxim MAX11312. I've removed the two that I had been using, along with as many references to them as I could find in the Description, and have put in the MAX11312, with a start at the pin connections. I'd be surprised if I don't have to make some changes in that regard (connecting some floating pins, adding some components, changing a connection or two, etc.), but what I have here will do until I can really dive into the data sheet.

    I think the board will be much easier to handle with just one I2C address to worry about.

View all 6 project logs

Enjoy this project?

Share

Discussions

deʃhipu wrote 06/10/2020 at 15:12 point

It's nice to see another person using Fritzing. By the way, if you hold down the ctrl key while moving a trace, it will snap to angles in 45° increments, which makes it easier to keep it all clean.

  Are you sure? yes | no

bobgreenwade wrote 06/10/2020 at 20:25 point

Thanks for watching! ;) I didn't know that, though a 45° increment is often not what I want so much as minimum distance for traces (meaning a minimum of copper used as well as minimum electrical resistance on each trace). Still, those 45° increments can be handy when moving around header pins.

  Are you sure? yes | no

deʃhipu wrote 06/10/2020 at 22:29 point

I find that keeping traces organized with that trick (and using a grid with smaller setting than the ridiculous default) I can fit more traces together, and thus easier avoid vias, which are in my opinion worse than a few mm of extra copper. Also, keeping traces on one side mostly going one way, and on the other side at the right angle to that helps a bit with that.

  Are you sure? yes | no

bobgreenwade wrote 06/13/2020 at 01:09 point

The replacement project combining this and the AudioWing actually has plenty of parallel traces and super-short traces, resulting in fewer vias than I would've expected. (Laying things down intelligently from the get-go instead of going through a series of massive revisions probably helped too.) I may have to shuffle some parts around to further reduce the vias, but so far that aspect is looking pretty good.

The issue with the copper is, for me, about conserving the resource. Any one board will save no more than a sliver, but these things add up.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates