Add reverb and other effects to a mike input, and have it ready on a speaker output
To make the experience fit your profile, pick a username and tell us what interests you.
This Shield brings sound in through a Maxim MAX4468 microphone pre-amp, sends it straight to a Spin Semiconductor FV-1, and then out through an ON Semiconductor NCS2211 speaker amplifier.
There are several applications one could use this Shield for in an Arduino project:
I'm sure others can come up with other ideas, including as just one element in a much larger and more complex project. (The wearable voice changer is my pet project, but I also plan to make this Shield as broadly applicable as I can.)
The FV-1's settings are controlled via a Maxim MAX11312 I2C controller. That same controller also operates an ON Semiconductor FSA2211 data switch, which serves as an electronic DPDT switch. The same signal that operates the switch changes the 24LC32 EEPROM chip from its normal connection to the FV-1, storing "external" programs as a Read-only chip, to a Write-capable chip connected directly to the I2C bus so those external programs can be loaded onto it. The switch connects the EEPROM to the FV-1 when in Read-Only mode, or to the main I2C bus when in Write-Capable mode.
There's also an option for adding a Bluetooth Low Energy (BLE) capability to a project, via Adafruit's BLE SPI Friend. The header for this connects the Friend's pins to the GPIO pins used in the breakout's provided sample code (as shown in the Wiring section of its tutorial; these are 4, 7, 8, 11, 12, and 13). If you don't want to use the Friend for any reason, just don't include it; those GPIO pins will then be left open, so other Shields can use them.
Besides the GPIO pins mentioned in the preceding paragraph, the only pins used by this Shield are those that can be easily shared with other Shields: Power (both 3.3V and 5V), Ground, ARef (analog reference), and the I2C pins.
One of the MAX11312's ports controls the MAX4468's Shutdown function; another is connected to the Friend's DFU (Device Firmware Update) pin; another controls whether the EEPROM is Read-Only or Write-Capable. All the MAX11312's other ports connect to the FV-1 (including one to read the CLIP function and another intercepting the mike input).
A Microchip MCP4652-503 dual 50kΩ digital rheostat -- with a separate I2C address -- controls the mike and speaker volume.
There are three ways that the audio signal can leave the board. The "normal" way is through a 3.5mm TRRS audio jack (the four leads carrying IN+, OUT-, OUT+, and IN- respectively). In case the user is building something with the mike and speaker in the same enclosure as the Shield, there's also a pair of two-lead right-angle headers to connect them.
Finally, should the user want to process a signal through more than one FV-1, a pair of connectors allow the user to send the output of one directly to the input of the next. While the MAX11312 is capable of up to eight I2C addresses, the selection on this board is limited to four; it's highly unlikely anyone will want more than two.
(For those who might want to connect the mike and speaker through separate mono audio jacks or bare-wire connectors, a separate version of this will feature those options in place of the TRRS jack and right-angle headers. That's why the board is labeled Sound Processing Shield 1; the other one will be Sound Processing Shield 2. That will be the only difference, so all sketches should work equally well with both.)
As a bonus, the board also has three Qwiic connectors... because, well, you can never have too many Qwiic connectors.
This Shield is designed to be usable with either an electret or piezoelectric microphone. By default, it's set up for an electret; to use it with a piezo (without it sounding tinny), just switch the "Mic Type" solder jumper on the underside from "E" to "P."
The 10kΩ Pull-Up resistors are connected by default. If you have other I2C boards with their own Pull-Up resistors, you may...
Read more »- 172.94 kB - 08/26/2020 at 14:37
After all that trouble, the (hopefully working) prototype for the board arrived yesterday. It looks great, though work on it will have to wait a bit what with various other things going on in my life. The one exception will, I think, be soldering on some stacking headers and getting it into a stack so it can be tested.
This will be fine for regular Arduino projects, I think, though for the wearable voice changer project that this is supposed to be the core for. I'll probably still work to perfect this, though I think I may also work on dividing the basic audio I/O and the FV-1 processing back into two separate functions, but on sewable boards (rather than the Feather Wings that I started all this with).
There were some issues with the prototype boards, so I had to try a couple more times over the last couple of weeks to correct them. That wouldn't be so bad, even with the time delays, but the extra-fine leads on this board cost an extra 50ドル-60 (over the normal 5ドル).
But the customer service rep and I are now pretty sure that it's working, at least as far as the physical board goes. I just hope the electronics work right this time.
I've finally gotten to where I could purchase the prototype for this board. A whole new estimate was needed; the total I spent was 262,ドル including 5ドル for an unrelated test board and a 12ドル bank processing fee. If I get any more, I may see about using a company other then PCBWay; they're wonderful (especially the customer service reps), but the price seems awfully high.
I'm figuring it'll be mid-June before the board arrives. I'd better start getting the other components ready for testing!
After quite a bit of work and component purchasing, I've finally managed to get a combination of screen and board to work together properly. This will be vital for not only the larger project I'm working on this for, but also for controlling and operating the Sound Processing Shield as I work up its sketch library.
The bad news is that I don't really expect to be able to buy my assembled test board until April, or until the COVID relief money comes (whichever is first, though at this rate I'm expecting the latter). So I probably won't be able to do any serious work on this until May... and I'm starting to feel kind of eager to get going!
As of today, I have 91 Followers for this Project. I just thought I'd mention that, since 91 is my favorite number (the explanation of that would be too long to go into here).
On another note, some of you Followers may have noticed a lack of progress here. For one thing, I've had to change apartments -- another long tale, and mostly irrelevant other than how it took up the money I might've spent on the prototype board. For another, the other components I got for my larger voice-changer project -- Arduino board, battery charger, and touchscreen -- are stubbornly not working, and I need them just to test the Sound Processing Shield.
At the end of this month, I'm going to get an alternative for the board, to address a couple of possible issues. That'll take a little while to implement, so it'll be late January at best, and more likely some time in February, before I can send off for the prototype (which of course will take a few weeks to arrive).
It turns out that the prototype board will be more expensive than I'd thought. For some reason the boards had to be upgraded in terms of minimum trace width (even though that hasn't changed since the test boards) to an extra 55ドル cost, and the components that I thought would cost about 30ドル are just over 100ドル. In short, the total that I'd expected to be around 70ドル is instead almost 200ドル.
I can't blame PCBWay, at least for the latter trouble; they're in China (just outside Hong Kong), and importing most of the components.
I'll still get this prototype, but it won't be until December, and if I have these produced in batches I'll probably go to another company.
Again, this is a somewhat earlier version of the board; most of the components have been shuffled around, and some have been deleted (and a couple added) since I sent this design. This is mostly to confirm that I got the placement of the Arduino headers correctly -- which, somehow, I did... though I plan to recheck and re-recheck it just to make extra sure.
Now, over the next couple of weeks, I'll be preparing the Gerber and Centroid files for an actual (hopefully) working prototype based on the current layout.
And, by the time that arrives, I hope to have other parts of my larger project working as well.
Besides the typical minor tweaks to the layout, I made a couple of significant adjustments to the board over the weekend. For one thing, I corrected the values of the pull-up resistors from 1M to 10k. I also moved the location of the Clip LED to a spot next to the TRRS plug, where both could be visible from the same end of the enclosure (if any).
Weaving the signal wire for the latter change has me thinking more and more that rotating the FV-1 90 degrees clockwise might be worth the effort after all.
With the opening up of space near the Arduino RX/TX pins, I'm also back to contemplating an I2S interface for this board; I'm just not sure yet how to do it.
It occurred to me just a little while ago that an end user might want to have synchronized lights or some other effect with the voice, so I've connected the mike input at the FV-1 to the one remaining port on the MAX11312. Maybe it should go to one of the speaker output ports; I'm not sure. I may change to that later, especially if someone speaks up.
Also, I removed the extra output connections besides the TRRS jack. Using just one or the other port is a more likely thing for the SPS2. Before I finalize this version of the project, I may bring the right-angle headers back, or put bare-wire terminals in their place.
This is in addition to the rerouting of leads to make wiring more efficient.
I'm also considering a row of connections to allow a user to put in jumpers, connecting the FV-1's input and output directly to the analog I/O -- but not yet.
This morning I ordered the PCBs that I'll be using to make sure all of the headers are aligned correctly. They won't have the components on them (what a waste that'd be if the headers are on wrong!), but they'll get here relatively quickly (2-3 weeks, from China, as opposed to half again that with the components) and enable me to take the next step forward: the prototype!
As presented, the Sound Processing Shield has no headers attached to it for connecting to other Arduino boards. You may use either male or through headers, depending on whether another Shield is going on top of it.
The procedure for doing this is the same as with any other Shield.
If you don't already know how to do it, the instructions for attaching headers to the BLE SPI Friend can be found on Adafruit's website (here).
However, unless the Sound Processing Shield is going on the top of the stack (and probably even if it is), do not use the headers provided with the breakout; instead, use short male headers, sold separately.
Once it's all done, plug the Friend into its slot on the Shield.
Eventually this step will include Python code for setting up and controlling this Shield, or at least instructions on modifying it for your own purposes (with the full code going into the Files section). Until that's ready (or close to it), this spot will be a placeholder for notes on that.
First, the I2C addresses will need to be declared. The defaults:
MAX11312 = 0111000 MCP4652 = 0101000 EEPROM = 1010000
The FV-1 can only address the EEPROM at 1010000, so that one is immutable. The other two can change, depending on how the jumpers are connected. (One can still have two to four of these Shields and program the EEPROMs separately, since their Write Protect functions are controlled through the MAX11312. Just be sure that no more than one of them is Write-Capable at a time!)
Then the MAX11312 will need instructions on how to handle its I/O ports. (For purposes of these "placeholder notes," I'm using the variable names from the chip's data sheet.)
DACCTL : 1 [DACs in immediate update mode] DACREF : 0 [DAC uses external reference] TMPCTL : 3 [int & 1st ext temperature monitors enabled] THSHDN : 0 [thermal shutdown function disabled] TMPINTMONCFG : 2 [16 samples to average for current temp] TMPINTHI : 320 [max temp for int temp is 100C] TMPINTLO : 0 [min temp for int temp is 0C] TMPEXT1HI : 228 [max temp for ext temp 1 is 67.5C] TMPEXT1LO : 20 [min temp for ext temp 1 is 2.5C] FUNCPRM_5 : 512 FUNCPRM_6 : 512 FUNCPRM_7 : 512 [all DACs set to -5 to +5V] FUNCPRM_11 : 512 [ADC set to -5 to +5V] FUNCID_0 : 3 [GPO] [Mike Preamp Shutdown] FUNCID_1 : 3 [GPO] [EEPROM Read/Write] FUNCID_2 : 3 [GPO] FUNCID_3 : 3 [GPO] FUNCID_4 : 3 [GPO] [These 3 are FV-1 Program Select] FUNCID_5 : 5 [DAC] FUNCID_6 : 5 [DAC] FUNCID_7 : 5 [DAC] [These 3 control the FV-1 Pot inputs] FUNCID_8 : 3 [GPO] [FV-1 Int/Ext program select] FUNCID_9 : 1 [GPI] [FV-1 "Clip" signal] FUNCID_10 : 3 [GPO] [BLE Friend DFU] FUNCID_11 : 7 [ADC] [Mike input]
The temperature monitors are normally used to reset the MAX11312 itself if it overheats. However, this can screw up the settings, so for this instance it will instead generate an interrupt sequence that shuts down the mike preamp and/or sends an alert to the user interface. The internal one monitors the MAX11312; the external one monitors the space next to the FV-1, where it's covered by the BLE SPI Friend (if that breakout is attached).
A function will be needed to translate program selection from a single digit (1-8 on the user's screen) into binary on pins 2, 3, and 4. A related (either inclusive or separate) function can select a larger number (1-16) into the same binary with an additional digit on pin 8.
I also hope to include something that will store and recall "presets," setting not only the program as above (pins 2, 3, 4, and 8) but also the levels of the pots (pins 5, 6, and 7) and the volume levels on the MCP4652.
Create an account to leave a comment. Already have an account? Log In.
to follow this project and never miss any updates
At this time there are still two ports available on the MAX11312, and space for a few more ICs if I want to add them, so if anyone has any suggestions for functions or capabilities to add to this Shield, by all means feel free to post them.