Would it be too expensive to try to assemble my own board by buying a SMD-to-DIP adapter, soldering the chip, getting all the passive components with exact values and putting all of that on one breadboard?

Since my project must be 3.3V for bigger battery capacity rather than 5V, would it be a good idea to use a mini-transformer thing to get 5V that goes to a level shifter that goes to the board that has its own 5V level shifter for nothing because the VS chip is 3.3V?

There seem to be three types of VS1053B boards available. On eBay there is the GeeeTech shield for Arduino UNO for about $10, and the Geeetech VS1053B breakout. AdaFruit sells a UNO shield.

I bought a GeeeTech shield board about a month ago, and have been studying it. My comments here refer to it.

There are two voltage regulators on the board: both are fed +5V from the UNO. One is 3.3V and the other is 2.5V. The 3.3v goes to digital VDD and IO-VDD on the VS1053 and the 2.5v goes to core-Vdd on the VS1053B. If you are using a 3.3V Arduino or AVR, then to convert the GeeeTech board, first remove the 3.3v regulator and then make a wire jumper from the Vin pad to the Vout pad.

This directs your AVR's 3.3 VDD to the VS1053B digital/IO_Vdd. The 3.3 Vdd from the AVR - might- be high enough to drive the 2.5 LowDropOut regulator that supplies the VS1053 with core-Vdd. If not then use the voltage that is creating the 3.3v Vdd for the AVR. I assume that this voltage starts out higher than +3.3, and gets regulated down to +3.3.

The GeeeTech shield seems to have all the filter and stabilization passives for the VS1053B. The VS1053B is directly connected to +5V logic pins from the Arduino on the seven connection pins between the Arduino UNO and the VS: VS_DCS, VS_CS, VS_DREQ, SCK, MOSI, MISO, and RESET. One other +5V pin is the chip-select CS for the SD card. Hasn't killed the VS yet.

The GeeeTech shield does not bring the VS1053B's RX and TX lines out from the VS pins. It does pull low (using 100K resistors) the GPIO_0 and GPIO_1 lines. The other GPIO lines are left floating.

I jumped a wire from GPIO_1 to Analog_0 pin on the Arduino. This allows me to come out of VS_RESET with GPIO_0 low and GPIO_1 high. This mode activates the on-board General MIDI synthesizer voices. I use VS1053b's SPI data interface to play MIDI notes. The VS1053b's SPI data interface expects a 16-bit word (two SPI transfers). For MIDI, the first byte is always 0x00. So to play middle-C, send 0x00:0x90, 0x00:0x3c, 0x00:0x60. Turn the note off with 0x00:0x90, 0x00:0x3c, 0x00:0x00.

I removed the headphone jack because the common pin for Left and Right is not 0.0 volts ground, but Vbuf that is +1.23v. This Vbuf should not be connected to 0.00 volts_ground. The VS1053B app note suggests using a 10uF electrolytic capacitor (between Left/Right out and the amplifier input) and 10K resistor to ground when the audio output common line is connected to an external ground (such as when the VS is plugged into a regular amplifier).

I haven't tried recording anything yet. The MP3 player works fine. The sine wave test works OK. And the MIDI synth works OK.

Paying more than $12 for one module is too much. This is an exception for the Arduino Mega that I found.

Let me guess if I got this right:

Unsolder the 3.3V regulator

Short Vin and Vout on where the 3.3V regulator was

Cut a jumper, solder the cut part to a resistor of GPIO_1, plug the other part to any Arduino pin

Unsolder the headphone jack (not the microphone)

Connect a 10uF electrolytic capacitor per Left and Right with the minuses soldered to the board's Left and Right

Connect the common to GND of Arduino

Is there a schematic to how this works? I'll need to make one PCB with all the peripherals and that will probably need to have all these passive components together. Will then I have to use these capacitors?

On eBay the VS1053B UNO shields with the red PCB and pink/blue pin headers are the cheapest available at about $9.60 USD. I call them geeetechs because their silkscreen says www.geeetech.com on them. I believe that they will plug directly into the Arduino Mega. If I'm not mistaken, shields for the UNO will plug into and work with the Ard Mega2650, but the shields don't plug into the bottom set of pins. Check the Mega2650 schematics and layout diagrams.

If you plug the geeetech into the Arduino Mega, then you can use the +5V of the Arduino Mega2650 to power the VS1053B board. The VS uses two voltages: +3.3 for digital and input/output, and +2.5V for "core" voltage. There are two regulators on the VS board to make these voltages and they are both sourced by the Arduino's +5 volts.

The VS1053B is a microprocessor with a Digital Signal Processor built into it. It has a internal firmware program that usually does compressed audio file decoding when powered on. However, there are several General Purpose Input Output pins [GPIOs] that make the VS1053B do other things instead when powered on.

When GPIO#0 and GPIO#1 are pulled to 0.0V [ground] when the IC is reset, the VS1053B's internal firmware program will play MP3 files. This is the default state of the various VS1053B boards being sold.

When GPIO#0 is ground and GPIO#1 is +3.3v at VS reset, then the VS1053 will start in MIDI synthesizer mode.

When GPIO#0 is +3.3 and GPIO#1 is 0.0v at reset, then the VS1053 will load a new program from an external serial EEPROM that is attached to its SPI pins (MOSI, MISO, SCK). These new programs can make the DSP core of the VS1053 do things like record Ogg files of compressed audio at CD quality, act as a strong graphic equalizer, or as a "stand-alone" MP3 player with no other CPU (like an AVR or Arduino) driving its SPI lines.

These programs are available at the VLSI.com website. These DSP routines can be loaded into the VS1053 and run after the VS has been powered up. These DSP routines are called 'plug-ins' and are in .PLG files. These PLG files should be found in the root directory of the SD card that is plugged into the VS board. The MP3 files are placed in the SD card root directory as well.

The Arduino demo program for the VS1053 loads a library called SD.h that sets up a file structure in SRAM that reads these files from the SD card. When the VS brings its DREQ line high, it signals to the Arduino that it is time to read 32 bytes from the SD card file and load this data into the VS chip using the SPI pins.

Most SPI devices use a single Chip-Select pin and a separate pin to indicate whether the SPI byte is a command or some data. The VS1053 uses two chip-select pins: one for commands and one for data. Each SPI data transfer is two bytes (16 bits). The SPI commands can be three to six bytes in size.

GPIO#2 and GPIO#3 control the "EarSpeaker". This is a phase-shifting trick that makes a mono signal sound a little like stereo. Different frequencies have different placements in the Left-Right space when using headphones. Having GPIO#2 and #3 at 3.3V sets this effect to maximum. There is also a reverb effect available for the MIDI synth voices. Both the reverb and the EarSpeaker can be on at the same time.

Because audio signals use plus and minus voltage that is centered at ground ( 0.0v) and there is no minus voltage, the VS audio output pulls the center pin up to +1.23V. This is fine when using headphones. But when the VS audio is plugged into an external audio amplifier, the ext amp expects the common center to be at 0.0v and not +1.23v. This voltage difference often causes a ground loop which makes a loud buzz. To get rid of it, put 10 uF capacitors in the audio output lines between the VS Left and Right Out and the ext amp inputs. After the 10uF cap, place a 10K ohm resister to ground 0.0v. Download the VS1053B audio-out application note from the www.VLSI.com website for more info.

The geeetech has two stereo jacks. One is a mono input with only one active channel. The other is the stereo headphone output. The input jack uses 0.0v as its common and the headphone uses Gbuf (+1.23v) as its common. I move the headphone output to the input jack so that the headphone common is 0.0v. I bend the tabs up so that they don't go into the holes that have the input traces. Then I solder the 10uF caps to the bent tabs of the jack.

My long-term project for the VS board is to combine it with a RDA5807 FM stereo tuner chip and a DS3231 Real-time clock module. This will become a low-cost TIVO for FM radio. My town has BBC broadcasts between 11pm and 5am, which I miss because I'm sleeping. This device will record each night's BBC broadcast into a series of half-hour OGG files that will be stored on the SD card. Then I can listen to the previous night's BBC broadcast during the next morning when I'm awake. Each night the previous OGG files will be overwritten. Six hours of OGG files using 22K Samples/sec|mono will only take up 400-600 megabytes of SD card memory.

Bump. I came back to these frustrating projects. I didn't get my question answered. How can I access the GPIO of the VS1053 chip if it's not present as a header pin? Do I need to unsolder some resistors? I need to have GPIO0 and GPIO1 to enter the MIDI synthesis mode.

Hello, I too am hoping to return to development of the VS1053 board soon. I have been "re-hab'ing" all my other projects to JAFW (" jes always f**ing work") status. I also need an desktop MP3 player and the VS1053 can read an 8Gig SD card full of MP3s. Selecting them is difficult.

As for accessing the GPIO_0 and GPIO_1 pins, on the Geetech VS1053 shield these two pins are brought out to surface-mount 06-sized resistors. Leave the resistors in place. One side of the resistor is connected to Vdd 3.3 and the other side of the resistor pulls up the GPIO pin. You can solder a small length of "wire-wrap" AWG30 between the surface-mount resistor pad and an unused Arduino port pin. Clear or set the pin for establishing the GPIO status and then do a pulse on the VS1053 reset line (which is connected to an Arduino data pin).

To access GPIO2 and GPIO3, I soldered a short piece of "AWG30 wire-wrap" wire to the actual pins on the IC. They were on a corner edge and they can be both brought high or low at the same time. Low turns off the "EAR SPEAKER" effect and high turns it on (after resetting the VS1053).

Many laptops have no audio stereo input high-resolution real-time compressed recording ability. They could run programs like Audacity to do it, but most laptops don't have audio line-in jacks. I want to plug a VS1053 board into the headphone jack of my laptop and record the audio into OGG files. These files would get stored on the SD card. I could then transfer them to a PC and convert them into MP3.

It would be better to get a real MIDI tone-module than a VS1053. You can get old professional-musician General-MIDI tone modules like those of the the 1990s Roland Sound Canvas family for about $30-60 on eBay. You can always resell them for what you paid for them on eBay. They would sound much better than the VS1053 and be much easier to work with.

I have a lot of questions that I need to know in order to know what to buy on eBay exactly.

Can you please edit a picture of the board and annotate on it in MSPaint which resistor pad I should solder what to where?

What is the board's link on eBay? I need to know which one to buy. There are two Geeetech VS1053 board types.

If I connected 8 PWM outputs of my XMEGA together and with the VS1053 output, would that cause polarity issues?

Would it cause a short circuit between a pin that's high and a pin that's low?

I'm thinking of playing samples, in-game voices and chiptune sound effects on the PWM channels while the VS1053 MIDI/MP3 music is playing in the background. Should I use some diodes to prevent the signal from going from one output pin into another output pin? Which ones exactly? What chip or operational amplifier should I use and how is it called and where to buy it, which would mix all of these signals together? How would I prevent the signal from being too loud and popping? I'd like either that in a DIP package or on a development board.

If I would like to smoothen the PWM waveform to look analog, what capacitors should I use?

In a VS1053 application note, it says that I should use protection when connecting external hardware. What kind of protection is that? Is that a Zener's Diode? I tried searching for the same name as in the schematics, but no results were given on Google. Is it maybe a chip for protection? I'd like it in DIP package or on a development board.

3. Yes
4. Yes
5. Use resistors to mix the signal. What value? Depends on many things. Get some 50k trimpots and adjust until you're happy.
6. Depends on the pwm frequency. I think there's something in the tutorial section. Otherwise Google.
7. You need to ensure you don't exceed the chip specs. Protection can take many forms. For example if you have headphone outputs, you might put a varistor to protect against ESD.

Actually, the GPIO pins are connected to ground on the picture. On which pad am I supposed to connect it? I suppose the one closer to the chip, right? And are those resistors already soldered or should I solder them?

Also, I changed my mind regarding the usage of PWM. I'm going to use the XMEGA's 2 DAC's for stereo SFX output. I need to know how to connect the VS1053's audio to mix with the XMEGA's DAC audio. I don't know the standard voltage range of an audio jack, but I read that it's more based on current than on voltage. This is now very confusing. Can someone explain how I should mix that signal?

The audio signals that come out of the VS1053 and any DAC are going to be a constantly varying voltage that is going negative and positive around a center point. On the DAC this center point is 1/2 Vcc or 1/2 of the DAC maximum output. On the VS1053 headphone jack, the center point is at +1.3 V. Usually on audio circuits the center point is 0.0 volts or ground. The center point is called the offset bias. A 0.1uF - 1.0uF capacitor will separate the audio signal from the offset bias.

Combine audio signals using op-amps. These are usually +/- 9 Volt devices, but some will run +5V and 0 volts. Your audio signal will be about 0.5 - 2.5V peak-to-peak. Google for simple op-amp audio mixer schematics.

Connect the control wire for the GPIO pin to the end of resistor that is connected to the GPIO pin. These are actual I/O pins configurable by software, but they also turn off/on functions when they are pulled high or low when the board is reset. If GPIO 2 and 3 are both pulled to 3.3v when reset, then the EAR-SPEAKER pseudo-stereo will be on which gives different frequencies different phase shifts so that a mono signal will sound almost-stereo. Connect, for example, A0 to GPIO 2 and 3. Set or clear A0 to turn off and on EAR when the board is reset. The resistors are already soldered. They are the little boxes marked 104. (10 and 4 zeros making 100,000 ohms).

The Geeetech VS1053 board shown above has filter circuitry for line input on line 1 (left) only. The IC shares line-in 2 (right) with the microphone +; so the microphone and stereo line input can't be used at the same time. And you have to add a 0.1uF cap and 470 ohm resistor to line 2 input if you want to use the VS1053 as a stereo high-quality (OGG format) recorder with the recording stored on the SD card.

I've got this geeetech board. It's great! I noticed the 1/8" line input (labelled "mic") seems to actually be connected to Line 2. This is evident by silence on a mono recording, sound on a stereo recording, and sound on a mono recording when I manually jump my sound source to the line1 cap. Basically, I think this 1/8" jack is wired to line 2.

Questions:

1) Can I modify the board to connect this to line 1? I only need a mono recording and would love to use this jack.

2) Is there any way to configure the vs1053 to swap line1 and line2 so that I dont need any hardware mods?

I thought I'd ask because it seems you have a very deep knowledge of this board.

I bought the item, it arrived and I've tested it. It works. Now, I cannot figure out how to play a MIDI file on it. The library it comes with doesn't play MIDI files, but there has to be some kind of a command to send to the chip to make it play. There's a command that sends a beep sound from a MIDI file that's built in the library itself. I tested this on a 5V Arduino Duemillanove because I didn't have the soldering equipment with me. I'm waiting for that soldering wire to come so I'm going to tell a friend who solders good to solder them where you told me to. I'll then test the module on my XMEGA.

Do you know how to make the chip play a MIDI file without having access to the GPIO pins?

Test it on an Arduino UNO that is proven fully-debugged hardware using known-good libraries that have been tested by hundreds of other users. The UNO already fits the module board.

Then get it to work... by going over every line in the .INO file and then going over every line in the library files, and then going over every line in the 35 page data-sheet, and all the company application notes for this IC, and rewriting the demos with single changes and keeping notes about what the config is, what is happening, and what doesn't.

I've found that the Adafruit example demo for MP3 plays entire songs correctly, but doesn't respond correctly to commands while a song is being played.

Don't forget that you can get a good well-made multi-functional MP3 player on eBay for about $20. So don't spent $15 on a MP3 Arduino module and two weeks puzzling over how to get it functioning if you just need 1 or 100 well-working MP3 players.

I haven't looked at this board for eight months. I recall that the line-in circuitry only went to one channel. I removed the stereo headphone jack and wired the left/right outputs to capacitors so that I could feed the headphone output into the left/right line ins of a stereo without the DC offset on the VS1053 lines. There is no way to reconfigure the in/outs on the VS1052 using software.

I didn't test the module on the XMEGA. I tested it on a little Arduino that looks like this:

The only problem about it is that the breakout board doesn't really fit in there so I had to use jumpers. By accident, I made a short circuit on some power pins, but nothing burned because the PC stopped the high current. However, I would hear some little noise coming from the VS1053. I don't know if it's static electricity or is it because of the microphone contact on my headphones. Just so you know, I could only test on my headphones because if I put it into my PC's speakers, I'd create a ground loop and that's not good. I didn't do it, though. I thought my long awaited stuff would explode. I didn't want to yet start soldering stuff on the board to ruin it so I wanted to enjoy playing some music and arrangements I've made.

Also, I'm going to use this MP3 chip to play MIDI mixed with PWM and DAC from the XMEGA. I'm thinking about what kind of passive components I would need. What kind of a XMEGA friendly amplifier would I need? I didn't learn well about analog electronics and I had a D in school from that. I'm not sure if it's possible to generate more than 3.3V or too much current by mixing multiple signals when they're all in sync and resonating together. I had a little two-into-one downmixing RCA cables and I used those to downmix my PlayStation let's play recordings with a DVD player's background music that I've made. When they'd be both loud, they'd both become a little quiet like if there was some kind of compressor there. Does this happen naturally in the circuit? Could someone please show me if this is able to be done with only transistors, capacitors and resistors? I'm not sure what kind of chips to use. I heard that if the chip is TTL and another one is CMOS, they might have problems. My mentor says that the voltage levels for high and low state don't overlap and the stuff might burst into a firework. I'm not sure why that is, but I'd like to have the safest and simplest solution that's visible and more DIY than a chip. I'll only use a chip if there's like 10 transistors needed per PWM. I don't want to have a mess of my circuit.

Update: My friend soldered jumpers to the resistors you told me and I ran this code https://gist.github.com/microthe... and it works! I edited the code a bit to play augmented and diminished chords. I'm going to study the code and try to make it work on XMEGA. When I do that, I'll unsolder the regulator and hope it works.