Recreation of SparkFun's Musical Instrument shield with ESP32 not outputting any audio

Thread Starter

Adamelli

Joined Sep 14, 2020
66
I tested all the voltages (5, 3.3 and 1.8) and they are where they should be. There are two crystals on my PCB, to change to the smaller one eventually. But I only put one crystal on (which only one should be put on).

1689691652971.png

1689691938614.png
Eagle board file

For the next version, I'll put in a ground plane. Here is what it was created from:
1689698105621.png
https://cdn.sparkfun.com/datasheets/Dev/Arduino/Shields/MIDI Music Shield-v13.pdf

Paired minimal program that chimes a bell every three seconds:

C++:
#define RXD2 16      // was 2, not needed
#define TXD2 23      // was 3 MIDI-In
#define resetMIDI 22 //Reset line

byte note = 0; //The MIDI note value to be played
int  instrument = 0;


void setup()
{
  Serial.begin(115200);
 
  //Setup soft serial for MIDI control
  Serial2.begin(31250, SERIAL_8N1, RXD2, TXD2);

  //Reset
  pinMode(resetMIDI, OUTPUT);
  digitalWrite(resetMIDI, LOW);
  delay(100);
  digitalWrite(resetMIDI, HIGH);
  delay(100);
  talkMIDI(0xB0, 0x07, 120); //0xB0 is channel message, set channel volume to near max (127)
}

void loop()
{

  talkMIDI(0xB0, 0, 0x00); //Default bank GM1
  talkMIDI(0xC0, 98, 0);   //Set instrument number. 0xC0 is a 1 data byte command
 
      //Note on channel 1 (0x90), some note value (note), middle velocity (0x45):
      noteOn(0, 98, 60);
      delay(50);

      //Turn off the note with a given off/release velocity
      noteOff(0, 98, 15000);

  delay(3000);

}



//Send a MIDI note-on message.  Like pressing a piano key
//channel ranges from 0-15
void noteOn(byte channel, byte note, byte attack_velocity) {
  talkMIDI( (0x90 | channel), note, attack_velocity);
}

//Send a MIDI note-off message.  Like releasing a piano key
void noteOff(byte channel, byte note, byte release_velocity) {
  talkMIDI( (0x80 | channel), note, release_velocity);
}

//Plays a MIDI note. Doesn't check to see that cmd is greater than 127, or that data values are less than 127
void talkMIDI(byte cmd, byte data1, byte data2) {
  Serial2.write(cmd);
  Serial2.write(data1);

  //Some commands only have one data byte. All cmds less than 0xBn have 2 data bytes
  //(sort of: http://253.ccarh.org/handout/midiprotocol/)
  if( (cmd & 0xF0) <= 0xB0)
    Serial2.write(data2);

}
This program does not output any audio on the PCB I designed. But it does output a bell sound when the ESP32 is connected to the shield:

1689698810931.png

Any ideas on how to troubleshoot or anything seemingly wrong with the circuit I created?
 
Last edited:
Top