PDA

View Full Version : Teensy 3.0 + Ada FRuit VS1053 Audio Breakout Board Problems



brandonlynne
07-24-2013, 09:34 PM
Hi. I'm trying to use the ada fruit VS1053B breakout board (http://www.adafruit.com/products/1381).

It's pretty cool, as it has the VS1053 and a micro sd breakout on the same card. It works great with my Arduino Uno r3 and Teensy 2.0 boards, but I've been transiutionaing to the Teensy 3.0 board fro a project, and the code no longer compiles (presumably b/c the processor is different on the Teensy 3.0). Here's a link to the github code/examples: https://github.com/adafruit/Adafruit_VS1053_Library

I'm not sure if there is something "simple" that can be done to adapt the Adafruit code to work on the Teensy3 board (it's above my head at this point). Does anyone have an idea? (Bonus Question: does anyone know if I can turn on line numbers in the arduino IDE?)

Here's the specific error list from the arduino IDE:
/Users/brandon/Documents/Arduino/libraries/Adafruit_VS1053_Library/Adafruit_VS1053.cpp:20:7: error: expected constructor, destructor, or type conversion before '(' token
/Users/brandon/Documents/Arduino/libraries/Adafruit_VS1053_Library/Adafruit_VS1053.cpp: In member function 'boolean Adafruit_VS1053_FilePlayer::useInterrupt(uint8_t)' :
/Users/brandon/Documents/Arduino/libraries/Adafruit_VS1053_Library/Adafruit_VS1053.cpp:54:5: error: 'OCR0A' was not declared in this scope
/Users/brandon/Documents/Arduino/libraries/Adafruit_VS1053_Library/Adafruit_VS1053.cpp:55:5: error: 'TIMSK0' was not declared in this scope
/Users/brandon/Documents/Arduino/libraries/Adafruit_VS1053_Library/Adafruit_VS1053.cpp:55:15: error: 'OCIE0A' was not declared in this scope

PaulStoffregen
07-24-2013, 10:27 PM
I took a quick look and added code for Teensy.

Please give this copy a try, and let me know if it works? (I don't have the actual VS1053 board here for testing)

https://github.com/PaulStoffregen/Adafruit_VS1053_Library

brandonlynne
07-30-2013, 10:44 PM
This compiles without error! I'll let you know how if there are any issues once I breadboard the VS1053 breakout to the Teensy3.0. Thanks so much for building in support for the amazing Teensy 3.0 and this library!

PaulStoffregen
08-05-2013, 09:48 PM
Any word, does it work on Teensy 3.0?

brandonlynne
08-12-2013, 03:38 PM
Paul, it worked great. The Teensy3.0 now compiles and works with the Adafruit VS1053B breakout. Nice work! This should give Teensy3.0 users access to sound (mp3, wav, ogg, etc) and an SD card reader in one board. On a side note, the SPI SCLK pin on the teensy also has the LED on it (pin 13). At first I couldn't figure out why the LED was blinking so erratically, and then I realized I was seeing the SCLK signal on the LED. Is there any way to disable the LED on the teensy? Not a deal breaker, just curious. Thanks again for your help Paul!

PaulStoffregen
08-12-2013, 06:58 PM
Thanks for the followup. :)

I've submitted a pull request to Adafruit, so hopefully these edits will become part of the official version.

PaulStoffregen
08-23-2013, 09:12 PM
Can you confirm if the modified code still works on Arduino Uno or other normal Arduino boards?

Adafruit is asking for a verification before they accept the change into the official version of this library. I don't actually have one of these VS1053 boards for testing.

PaulStoffregen
08-23-2013, 09:15 PM
Here is the pull request and conversation from LadyAda.

https://github.com/adafruit/Adafruit_VS1053_Library/pull/2

Feel free to comment there on github, or here. Would be nice if this could get merged into the official library, so others won't have to run into these problems.

virtualdave
11-28-2013, 01:12 AM
Sorry to revive an old thread, but quick question:

what pin did you/should I use as the data request/interrupt pin? (t3)

Thanks,
David

virtualdave
11-28-2013, 08:55 AM
Never mind the interrupt pin question...I see that the t3 can use any pin as the interrupt pin (yeah t3!). I chose pin 7...just because it felt right.

I'm having troubles, however. If I use the method for playing sounds from beginning to end with no interrupt (playFullFile) everything seems to behave OK. If I use the interrupt method (startPlayingFile) (which would allow the t3 to do other things at the same time), playback is very questionable. If I set up a simple loop with a 1s delay, the playback often craps out after about 10 or so loops (and the LED on the t3, which shares the SPI clock pin, becomes pretty sporadic, then finally stops blinking). In the sketch below I have a method where key presses will trigger sound files. With the startplayingfile method I can interrupt the playback of one sound file with another...but this often lasts for only a few tries before playback stops/freezes.

@Brandon: did you ever have much luck with the startPlayingFile method? Just curious before I start pestering the adafruit folks.

I also don't have much luck with playing back 44/16 wav files. It'll play the file once, with a bit of distortion, then all playback stops.

And if I could find a method that would stop playback that worked (setting playingMusic to false doesn't seem to work as suggested on the adafruit board)...well that would be lovely.

And setting the volume doesn't seem to work at all.

Paul, when is that fancy audio board of yours going to be finished?!?! ;)

Attached is my code for testing/observing the above in case that helps. btw: which SD library should I be using? I don't recall installing anything special for the T3.

Thanks in advance for any advice!
David


#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>

// define the pins used
//#define CLK 13 // SPI Clock, shared with SD card
//#define MISO 12 // Input data, from VS1053/SD card
//#define MOSI 11 // Output data, to VS1053/SD card
// Connect CLK, MISO and MOSI to hardware SPI pins.

// These can be any pins:
#define RESET 9 // VS1053 reset pin (output)
#define CS 10 // VS1053 chip select pin (output)
#define DCS 8 // VS1053 Data/command select pin (output)
#define CARDCS 4 // Card chip select pin
// DREQ should be an Int pin, see http://arduino.cc/en/Reference/attachInterrupt
#define DREQ 7 // VS1053 Data request, ideally an Interrupt pin


Adafruit_VS1053_FilePlayer musicPlayer = Adafruit_VS1053_FilePlayer(RESET, CS, DCS, DREQ, CARDCS);

byte serialIn;
byte playbacknumber;

void setup() {
Serial.begin(9600);

musicPlayer.begin(); // initialise the music player
SD.begin(CARDCS); // initialise the SD card

musicPlayer.setVolume(0,0);

musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT ); // DREQ int
}

void loop() {

while (Serial.available() > 0) { // mail call
serialIn = Serial.read();
if (serialIn == '1') {
playbacknumber = 1;
}
if (serialIn == '2') {
playbacknumber = 2;
}
if (serialIn == '3') {
playbacknumber = 3;
}
} // end while

// options below allow input via serial (1, 2, 3)
if (playbacknumber == 1) {
//musicPlayer.startPlayingFile("track001.mp3");
musicPlayer.playFullFile("track001.mp3");
playbacknumber = 0;
}
if (playbacknumber == 2) {
//musicPlayer.startPlayingFile("track002.mp3");
musicPlayer.playFullFile("track002.mp3");
playbacknumber = 0;
}
if (playbacknumber == 3) {
// can't get this to work...in theory should only work when "startplayingfile" has been called
musicPlayer.playingMusic = false;
playbacknumber = 0;
}

// uncomment below to loop playback of a sound file

//musicPlayer.playFullFile("track001.mp3");
//delay(1000);


}

virtualdave
12-01-2013, 06:49 PM
OK, I'm not sure the adafruit library is fully cooked. Playing a sound file seems pretty hit or miss (especially after a power cycle), and volume control even doubly so. Playing wav files is all miss. Is the standard SD library adequate for the T3? That's the main thing I'm thinking could be an issue (having never worked with SD cards on a T3 or any other micro for that matter).

Thanks,
David

Zed
06-18-2014, 12:53 AM
I took a quick look and added code for Teensy.

Please give this copy a try, and let me know if it works? (I don't have the actual VS1053 board here for testing)

https://github.com/PaulStoffregen/Adafruit_VS1053_Library

Hi Paul - first and foremost thanks for everything so far - your teensy board is my favorite toy.
now - I've been trying to operate the vs1053B as an ogg recorder with the teensy 3.1 (aruino ide 1.0.5 and teensiduino 1.19) and this very library.
and I've noticed I'm missing bits on the reading from the chip.
if I read the raw data in an OGG file that I recorded using an arduino mega (using notepad++) the file starts with OggS, but with the teensy is starts with '33)...
OggS
0x4f 0x67 0x67 0x53
01001111011001110110011101010011

'33)
0x27 0x33 0x33 0x29
00100111001100110011001100101001

or if we put them next to each other:
01001111011001110110011101010011
00100111001100110011001100101001

it looks as if I shifted the words one bit too much (and lost an LSB 1 too)...
I've dug deep into the library itself and I'm still not sure how you defined the interrupts or the timers for __arm__ processors

I'm fairly sure it's just a matter of a simple timer change that ruins recording.

p.s. also trying to compile to lower speeds 16/8/4/2 give: Sd2Card.cpp:77:2: error: #error "MK20DX128 bus frequency must be 48 or 24 MHz"
is it a 1.0.5 problem?

thanks a bunch.

Zed
06-18-2014, 02:52 PM
Well - I'll answer my own post. seems the problem was in the SPI.
I used the record example so I knew it worked (plus tested on UNO and mega properly).
the SD was easily verifiable with various tests (though no SdFat), seems the SPI needed: SPI.setClockDivider(SPI_CLOCK_DIVx); (and many thanks to t3andy - http://forum.pjrc.com/threads/1156-Teensy-3-SPI-Basic-Clock-Questions?p=2344&viewfull=1#post2344).
it took a while to figure out the only real difference between the Arduino and teensy for this board was the clock rate. so that set me up on the path for SPI discovery. it still seems to freeze every now and then for no good reason but for now it at least records some ogg.

galeviel
10-26-2014, 04:37 PM
Well - I'll answer my own post. seems the problem was in the SPI.
I used the record example so I knew it worked (plus tested on UNO and mega properly).
the SD was easily verifiable with various tests (though no SdFat), seems the SPI needed: SPI.setClockDivider(SPI_CLOCK_DIVx); (and many thanks to t3andy - http://forum.pjrc.com/threads/1156-Teensy-3-SPI-Basic-Clock-Questions?p=2344&viewfull=1#post2344).
it took a while to figure out the only real difference between the Arduino and teensy for this board was the clock rate. so that set me up on the path for SPI discovery. it still seems to freeze every now and then for no good reason but for now it at least records some ogg.
[/I]

Hi! I tried every combintation of x in SPI.setClockDivider(SPI_CLOCK_DIVx); using the most recent version of the VS1053 library from Adafruit. but I still can't get any MP3-Played using this breakout board and a Teensy 3.1. Anybody an idea how to fix this?
Thanks!

Zed
10-26-2014, 04:50 PM
[/I]

Hi! I tried every combintation of x in SPI.setClockDivider(SPI_CLOCK_DIVx); using the most recent version of the VS1053 library from Adafruit. but I still can't get any MP3-Played using this breakout board and a Teensy 3.1. Anybody an idea how to fix this?
Thanks!

could you please post your code?
how did you set up the SPI control legs? because the example in adafruit is for uno and the teensy has other SPI legs:
#define RESET 17 // VS1053 reset pin (output)
#define CS 10 // VS1053 chip select pin (output)
#define DCS 16 // VS1053 Data/command select pin (output)
#define CARDCS A0 // Card chip select pin
#define DREQ A1 // VS1053 Data request, ideally an Interrupt pin

let me know how that turned out for you.

galeviel
11-15-2014, 12:14 PM
could you please post your code?
how did you set up the SPI control legs? because the example in adafruit is for uno and the teensy has other SPI legs:
#define RESET 17 // VS1053 reset pin (output)
#define CS 10 // VS1053 chip select pin (output)
#define DCS 16 // VS1053 Data/command select pin (output)
#define CARDCS A0 // Card chip select pin
#define DREQ A1 // VS1053 Data request, ideally an Interrupt pin

let me know how that turned out for you.

HI,

Thank you for your fast reply!

I measured the SPI-Clock @ 8 MHz on the teensy 3.1, which might be to high since the max SPI-Clock of the VS1053 is listed @ 5 MHz. Nevertheless, even changing the SPI_CLOCK_DIV in the adafruit lib didn't change much.

To answer your questions:

Pin-Setup on Teensy 3.1:

VS1053-AdafruitBreakout ==> Teensy 3.1

CLK ==> 13

MISO ==> 12

MOSI ==> 11

DREQ ==> 5

CS ==> 20

Reset ==>23

DCS(XDCS) ==> 22

CARDSCS(SDCS) ==> 21

Sourcecode:
I didn't modify much in the end starting from the Adafruit exemple code...


/************************************************** *
This is an example for the Adafruit VS1053 Codec Breakout

Designed specifically to work with the Adafruit VS1053 Codec Breakout
----> https://www.adafruit.com/products/1381

Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!

Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
************************************************** **/

// include SPI, MP3 and SD libraries
#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>

#define CORE_TEENSY 1
//SPI.setClockDivider(SPI_CLOCK_DIV2);

#define CLK 13 // SPI Clock, shared with SD card
#define MISO 12 // Input data, from VS1053/SD card
#define MOSI 11 // Output data, to VS1053/SD card
#define RESET 23 // VS1053 reset pin (output)
#define CS 20 // VS1053 chip select pin (output)
#define DCS 22 // VS1053 Data/command select pin (output)
#define DREQ 5 // VS1053 Data request pin (into Arduino)
#define CARDCS 21 // Card chip select pin
Adafruit_VS1053_FilePlayer musicPlayer = Adafruit_VS1053_FilePlayer(RESET, CS, DCS, DREQ, CARDCS);

void setup() {
Serial.begin(9600);
// pinMode(RESET, OUTPUT);
// digitalWrite(RESET, HIGH);
Serial.println("Adafruit VS1053 Simple Test");

if (! musicPlayer.begin()) { // initialise the music player
Serial.println(F("Couldn't find VS1053, do you have the right pins defined?"));
while (1);
}
Serial.println(F("VS1053 found"));

SD.begin(CARDCS); // initialise the SD card

// Set volume for left, right channels. lower numbers == louder volume!
musicPlayer.setVolume(20,20);

// Timer interrupts are not suggested, better to use DREQ interrupt!
//musicPlayer.useInterrupt(VS1053_FILEPLAYER_TIMER0_ INT); // timer int

// If DREQ is on an interrupt pin (on uno, #2 or #3) we can do background
// audio playing
musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT ); // DREQ int

// Play one file, don't return until complete
Serial.println(F("Playing track 001"));
musicPlayer.playFullFile("track001.mp3");
// Play another file in the background, REQUIRES interrupts!
Serial.println(F("Playing track 002"));
musicPlayer.startPlayingFile("track002.mp3");
}

void loop() {
// File is playing in the background
if (musicPlayer.stopped()) {
Serial.println("Done playing music");
while (1);
}
if (Serial.available()) {
char c = Serial.read();

// if we get an 's' on the serial console, stop!
if (c == 's') {
musicPlayer.stopPlaying();
}

// if we get an 'p' on the serial console, pause/unpause!
if (c == 'p') {
if (! musicPlayer.paused()) {
Serial.println("Paused");
musicPlayer.pausePlaying(true);
} else {
Serial.println("Resumed");
musicPlayer.pausePlaying(false);
}
}
}

delay(100);
}



Thank you a lot for your time!

Zed
11-16-2014, 12:00 PM
HI,

Thank you for your fast reply!

I measured the SPI-Clock @ 8 MHz on the teensy 3.1, which might be to high since the max SPI-Clock of the VS1053 is listed @ 5 MHz. Nevertheless, even changing the SPI_CLOCK_DIV in the adafruit lib didn't change much.


since it's a code from adafruit it's probably very well tested. you changed little in it but leg numbers I trust.
so here is what I'd try next:

SPI.setClockDivider(SPI_CLOCK_DIV4 );
at the end if the setup.

and check for full path to the mp3 file.

Nantonos
11-16-2014, 08:26 PM
I measured the SPI-Clock @ 8 MHz on the teensy 3.1, which might be to high since the max SPI-Clock of the VS1053 is listed @ 5 MHz. Nevertheless, even changing the SPI_CLOCK_DIV in the adafruit lib didn't change much.

You don't need to mess about with clock dividers (which can be complex, when implementations try to second-guess what that might mean to get some sort of AVR-compatibility). Instead, if you want a 5MHz clock (or 4Mhz or whatever you decide to use) just set that explicitly with SPISettings.

See
http://www.pjrc.com/teensy/td_libs_SPI.html

shashankteotia
11-18-2014, 11:23 AM
[/I]

Hi! I tried every combintation of x in SPI.setClockDivider(SPI_CLOCK_DIVx); using the most recent version of the VS1053 library from Adafruit. but I still can't get any MP3-Played using this breakout board and a Teensy 3.1. Anybody an idea how to fix this?
Thanks!

I have a temporary solution of under clocking the Teensy to 24 MHz. (http://www.shashankteotia.in/vs1053b-teensy-3-1)

PaulStoffregen
12-12-2014, 12:47 PM
If anyone is still watching this old thread, I worked on this library, fixing several long-standing bugs. Really, it's pretty remarkable this library has ever even worked on AVR.

Please give this copy a try and let me know how it works for you?

https://github.com/PaulStoffregen/Adafruit_VS1053_Library

fretless_kb
12-13-2014, 01:24 AM
Thanks Paul,

I have a couple of these from last Christmas, will have to pull them out and give this a go again. Cheers

Teenfor3
02-02-2015, 01:59 PM
Reviving this old thread..........
I am trying out the Adafruit VS1053 Breakout with the Teensy 3.1
I am using the library for the post above and the Player_simple example
I have problems understanding which pins of breakout to connect to the Teensy...???
First I un-commented the lines
#define CLK 13 and connected SCLK to Teensy pin 13..the LED one
#define MISO 12 and connected MISO to Teensy pin 12
#define MOSI 11 and connected MOSI to Teensy pin 11
Then connected.....
RST to teensy pin 9
CS to teensy pin 10
SDCS to teensy pin 8
SDCD to teensy pin 4
DREQ to teensy pin 3
VCC to teensy 5 v pin
GND to teensy GND
Using Rout and Lout and AGND for audio output

Sketch compiles without error
Uploads to teensy OK and appears to run with the following Serial Monitor output

Adafruit VS1053 Simple Test
VS1053 found
Playing track 001
Playing track 002
Done playing music

But no sound ......I do get a click in headphones or speakers

My confusion is the proper use of the pins of VS1053 breakout

CS, SDCD, XDCS, SDCS, DREQ, RST ..........

would be grateful for any help please................

Teenfor3
02-02-2015, 04:32 PM
Finally worked out a combination of connections that works...........

VS1053 Breakout >>>>> Teensy 3.1 pin

MOSI >>>>>>>> Pin11
MISO >>>>>>>> Pin12
SCLK >>>>>>>> Pin13
DREQ >>>>>>>> Pin3
XDCS >>>>>>>> Pin8
SDCS >>>>>>>> Pin4
CS >>>>>>>>> Pin10
RST >>>>>>>>> Pin9

Have only played MP3 and WAV files

Both play OK.

But if critical about tail ends of files and how file starts to play, delays gaps etc.......Then....
MP3 files long fade out tail end of file that is playing and a short fade in of next file to play.....??? Results in gaps of about 15 milliseconds ++.
WAV files....the tail end of the file playing gets distorted for approx the last 1 - 2 milliseconds. Start of next to play is OK.
This was just tested on successive startPlayingFile playing in a loop. And the WAV file did not always start to play, some starts missed.

Teensy3.1 and Audio Adaptor board would seem to be faster and cleaner at playing fast transition between sound files than the Adafruit VS1052 Breakout...???

Teenfor3
02-03-2015, 12:42 PM
Paul wrote...........

Please give this copy a try and let me know how it works for you?

https://github.com/PaulStoffregen/Ad...VS1053_Library


Paul, You were wanting some feedback on this so I gave it a go using Teensy3.1 and got it working as per my last 2 posts....with a bit of "pin fiddling"

But as described I am getting a similar problem as I was getting a few weeks ago when trying out the teensy with the Audio adaptor in that there was distortion as a file stopped playing and another one started. You sorted that with your fix to the Teensy audio library PlaySDwav etc last week.

I am wondering is this the same type of problem although now using the Adafruit/Arduino library for the VS1053 BOB.

If so do you think this is a library software problem or a problem in the chip internal routines.??

I assume the Teensy Audio Library reads the file from the SD over SPI and sends it over I2S to the Audio Adaptor Board and then to output.

With the VS1053 BOB I assume the Teensy reads the file from the SD over SPI and sends it to the VS1052 chip by sharing the SPI bus. Is that controlled by DREQ.?

If I were to use the Teensy Audio Library etc instead, might that sort the distortion problem, but are there any routines already in teensy libraries for sharing the SPI etc that would work with the VS1053. OR how do I go about it.?

The advantage of using this BOB is that it can decode "if it works properly" several types of audio MP3, WAV etc and has MIDI sounds on board and also stereo analog out. I think the I2S is only for output to another I2S device.? I would just like to get it working without the distortion on the SD files.

I tried the MIDI and it worked....I let it boot into MIDI mode and with a sketch sending some MIDI commands was able to play various sounds on demand etc.

Thanks for your help and I look forward to getting this sorted..............

Teenfor3
02-07-2015, 11:34 PM
I have got this Adafruit board playing with Teensy3.1. It plays OK but I have found somethig perculiar when trying to play in a loop and wait for playingMusic to stop and then go round the loop again. The while statement does not seem to see the change to false when playing comes to end of file except I have something in the While eg a delay of something. And it is the same for using if statement....simplified example of loop code below. Each behave the same. Using the first while it just plays the file to the end once and waits indefinately. The second and third do same if no delay in loop. With the delay it works OK and repeats the loop. This is still using the play_simple example from the VS1053 library.


void loop() {

musicPlayer.startPlayingFile("KHz1.wav");

//xxx 1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

while (musicPlayer.playingMusic);

//xxxx 2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

/*

while (musicPlayer.playingMusic)
{
delay(1);
}

*/

//xxxx 3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

/*

doagain:
if (musicPlayer.playingMusic)
{
delay(1);
goto doagain;
}

*/

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


}

kshitijdadhekar
10-26-2016, 04:34 PM
Hey Paul, I tried this with Teensy-LC. Doesnt seem to work. The Teensy cannot detect the VS1053 Codec. Any solution?

PaulStoffregen
10-26-2016, 04:50 PM
Want to help, but need more info.

Please show how you connected the hardware (a photo is best) and the complete code you're running on Teensy LC. These details matter!

kshitijdadhekar
10-26-2016, 05:39 PM
Hello Paul, Thanks a ton for Replying. I also read about the earlier issues where we needed to underclock the MCU at 24Mhz. Tried doing that as well. But that didnt work too.

Here are the connections

VS1053 >> Teensy LC

3v3/VCC >> 3V/5V
GND >> GND

CLK -> D13
MISO -> D12
MOSI -> D11
CS -> D10
RST -> D9
XDCS-> D8
SDCS -> D4
DREQ -> D3

8628
8629

and here is the simple player code




// include SPI, MP3 and SD libraries
#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>

// define the pins used
//#define CLK 13 // SPI Clock, shared with SD card
//#define MISO 12 // Input data, from VS1053/SD card
//#define MOSI 11 // Output data, to VS1053/SD card
// Connect CLK, MISO and MOSI to hardware SPI pins.
// See http://arduino.cc/en/Reference/SPI "Connections"

// These are the pins used for the breakout example
#define BREAKOUT_RESET 9 // VS1053 reset pin (output)
#define BREAKOUT_CS 10 // VS1053 chip select pin (output)
#define BREAKOUT_DCS 8 // VS1053 Data/command select pin (output)
// These are the pins used for the music maker shield
#define SHIELD_CS 7 // VS1053 chip select pin (output)
#define SHIELD_DCS 6 // VS1053 Data/command select pin (output)

// These are common pins between breakout and shield
#define CARDCS 4 // Card chip select pin
// DREQ should be an Int pin, see http://arduino.cc/en/Reference/attachInterrupt
#define DREQ 3 // VS1053 Data request, ideally an Interrupt pin

Adafruit_VS1053_FilePlayer musicPlayer =
// create breakout-example object!
Adafruit_VS1053_FilePlayer(BREAKOUT_RESET, BREAKOUT_CS, BREAKOUT_DCS, DREQ, CARDCS);
// create shield-example object!
//Adafruit_VS1053_FilePlayer(SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);

void setup() {
delay(3000);
Serial.begin(9600);
delay(3000);
Serial.println("Adafruit VS1053 Simple Test");

if (! musicPlayer.begin()) { // initialise the music player
Serial.println(F("Couldn't find VS1053, do you have the right pins defined?"));
while (1);
}
Serial.println(F("VS1053 found"));

SD.begin(CARDCS); // initialise the SD card

// Set volume for left, right channels. lower numbers == louder volume!
musicPlayer.setVolume(20,20);

// Timer interrupts are not suggested, better to use DREQ interrupt!
//musicPlayer.useInterrupt(VS1053_FILEPLAYER_TIMER0_ INT); // timer int

// If DREQ is on an interrupt pin (on uno, #2 or #3) we can do background
// audio playing
musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT ); // DREQ int

// Play one file, don't return until complete
Serial.println(F("Playing track 001"));
musicPlayer.playFullFile("track1.mp3");
// Play another file in the background, REQUIRES interrupts!
Serial.println(F("Playing track 002"));
musicPlayer.startPlayingFile("track2.mp3");
}

void loop() {
// File is playing in the background
if (musicPlayer.stopped()) {
Serial.println("Done playing music");
while (1);
}
if (Serial.available()) {
char c = Serial.read();

// if we get an 's' on the serial console, stop!
if (c == 's') {
musicPlayer.stopPlaying();
}

// if we get an 'p' on the serial console, pause/unpause!
if (c == 'p') {
if (! musicPlayer.paused()) {
Serial.println("Paused");
musicPlayer.pausePlaying(true);
} else {
Serial.println("Resumed");
musicPlayer.pausePlaying(false);
}
}
}

delay(100);
}

kshitijdadhekar
10-27-2016, 03:45 AM
Is it because of that the LC can just provide 5mA on most of the digital pins which falls short for the VS1053? The SD doesnt seem to work with LC as well, worked well with 3.2. I tried using SPI pull up resisitors as well as using a tri-stating buffer like 74AHC1G125. But that doesnt seem to work as well.
let me know the possible point of failures for this not working.