Audible "Hello" example for VS1003B + Microcontroller
Re: Audible "Hello" example for VS1003B + Microcontroller
Can you use private message ? thanks
Re: Audible "Hello" example for VS1003B + Microcontroller
Hi Bianchi, unfortunately it seems that the board doesn't allow send private message. In the "Contact bianchi" portlet no button or object appear.
Maybe I don't know the exact procedure to do that.
Thanks.
Maybe I don't know the exact procedure to do that.
Thanks.
Re: Audible "Hello" example for VS1003B + Microcontroller
Hi!
That's right, this is a public forum. We don't use private messages here because we want everybody to be able to benefit from solving problems here. When a problem is solved here, we want everybody to be able see the answer.
-Panu
That's right, this is a public forum. We don't use private messages here because we want everybody to be able to benefit from solving problems here. When a problem is solved here, we want everybody to be able see the answer.
-Panu
Info: Line In and Line Out, VS1000 User interface, Overlay howto, Latest VSIDE, MCU Howto, Youtube
Panu-Kristian Poiksalo
Panu-Kristian Poiksalo
Re: Audible "Hello" example for VS1003B + Microcontroller
What's the problem ? and email address ?
Re: Audible "Hello" example for VS1003B + Microcontroller
Hi Panu at the moment I don't need to submit a particular problem, but maybe in the future. I'm currently working on a project using the VS1053 and a STM32 board nucleo 152 LE.
It would be nice for me to share fiendship with another member interested in VLSI product and STM32 microcontroller. And this forum would be useful also for that in my opinion
.
If this is not a problem I try to share my email for bianchi: dario.vicenzo74"at"gmail.com
I hope this doesn't hurt the forum administrators.
Thanks.
It would be nice for me to share fiendship with another member interested in VLSI product and STM32 microcontroller. And this forum would be useful also for that in my opinion

If this is not a problem I try to share my email for bianchi: dario.vicenzo74"at"gmail.com
I hope this doesn't hurt the forum administrators.
Thanks.
Re: Audible "Hello" example for VS1003B + Microcontroller
Hi Panu
I've been trying to get the hello.mp3 file to play - I have a PIC24F with the VS1063a. I was able to get the sine test to work, but, no such luck with this audible. What is the right value for CLOCKF that I should use? I have a 12.288Mhz xtal on the VS1063. Looks like people who have posted code here seem to have got the audible to work with different values for CLOCKF - Im not sure I see a pattern here. For some values, I hear a clipped sound, but hear nothing for others. I havent quite got my head around how to arrive at the right number to get this file to work. I'd appreciate your input.
Thanks!
Karthik
I've been trying to get the hello.mp3 file to play - I have a PIC24F with the VS1063a. I was able to get the sine test to work, but, no such luck with this audible. What is the right value for CLOCKF that I should use? I have a 12.288Mhz xtal on the VS1063. Looks like people who have posted code here seem to have got the audible to work with different values for CLOCKF - Im not sure I see a pattern here. For some values, I hear a clipped sound, but hear nothing for others. I havent quite got my head around how to arrive at the right number to get this file to work. I'd appreciate your input.
Thanks!
Karthik
Re: Audible "Hello" example for VS1003B + Microcontroller
The hello should be low enough bitrate (and mono) so it should play with the default 1.0x clock. SCI_CLOCKF should not matter, so the issue is probably elsewhere - like DREQ or chip select handling, SPI clock speed, or just some program logic (byte order, sending the correct number of bytes from the correct location in the array).
Visit https://www.facebook.com/VLSISolution VLSI Solution on Facebook
Re: Audible "Hello" example for VS1003B + Microcontroller
Hi,
I’m trying to play the “Hello” mp3 using a PIC24 and a VS1053b integrated in the Adafruit “VS1053 Breakout”.
Playing the Hello following the code posted in the first page of this thread results in random sound outputs. It is like the SV1053 is not been “done” with the decoding and the next bytes overwrite the old ones, resulting in some kind of broken “Hello”: for example a fraction of the word Hello with a ‘pip’ ( “Hel” plus “pip”), etc.
If I use the PIC24-Hardware SPI the distortion gets worse. I tested the code using more PIC24s and Breakouts having the same results.
[Please note that the Adafruit VS1053 shared the SPI with a SDCARD]
I’m trying to play the “Hello” mp3 using a PIC24 and a VS1053b integrated in the Adafruit “VS1053 Breakout”.
Playing the Hello following the code posted in the first page of this thread results in random sound outputs. It is like the SV1053 is not been “done” with the decoding and the next bytes overwrite the old ones, resulting in some kind of broken “Hello”: for example a fraction of the word Hello with a ‘pip’ ( “Hel” plus “pip”), etc.
If I use the PIC24-Hardware SPI the distortion gets worse. I tested the code using more PIC24s and Breakouts having the same results.
[Please note that the Adafruit VS1053 shared the SPI with a SDCARD]
Code: Select all
// VS1003B VS1003B VS1003B VS1003B VS1003B VS1003B VS1003B //
//// ------- Microcontroller Specific Code Starts ------- ////
#define XTFREQ 8000000
#define PLLMODE 4
#define FCY (XTFREQ*PLLMODE/2)
#include <xc.h>
#include <libpic30.h> // Import microcontroller register definitions.
#include "mcc_generated_files/mcc.h"
// Pin connections //
#define CARDCS _RB8 /** SDCARD on Adafruit VS1053 Breakout */
#define VS_DREQ _RB9 /** Data Request Pin: Player asks for more data */
#define VS_XDCS _RB11 /** Vlsi Data Chip Select Pin */
#define VS_XRESET _RB10 /** Vlsi Reset Pin */
#define PIN_XCS _RB12 /** Soft SPI: XCS pin (VLSI SCK pin) */
#define PIN_MOSI _RB15 /** Soft SPI: MOSI pin (VLSI SI pin) */
#define PIN_MISO _RB14 /** Soft SPI: MISO pin (VLSI SO pin) */
#define PIN_SCK _RB13 /** Soft SPI: clock pin (VLSI control chip select)*/
//#define CARDCS_SetHigh() _LATB8 = 1
//#define XCS_SetHigh() _LATB12 = 1
//#define XCS_SetLow() _LATB12 = 0
//#define MOSI_SetHigh() _LATB15 = 1
//#define MOSI_SetLow() _LATB15 = 0
//#define SCLK_SetHigh() _LATB13 = 1
//#define SCLK_SetLow() _LATB13 = 0
//#define XCS_SetHigh() _LATB12 = 1
//#define XCS_SetLow() _LATB12 = 0
//#define XRESET_SetHigh() _LATB10 = 1
//#define XRESET_SetLow() _LATB10 = 0
//#define XDCS_SetHigh() _LATB11 = 1
//#define XDCS_SetLow() _LATB11 = 0
// VS1053
typedef unsigned short u_int16;
const u_int16 chipNumber[16] = {
1001, 1011, 1011, 1003, 1053, 1033, 1063, 1103,
0, 0, 0, 0, 0, 0, 0, 0
};
unsigned char SpiTransfer(unsigned char c) {
char ret;
unsigned char mask;
mask = 0x80; //Initialize to write and read bit 7
ret = 0; //Initialize read byte with 0
do {
MOSI_SetLow(); // Clock out current bit onto SPI Out line
if (c & mask) MOSI_SetHigh(); // SPI_OUT = 1;
SCLK_SetHigh(); // Set SPI Clock line
if (MISO_GetValue()) ret |= mask; // Read current bit fromSPI In line
__delay_us(1); //Ensure minimum delay of 500nS between SPI Clock high and SPI Clock Low
SCLK_SetLow(); //Set SPI Clock line
mask = mask >> 1; //Shift mask so that next bit is written and read from SPI lines
__delay_us(1); //Ensure minimum delay of 1000ns between bits
} while (mask != 0);
//Ensure a minimum delay of 750ns between falling edge of SPI Clock signal
//and rising edge of SPI Enable!
__delay_us(1);
return ret;
//return SPI1_Exchange8bit(outdata);
}
// VS10XX Operations //
#define VS_WRITE_COMMAND 0x02 /** VS10xx SCI Write Command byte is 0x02 */
#define VS_READ_COMMAND 0x03 /** VS10xx SCI Read Command byte is 0x03 */
/** Put the VS player chip in reset */
#define VsPutInReset(){XRESET_SetLow();}
/** Release the VS player chip from reset */
#define VsReleaseFromReset(){XRESET_SetHigh();}
/** Pull the VS10xx Data Chip Select line Low */
#define VsSelectData(){XDCS_SetLow();}
/** Pull the VS10xx Data Chip Select line High */
#define VsDeselectData(){XDCS_SetHigh();}
/** VS10xx SCI Registers */
#define SPI_MODE 0x0
#define SPI_STATUS 0x1
#define SPI_BASS 0x2
#define SPI_CLOCKF 0x3
#define SPI_DECODE_TIME 0x4
#define SPI_AUDATA 0x5
#define SPI_WRAM 0x6
#define SPI_WRAMADDR 0x7
#define SPI_HDAT0 0x8
#define SPI_HDAT1 0x9
#define SPI_AIADDR 0xa
#define SPI_VOL 0xb
#define SPI_AICTRL0 0xc
#define SPI_AICTRL1 0xd
#define SPI_AICTRL2 0xe
#define SPI_AICTRL3 0xf
/* VS1063 / VS1053 Parametric */
#define PAR_END_FILL_BYTE 0x1e06 /* VS1063, VS1053 */
#define SM_CANCEL (1<< 3) /* VS1063, VS1053 */
void VsWriteRegister(unsigned char reg, unsigned int val) {
XCS_SetLow(); // Control Chip Select Low
SpiTransfer(VS_WRITE_COMMAND); // WRITE command
SpiTransfer(reg); // Register number
SpiTransfer((unsigned char) (val >> 8)); // High Byte
SpiTransfer((unsigned char) (val & 0xff)); // Low Byte
XCS_SetHigh(); // Control Chip Select High
}
unsigned int VsReadRegister(unsigned char reg) {
unsigned char inHigh;
unsigned char inLow;
XCS_SetLow(); // Control Chip Select Low
SpiTransfer(VS_READ_COMMAND); // READ command
SpiTransfer(reg); // Register number
inHigh = SpiTransfer(0xff); // High Byte
inLow = SpiTransfer(0xff); // Low Byte
XCS_SetHigh(); // Control Chip Select High
return (inHigh << 8) +inLow;
}
// Initialize SPI, set slow SPI clock
void InitSPI() {
// Set XCS high, nothing more to initialize for the soft SPI.
XCS_SetHigh();
}
// Set fast SPI clock
void SPISetFastClock() {
//SPI1BRGL = 0x0001;
// It's not possible to have a fast SPI clock with soft SPI.
// so do nothing...
// (For fast SPI Clock, use a microcontroller with hardware SPI.)
}
// No SPIWait operation is needed with this soft SPI implementation, so
// declare an empty macro for SPIWait so the compiler will remove calls to it.
#define SPIWait(a)
// Microcontroller specific init
void InitMicrocontroller() {
SYSTEM_Initialize();
}
/** Set VS10xx Volume Register */
#define VsSetVolume(leftchannel,rightchannel){ \
VsWriteRegister(11,(leftchannel <<8 )+(rightchannel));}
/** Soft Reset of VS10xx (Between songs) */
void VsSoftReset() {
VsWriteRegister(SPI_MODE, 0x0804); /* Newmode, Reset, No L1-2 */
__delay_ms(1); /* One millisecond delay */
while (!VS_DREQ) /* wait for startup */
;
/* Set clock register, doubler etc. */
VsWriteRegister(SPI_CLOCKF, 0x8800);
__delay_ms(1); /* One millisecond delay */
/* Wait for DREQ */
while (!VS_DREQ)
;
/* A quick sanity check: write to two registers, then test if we
get the same results. Note that if you use a too high SPI
speed, the MSB is the most likely to fail when read again. */
int ok;
ok = 1;
unsigned int SPI_AICTRL1_V, SPI_AICTRL2_V;
SPI_AICTRL1_V = VsReadRegister(SPI_AICTRL1);
SPI_AICTRL2_V = VsReadRegister(SPI_AICTRL2);
VsWriteRegister(SPI_AICTRL1, 0xABAD);
VsWriteRegister(SPI_AICTRL2, 0x7E57);
SPI_AICTRL1_V = VsReadRegister(SPI_AICTRL1);
SPI_AICTRL2_V = VsReadRegister(SPI_AICTRL2);
if (SPI_AICTRL1_V != 0xABAD || SPI_AICTRL2_V != 0x7E57) {
//There is something wrong with VS10xx SCI registers
ok = 0;
}
VsWriteRegister(SPI_AICTRL1, 0);
VsWriteRegister(SPI_AICTRL2, 0);
/* Check VS10xx type */
u_int16 ssVer = 0;
ssVer = ((VsReadRegister(SPI_STATUS) >> 4) & 15);
if (chipNumber[ssVer]) {
if (chipNumber[ssVer] != 1053) {
//Incorrect chip?;
ok = 0;
} else {
ok = 1;
}
} else {
//Unknown VS10xx SCI_MODE field SS_VER
ok = 0;
}
}
/** Reset VS10xx */
void VsReset() {
VsPutInReset();
__delay_ms(1);
InitSPI();
/* Un-reset Vs chip */
VsDeselectData();
VsReleaseFromReset();
VsSetVolume(0xff, 0xff); //Declick: Immediately switch analog off
/* Declick: Slow sample rate for slow analog part startup */
VsWriteRegister(SPI_AUDATA, 10); /* 10 Hz */
__delay_ms(100);
/* Switch on the analog parts */
VsSetVolume(0xfe, 0xfe);
VsWriteRegister(SPI_AUDATA, 0x1f40); /* 8kHz */
VsSetVolume(20, 20); // Set initial volume (20 = -10dB)
VsSoftReset();
SPISetFastClock(); // Now you can set high speed SPI clock
}
// The spoken word "Hello" as an VS file.
unsigned char HelloVS[] = {// Note: "code" in AT89C51 SDCC means to put this array into ROM.
0xFF, 0xF2, 0x40, 0xC0, 0x19, 0xB7, 0x00, 0x14, 0x02, 0xE6, 0x5C, /* ..@.......\ */
0x01, 0x92, 0x68, 0x01, 0xF1, 0x5E, 0x03, 0x08, 0xF0, 0x24, 0x80, /* ..h..^...$. */
0x05, 0x9E, 0x20, 0xC6, 0xFC, 0x12, 0x32, 0x5C, 0xBF, 0xF9, 0xB9, /* .. ...2\... */
0x20, 0x4A, 0x7F, 0x85, 0xEC, 0x4C, 0xCD, 0xC7, 0x27, 0xFE, 0x5C, /* J...L..'.\ */
0x34, 0x25, 0xCB, 0xE6, 0xFF, 0xFF, 0x8E, 0x42, 0xE1, 0xA0, 0x5E, /* 4%.....B..^ */
0xCA, 0x6E, 0x30, 0x9F, 0xFF, 0xF8, 0xC2, 0x12, 0x84, 0xB9, 0x7C, /* .n0.......| */
0xDC, 0x61, 0x09, 0x4A, 0x7F, 0xFF, 0xFF, 0xF9, 0x7D, 0x32, 0x51, /* .a.J....}2Q */
0x09, 0x7C, 0xE1, 0xA5, 0x6E, 0xB4, 0xFF, 0xFF, 0xFF, 0xFF, 0xD3, /* .|..n...... */
0x34, 0x41, 0x91, 0xF0, 0x11, 0x8F, 0x00, 0x0F, 0x81, 0x9C, 0x10, /* 4A......... */
0xEE, 0x59, 0xCE, 0x56, 0x67, 0xFF, 0xF2, 0x42, 0xC0, 0xEC, 0x53, /* .Y.Vg..B..S */
0x09, 0x15, 0xF9, 0xAA, 0xA8, 0x0D, 0xD9, 0x40, 0x00, 0xCA, 0x34, /* .......@..4 */
0x53, 0xD9, 0x18, 0xAB, 0x7D, 0xF7, 0x89, 0x3F, 0x11, 0x38, 0x94, /* S...}..?.8. */
0x82, 0x59, 0x93, 0x20, 0x6A, 0x0C, 0xEE, 0x8E, 0x58, 0xFA, 0x38, /* .Y. j...X.8 */
0x82, 0xCA, 0xF0, 0x58, 0xBB, 0xDA, 0x0C, 0x50, 0x56, 0x1F, 0xBB, /* ...X...PV.. */
0x18, 0x5D, 0x8B, 0x9F, 0xDA, 0x71, 0x4F, 0xFF, 0xBD, 0xFE, 0xEF, /* .]...qO.... */
0x69, 0x36, 0x86, 0x3C, 0x50, 0xBB, 0x0A, 0x07, 0x89, 0x54, 0xF0, /* i6.<P....T. */
0x88, 0x9F, 0x90, 0x95, 0x30, 0x94, 0x2E, 0x7E, 0xF0, 0x64, 0x96, /* ....0..~.d. */
0x79, 0x08, 0x3E, 0x20, 0x97, 0x28, 0x34, 0x9C, 0x09, 0x7F, 0xD2, /* y.> .(4.... */
0xC0, 0x01, 0x75, 0xF8, 0x05, 0x6B, 0x5F, 0x41, 0x17, 0x0B, 0xE7, /* ..u..k_A... */
0xFF, 0xF2, 0x40, 0xC0, 0x61, 0xE5, 0x0B, 0x16, 0x09, 0xC6, 0xC5, /* ..@.a...... */
0x74, 0x7B, 0xCC, 0x94, 0x7A, 0xF7, 0x80, 0x76, 0xB2, 0xD2, 0xF8, /* t{..z..v... */
0x39, 0x06, 0x38, 0xFD, 0x71, 0xC5, 0xDE, 0x3A, 0x38, 0xBF, 0xD5, /* 9.8.q..:8.. */
0xF7, 0x12, 0x37, 0xCB, 0xF5, 0x63, 0x0C, 0x9B, 0xCE, 0x77, 0x25, /* ..7..c...w% */
0xED, 0xFB, 0x3D, 0x6B, 0x35, 0xF9, 0x6D, 0xD7, 0xF9, 0x2C, 0xD1, /* ..=k5.m..,. */
0x97, 0x15, 0x87, 0x93, 0xA4, 0x49, 0x4A, 0x18, 0x16, 0x07, 0xA1, /* .....IJ.... */
0x60, 0xF7, 0x52, 0x94, 0xDB, 0x02, 0x16, 0x70, 0xB2, 0xD8, 0x80, /* `.R....p... */
0x30, 0xC2, 0x94, 0x40, 0x81, 0x74, 0x5A, 0x19, 0x7A, 0x80, 0x60, /* 0..@.tZ.z.` */
0x41, 0x21, 0x46, 0x95, 0xD5, 0xC4, 0x40, 0xD2, 0x01, 0xC0, 0x01, /* A!F...@.... */
0xDA, 0xD9, 0xA0, 0xB1, 0x01, 0xFF, 0xF2, 0x42, 0xC0, 0x82, 0x10, /* .......B... */
0x0B, 0x12, 0xF9, 0x9E, 0xC9, 0x7E, 0x7A, 0xC6, 0x95, 0x55, 0x09, /* .....~z..U. */
0x8B, 0x19, 0x5E, 0x8B, 0x26, 0xCA, 0xEB, 0x68, 0x8A, 0x05, 0x8F, /* ..^.&..h... */
0x36, 0xA5, 0xA5, 0x03, 0xB8, 0x9C, 0xED, 0x24, 0x51, 0x59, 0x90, /* 6......$QY. */
0xF6, 0xC5, 0x7D, 0xB5, 0xAD, 0xAF, 0xF6, 0x3B, 0x18, 0xEF, 0x3F, /* ..}....;..? */
0xFF, 0xFF, 0x4E, 0xDE, 0x16, 0x66, 0x0B, 0xAA, 0x33, 0x23, 0xDD, /* ..N..f..3#. */
0x9C, 0x4E, 0x6E, 0x55, 0x22, 0x9D, 0xA2, 0x40, 0xA6, 0x36, 0x31, /* .NnU"..@.61 */
0x69, 0xA5, 0xE1, 0xD9, 0x7F, 0xF7, 0xC6, 0xCC, 0x48, 0x00, 0x0E, /* i.......H.. */
0x90, 0x16, 0x00, 0x0F, 0xDE, 0x6E, 0x80, 0x11, 0x0C, 0x9A, 0x4F, /* .....n....O */
0x56, 0xDB, 0x88, 0xD3, 0xB2, 0x1C, 0x00, 0xE0, 0x2E, 0x3E, 0xAC, /* V........>. */
0xFF, 0xF2, 0x40, 0xC0, 0x1C, 0xE5, 0x19, 0x13, 0x31, 0x4E, 0xCD, /* ..@.....1N. */
0x9E, 0xC3, 0x06, 0x71, 0x03, 0x85, 0xE5, 0xB5, 0x6D, 0x88, 0x50, /* ...q....m.P */
0x8E, 0x0E, 0x17, 0x3B, 0x19, 0xFB, 0x4E, 0x3B, 0x99, 0xEF, 0x4C, /* ...;..N;..L */
0x9E, 0xF7, 0x7B, 0x31, 0x7C, 0x3C, 0x5F, 0xFF, 0xF4, 0xF8, 0xE3, /* ..{1|<_.... */
0x92, 0x42, 0x07, 0x8E, 0x83, 0x8E, 0x0F, 0x05, 0x08, 0x91, 0xA3, /* .B......... */
0x16, 0xE2, 0xDF, 0xB7, 0x62, 0x60, 0x48, 0x31, 0x3C, 0xFF, 0xD4, /* ....b`H1<.. */
0x9E, 0x0C, 0x68, 0x00, 0x77, 0x54, 0xE3, 0x1E, 0x05, 0xC5, 0xF8, /* ..h.wT..... */
0xEA, 0x8D, 0x82, 0x9D, 0x08, 0xA9, 0x06, 0x8D, 0x1E, 0x5D, 0x7C, /* .........]| */
0x7F, 0x08, 0xC0, 0x50, 0x45, 0x42, 0xD0, 0x36, 0xF8, 0xB2, 0x4D, /* ...PEB.6..M */
0x53, 0x0C, 0x80, 0x3B, 0x4D, 0xFF, 0xF2, 0x42, 0xC0, 0x2F, 0x3C, /* S..;M..B./< */
0x25, 0x19, 0x29, 0xFE, 0xBC, 0x2E, 0xC4, 0xD0, 0x99, 0x4C, 0x48, /* %.)......LH */
0xB0, 0x9C, 0x49, 0xD2, 0x1A, 0x2D, 0x02, 0xC2, 0x79, 0x69, 0x16, /* ..I..-..yi. */
0x92, 0xA8, 0xC5, 0xAB, 0x45, 0x5A, 0x68, 0xE8, 0x75, 0x57, 0xCD, /* ....EZh.uW. */
0xF1, 0xB9, 0xAA, 0x13, 0x88, 0xE4, 0x87, 0x42, 0x15, 0xB3, 0x58, /* .......B..X */
0xF5, 0xA3, 0x46, 0xB1, 0xCF, 0xD3, 0x59, 0x7E, 0xBA, 0xB5, 0xA7, /* ..F...Y~... */
0x6B, 0x0B, 0x17, 0x57, 0x6B, 0x5C, 0x4A, 0xCD, 0x53, 0x76, 0x2A, /* k..Wk\J.Sv* */
0x1D, 0x28, 0xC5, 0x1C, 0x76, 0x5C, 0xDD, 0x0A, 0x00, 0x4B, 0xC0, /* .(..v\...K. */
0x1B, 0xCA, 0xA8, 0xE9, 0x81, 0x5B, 0xA6, 0xDC, 0xA4, 0x59, 0x13, /* .....[...Y. */
0xFC, 0xBA, 0x8F, 0x98, 0x79, 0x44, 0x25, 0xC9, 0x35, 0x38, 0xCA, /* ....yD%.58. */
0xFF, 0xF2, 0x40, 0xC0, 0xB9, 0x7D, 0x1A, 0x13, 0x79, 0x6A, 0xC8, /* ..@..}..yj. */
0x3E, 0xC4, 0x46, 0x94, 0x8D, 0x3C, 0x67, 0x85, 0xB1, 0xA8, 0x89, /* >.F..<g.... */
0xC0, 0xF2, 0xE6, 0x2F, 0x9D, 0x7C, 0xC9, 0xB4, 0xBE, 0xCF, 0xE1, /* .../.|..... */
0x7D, 0xFE, 0x1F, 0x03, 0x00, 0x12, 0x84, 0x72, 0x8C, 0xE7, 0xD8, /* }......r... */
0x5E, 0xC9, 0xA9, 0x01, 0xBA, 0x9B, 0xC4, 0x10, 0x5C, 0x70, 0x2E, /* ^.......\p. */
0x6C, 0x48, 0xE7, 0x8C, 0x15, 0x0B, 0x06, 0x01, 0xE5, 0xFF, 0xFF, /* lH......... */
0xD4, 0x0D, 0x00, 0x0F, 0xCE, 0x58, 0x95, 0x61, 0xA8, 0x9E, 0x7B, /* .....X.a..{ */
0x19, 0x98, 0xB0, 0xF0, 0xC6, 0x72, 0x82, 0xD5, 0x27, 0x06, 0x47, /* .....r..'.G */
0x41, 0x22, 0x0F, 0x65, 0x93, 0xC9, 0x8A, 0x09, 0x19, 0x48, 0x1B, /* A".e.....H. */
0xBD, 0xD6, 0x64, 0x1A, 0xAC, 0xFF, 0xF2, 0x42, 0xC0, 0xF1, 0x11, /* ..d....B... */
0x25, 0x14, 0x22, 0x06, 0xBC, 0x0E, 0xD4, 0x4E, 0x99, 0x90, 0xA8, /* %."....N... */
0xD8, 0xB7, 0xAD, 0x5D, 0x3E, 0xAF, 0x6E, 0xBE, 0x66, 0x83, 0xA4, /* ...]>.n.f.. */
0xE3, 0xC2, 0xE0, 0x29, 0x43, 0x87, 0x5F, 0x4F, 0x27, 0x9C, 0x2C, /* ...)C._O'., */
0xD0, 0x91, 0xF3, 0x87, 0x9B, 0x54, 0xED, 0xD1, 0xB4, 0xF3, 0x39, /* .....T....9 */
0x87, 0x22, 0x06, 0x86, 0x0D, 0x71, 0xE4, 0x6F, 0x2A, 0x08, 0x04, /* ."...q.o*.. */
0xC0, 0x03, 0x2A, 0xB1, 0xE2, 0x05, 0x4D, 0x64, 0xA1, 0x9C, 0xA6, /* ..*...Md... */
0x0D, 0x41, 0xA6, 0xF2, 0x7A, 0xC1, 0x30, 0xC3, 0x38, 0x26, 0x09, /* .A..z.0.8&. */
0x50, 0x08, 0xC4, 0xF6, 0x30, 0x0C, 0xA6, 0xA9, 0x17, 0x00, 0x13, /* P...0...... */
0x0C, 0xDC, 0xC4, 0x2F, 0x28, 0xEB, 0x3F, 0xCD, 0x7A, 0x3D, 0x2F, /* .../(.?.z=/ */
0xFF, 0xF2, 0x40, 0xC0, 0x18, 0x6F, 0x2E, 0x13, 0xA1, 0xF2, 0xBC, /* ..@..o..... */
0x36, 0xCB, 0x4E, 0x99, 0x6E, 0xFC, 0xEE, 0xC5, 0xF0, 0xA0, 0xB7, /* 6.N.n...... */
0x92, 0xD4, 0xEE, 0x79, 0x7C, 0x50, 0x5D, 0xE5, 0x04, 0x94, 0xA9, /* ...y|P].... */
0x76, 0xCF, 0x6C, 0x70, 0xDD, 0x0D, 0xD4, 0xEE, 0xED, 0x98, 0xE8, /* v.lp....... */
0xC8, 0x35, 0x36, 0x7A, 0x0C, 0x05, 0x80, 0x03, 0xBC, 0xBE, 0x91, /* .56z....... */
0x00, 0x7C, 0xAE, 0x65, 0xB8, 0x91, 0xA3, 0x33, 0xBA, 0x68, 0x60, /* .|.e...3.h` */
0xD4, 0x1A, 0x66, 0xF8, 0x43, 0xA0, 0x20, 0x89, 0xE7, 0x80, 0xD8, /* ..f.C. .... */
0x1E, 0x4F, 0xA0, 0x04, 0x60, 0x06, 0x0A, 0xA4, 0x91, 0x24, 0xFA, /* .O..`....$. */
0x9F, 0x57, 0x53, 0xF4, 0x7A, 0xDB, 0x5F, 0x56, 0xE3, 0x6E, 0x0B, /* .WS.z._V.n. */
0x8B, 0x3A, 0x1C, 0xF9, 0x5E, 0xFF, 0xF2, 0x42, 0xC0, 0xB1, 0x00, /* .:..^..B... */
0x38, 0x14, 0x09, 0xEE, 0xB4, 0x36, 0xD3, 0x4E, 0x99, 0xA4, 0x78, /* 8....6.N..x */
0x94, 0x73, 0xC4, 0x66, 0x30, 0xF5, 0xEA, 0xDB, 0xBA, 0x67, 0x67, /* .s.f0....gg */
0x95, 0x6B, 0xAB, 0x68, 0x5D, 0x08, 0xA1, 0x39, 0x56, 0xAB, 0x1E, /* .k.h]..9V.. */
0xD5, 0x03, 0xE8, 0x01, 0x70, 0x00, 0xB3, 0x93, 0x33, 0x19, 0x8C, /* ....p...3.. */
0x61, 0x8F, 0xBB, 0x5D, 0x24, 0x12, 0x63, 0xD3, 0x4B, 0x5D, 0x91, /* a..]$.c.K]. */
0x08, 0x43, 0x22, 0x56, 0x1A, 0xC5, 0x10, 0x21, 0x84, 0xA8, 0xEA, /* .C"V...!... */
0x80, 0xBF, 0x16, 0x8E, 0x3D, 0x46, 0x18, 0x9C, 0x6E, 0x9A, 0x91, /* ....=F..n.. */
0xE6, 0xC9, 0x6F, 0xD2, 0x7D, 0x27, 0xD7, 0xE9, 0x6B, 0xFF, 0x0A, /* ..o.}'..k.. */
0x03, 0x43, 0x89, 0xD5, 0xBF, 0x52, 0x97, 0x0A, 0x25, 0x95, 0x0D, /* .C...R..%.. */
0xFF, 0xF2, 0x40, 0xC0, 0xF5, 0xC3, 0x41, 0x13, 0x81, 0xEE, 0xA8, /* ..@...A.... */
0x5E, 0xD3, 0x44, 0x98, 0xFC, 0xCF, 0x97, 0xF9, 0x58, 0xB5, 0x33, /* ^.D.....X.3 */
0xB1, 0x85, 0x47, 0x86, 0xD7, 0x98, 0x01, 0x3B, 0xA3, 0x4F, 0x7E, /* ..G....;.O~ */
0x04, 0xA6, 0xC3, 0x39, 0x21, 0x70, 0x27, 0x62, 0xB5, 0x18, 0x10, /* ...9!p'b... */
0x09, 0x99, 0x00, 0x8B, 0x7E, 0xF2, 0xBF, 0x52, 0x18, 0x26, 0x30, /* ....~..R.&0 */
0x1C, 0xB0, 0x01, 0x49, 0x30, 0xE0, 0xC3, 0x11, 0x46, 0x05, 0xCC, /* ...I0...F.. */
0x49, 0x14, 0x28, 0xB2, 0xED, 0x4B, 0x57, 0x5A, 0x2F, 0xB7, 0x46, /* I.(..KWZ/.F */
0x63, 0x34, 0xD2, 0xDA, 0x9F, 0x56, 0x32, 0xB7, 0xA2, 0x25, 0xFF, /* c4...V2..%. */
0x94, 0x28, 0x33, 0x7F, 0x3B, 0xC4, 0x50, 0xEC, 0xB1, 0xE2, 0x26, /* .(3.;.P...& */
0xA1, 0xB7, 0x07, 0x7F, 0xFB, 0xFF, 0xF2, 0x42, 0xC0, 0x67, 0x6A, /* .......B.gj */
0x4C, 0x13, 0xF9, 0x6A, 0x90, 0x7E, 0xDB, 0x44, 0x94, 0x3F, 0xFF, /* L..j.~.D.?. */
0x14, 0xD6, 0x2A, 0xFF, 0xFF, 0xC1, 0x34, 0x8C, 0x48, 0x22, 0x00, /* ..*...4.H". */
0x06, 0x8F, 0x21, 0xFD, 0x64, 0x60, 0x04, 0x92, 0x42, 0xEA, 0x74, /* ..!.d`..B.t */
0x32, 0x37, 0xAA, 0x5A, 0x9F, 0x67, 0x01, 0x8B, 0x3F, 0x37, 0x31, /* 27.Z.g..?71 */
0xDD, 0x06, 0x3C, 0x01, 0x34, 0x30, 0xE0, 0x5C, 0x78, 0x78, 0xCB, /* ..<.40.\xx. */
0xD6, 0xF1, 0x31, 0x8A, 0x69, 0x61, 0x93, 0x92, 0x42, 0xCE, 0x4B, /* ..1.ia..B.K */
0xC5, 0x02, 0x4E, 0x73, 0xC6, 0x24, 0x30, 0xCD, 0x08, 0x66, 0xC6, /* ..Ns.$0..f. */
0x35, 0xAB, 0xA2, 0x3D, 0x2F, 0xB3, 0xBD, 0x34, 0x87, 0x13, 0xEE, /* 5..=/..4... */
0x71, 0x45, 0x68, 0xFA, 0xEA, 0x05, 0x84, 0x41, 0x36, 0x4C, 0x9A, /* qEh....A6L. */
0xFF, 0xF2, 0x40, 0xC0, 0xC9, 0x92, 0x56, 0x13, 0xD0, 0x6E, 0x70, /* ..@...V..np */
0x54, 0xD3, 0xCC, 0x28, 0x06, 0xD7, 0x0E, 0xA4, 0x1D, 0x9C, 0x9D, /* T..(....... */
0xD9, 0xA9, 0x88, 0x7B, 0xB5, 0xA3, 0x56, 0xB7, 0x4B, 0x4B, 0x5A, /* ...{..V.KKZ */
0x9B, 0x2C, 0xA9, 0xAD, 0x6F, 0x99, 0x6C, 0xC0, 0x4C, 0x14, 0x14, /* .,..o.l.L.. */
0xEF, 0xB4, 0x20, 0x91, 0x5F, 0xBC, 0x81, 0x41, 0x41, 0x5D, 0xD4, /* .. ._..AA]. */
0x20, 0xBD, 0x05, 0x1A, 0x6F, 0xE2, 0x68, 0x56, 0x41, 0x41, 0x57, /* ...o.hVAAW */
0xF9, 0xBF, 0x89, 0x82, 0x8E, 0xC7, 0x8F, 0x0A, 0x0A, 0x09, 0x37, /* ..........7 */
0xF1, 0x05, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x05, 0x37, 0xFF, 0x10, /* ........7.. */
0x50, 0x50, 0x53, 0x65, 0xFF, 0xFF, 0xFD, 0x75, 0xDF, 0xFF, 0xFF, /* PPSe...u... */
0x68, 0x4F, 0xFF, 0x84, 0x70, 0xFF, 0xF2, 0x42, 0xC0, 0x27, 0x50, /* hO..p..B.'P */
0x5F, 0x17, 0xE8, 0x82, 0x3C, 0x11, 0x58, 0x18, 0x01, 0x55, 0x48, /* _...<.X..UH */
0xBC, 0x52, 0xFC, 0x4A, 0x4C, 0x3C, 0xD5, 0xF6, 0x11, 0x2D, 0xBF, /* .R.JL<...-. */
0xEA, 0x03, 0x5C, 0x57, 0x29, 0xBF, 0xC3, 0x75, 0x1C, 0xE6, 0xDD, /* ..\W)..u... */
0xBF, 0xED, 0xEF, 0xD0, 0x98, 0x77, 0x71, 0x95, 0x73, 0xFF, 0xED, /* .....wq.s.. */
0x54, 0xBE, 0xD5, 0xEE, 0xAE, 0xC2, 0xD5, 0x0B, 0xFF, 0xF1, 0x97, /* T.......... */
0x8A, 0xE4, 0x42, 0x09, 0x99, 0xB1, 0xEA, 0x94, 0xDC, 0x78, 0xB5, /* ..B......x. */
0x34, 0x0F, 0xF1, 0x8F, 0xFC, 0x15, 0xF6, 0xFA, 0xB1, 0x47, 0xA9, /* 4........G. */
0x6C, 0x67, 0x43, 0x8B, 0xF2, 0x76, 0x22, 0xED, 0xDA, 0x85, 0xBA, /* lgC..v".... */
0x2F, 0xC7, 0xF9, 0xCF, 0xFC, 0xDB, 0x46, 0x2E, 0x50, 0x0A, 0x84, /* /.....F.P.. */
0xFF, 0xF2, 0x40, 0xC0, 0xC6, 0x4A, 0x59, 0x28, 0x2B, 0x19, 0xE0, /* ..@..JY(+.. */
0x01, 0x89, 0x78, 0x00, 0x52, 0x85, 0x3C, 0x8E, 0x54, 0x9A, 0x48, /* ..x.R.<.T.H */
0x5A, 0x72, 0x32, 0x94, 0xBF, 0x43, 0x4F, 0x24, 0x53, 0x4B, 0xEC, /* Zr2..CO$SK. */
0x4B, 0x99, 0x0E, 0x66, 0x1F, 0xFF, 0xCE, 0x7F, 0xFF, 0x3F, 0x10, /* K..f.....?. */
0xAE, 0x82, 0x62, 0x71, 0x34, 0x18, 0x59, 0x9B, 0x51, 0xC7, 0x59, /* ..bq4.Y.Q.Y */
0xCE, 0xEE, 0xA5, 0xFE, 0x02, 0xBB, 0x30, 0x91, 0x49, 0xD5, 0x4B, /* ......0.I.K */
0xF3, 0xDC, 0x9A, 0xA9, 0x57, 0x8E, 0x72, 0x10, 0xC0, 0x5D, 0x60, /* ....W.r..]` */
0x67, 0xFC, 0x7D, 0xD6, 0xBA, 0xDD, 0xB3, 0x8B, 0x5A, 0x0A, 0x4C, /* g.}.....Z.L */
0x41, 0x4D, 0x45, 0x33, 0x2E, 0x39, 0x33, 0xAA, 0xAA, 0xAA, 0xAA, /* AME3.93.... */
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x54, 0x41, 0x47, 0x48, 0x65, 0x6C, /* .....TAGHel */
0x6C, 0x6F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /* lo */
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /* */
0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x6E, 0x75, 0x2D, 0x4B, /* Panu-K */
0x72, 0x69, 0x73, 0x74, 0x69, 0x61, 0x6E, 0x20, 0x50, 0x6F, 0x69, /* ristian Poi */
0x6B, 0x73, 0x61, 0x6C, 0x6F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /* ksalo */
0x20, 0x20, 0x56, 0x53, 0x44, 0x53, 0x50, 0x20, 0x54, 0x65, 0x73, /* VSDSP Tes */
0x74, 0x69, 0x6E, 0x67, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /* ting */
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /* */
0x20, 0x20, 0x20, 0x4D, 0x50, 0x33, 0x20, 0x48, 0x65, 0x6C, 0x6C, /* VS Hell */
0x6F, 0x2C, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x21, 0x20, 0x20, /* o, World! */
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /* */
0x00, /* . */
};
int main() {
unsigned char *p;
unsigned int i;
InitMicrocontroller();
// SDCARD share SPI with VS1053
CARDCS_SetHigh();
__delay_ms(100);
VsReset();
while (1) {
p = HelloVS; // Point "p" to the beginning of array
while (p <= &HelloVS[sizeof (HelloVS) - 1]) {
while (!VS_DREQ) {
// VS buffer is full, time to do something else...
SPIWait(); // Wait until SPI transfer is completed
VsDeselectData(); // Release the SDI bus
// You can do something else here, the bus is free...
// Maybe set the volume or whatever...
}
VsSelectData(); // Pull XDCS low
SpiTransfer(*p++); // Send SPI byte
// You can actually send 32 bytes here before checking for DREQ again
}
// End of file - send 2048 zeros before next file
VsSelectData();
for (i = 0; i < 2048; i++) {
while (!DREQ_GetValue()); // wait here until DREQ is high again
SpiTransfer(0);
}
SPIWait(); // Wait until SPI transfer is completed
VsDeselectData();
VsSoftReset();
} // Ok, time to send the hello file again.
return 1;
}
Re: Audible "Hello" example for VS1003B + Microcontroller
Hi, almen_80!
Check that your microcontroller obeys the DREQ signal: short circuit it low and check that your MCU really stops sending the data.
-Panu
Check that your microcontroller obeys the DREQ signal: short circuit it low and check that your MCU really stops sending the data.
-Panu
Info: Line In and Line Out, VS1000 User interface, Overlay howto, Latest VSIDE, MCU Howto, Youtube
Panu-Kristian Poiksalo
Panu-Kristian Poiksalo
Re: Audible "Hello" example for VS1003B + Microcontroller
Hi Panu,
DREQ is defined low at start. I put a 2 seconds delay after sending the Hello but the chip is still unable to play the whole data or is playing it wrong.
Are there other registers that could help checking the state of the chip?
DREQ is defined low at start. I put a 2 seconds delay after sending the Hello but the chip is still unable to play the whole data or is playing it wrong.
Are there other registers that could help checking the state of the chip?