33pF necessary for MSGEQ7 chip?

Im trying to make this circuit and it calls for a 33pF cap. I only have 30pF on hand. will 3pF change much or will the 30pF work? I have tried with the 30pF and I consistently just read zeros or it counts down from 1023. I also have 20k instead of the recommended 22k. Are these slight differences causing the chip to fail, or is the problem somewhere else?
Code(not mine):

  Test Sketch for the MSGEQ7
  from Mixed Signal Integration

  the IOs in this Sketch are 
  compatible with the Shield
  from Sparkfun:


  Author: Simon Waldherr
  License: MIT

int AnalogIn = 0;    // read from multiplexer using analog input 0
int NextBand = 4;    // strobe (next band) is attached to digital pin 4
int ResetPin = 5;    // reset is attached to digital pin 5
int Spectrum[7];     // array to store analog values
int filter = 80;  // *** added min level above noise

void setup()

    // init IO
//   delay(250);  // *** not necessary
//   pinMode(AnalogIn, INPUT);  // *** not necessary
    pinMode(NextBand, OUTPUT);
    pinMode(ResetPin, OUTPUT);
    digitalWrite(ResetPin, HIGH);
    digitalWrite(ResetPin, LOW);  // *** added
//    digitalWrite(NextBand, HIGH);  //*** removed

    // init Serial
//   delay(250);  // *** not necessary
    Serial.begin(9600);  //*** chg'd from 115200 to 9600
                         //*** make sure Monitor is 9600
    Serial.println("|            MSGEQ7            |");
    Serial.println("| Seven Band Graphic Equalizer |");
    Serial.println("|     on an Arduino Shield     |");
    Serial.println("|      with Serial output      |");
    // wait

void loop()
// *** Reset here works but slighly better response without it
//    digitalWrite(ResetPin, HIGH);                          // reset band to 63 Hz
//    digitalWrite(ResetPin, LOW);

    for (int i = 0; i < 7; i++)                            // for loop to save values to array
        // HIGH to LOW transition works best here
        digitalWrite(NextBand, HIGH);  //*** added 
        digitalWrite(NextBand, LOW);
        delayMicroseconds(22);                               // to allow the output to settle
//        Spectrum[i] = doMath(analogRead(AnalogIn));        // read actual value to array
        // read spectrum level and filter noise
        Spectrum[i] = constrain(analogRead(AnalogIn), filter, 1023);  //*** added
//        digitalWrite(NextBand, HIGH);  //*** moved up      // select next band (160Hz, 400Hz, 1000Hz, 2500Hz, 6250Hz, 16kHz)
        delayMicroseconds(3);  //*** probably not necessary

    for (int i = 0; i < 7; i++)                            // for loop to print array to Serial
        if (Spectrum[i] == filter )  //***  chg'd               // ignore values lower than 100 (you also can use doMath())
    Serial.println();                                      // Serial new line
    //delay(500);                                          // this sketch prints really much data, you can slow down if you have to.
/*  *** remove
int doMath(int analogvalue)                                // you can filter the analog data and do your own math
    int result;
    result = (analogvalue-32)/10;
    return result;
  }  */




The 33pF defines the actual frequencies that go into the bands. This capacitor along with the 200K resistor define the frequency of the clock oscillator. Using a 30pF will not stop it from working, you must have something else wrong.

I also have 20k instead of the recommended 22k.

Makes absolutely no difference. Those two resistors just stop the left and right outputs from shorting out from your audio source.

ok if it's not the values then could it be wiring? I have attached a few pics of how I wired everything up to my original post.




I have attached a few pics of how I wired everything up to my original post.

Don't do that. Please read How to use this forum, it tells you not to do that.

Not much you can tell from that jumble it is hard to see where things go. The input isn't right, you have two resistors in series between your audio and the input capacitor. Is it a mono audio input? If so you can get rid of those resistors altogether. What voltage is your audio output feeding into this circuit?

Code looks a bit ropy the constrain function looks wrong and there is so much commenting out it is hard to follow. There is also a random putting the strobe high. I would forget all the fancy stuff and just print out what you get.

However solder less bread board is notorious for not making reliable connections, I never use the stuff myself.

I have checked the input voltage by putting one of the measurement probes (from my multimeter) from the input and the other to the ground. I got about 0.071V which is not a lot at all. It is also a mono jack so I have removed the input resistors as well. I'm still getting the same problem, however. I'm using a function generator on my phone to send tones through the audio jack for testing. Do I need a pre-amp or an op-amp to increase my input signal? (Also sorry for editing the OG post)

I have checked the input voltage by putting one of the measurement probes (from my multimeter) from the input and the other to the ground.

Sorry but you can’t measure audio voltages like that, the meter will not show them. At best you will get an average but it will not be very accurate.

Do I need a pre-amp or an op-amp to increase my input signal?

Yes, I tend to use an op amp with a gain of about 10 to amplify the input from an Audio jack from an iPad.
I still think you need to look at your code and forget trying to subtract out noise until you get a good reading. Then you can worry about the noise, but at the moment that calculation is removing any signal you might see if it is “just” working.

I have tried running the chip with other code but it doesn’t seem to work either.it just keeps counting down from 1023 to 0. I thought it might be the chip so I bought another one from this website(Graphic Equalizer Display Filter - MSGEQ7 - Elmwood Electronics) but I get the same thing. This is another example code I found online:
int analogPin=0;
int strobePin=2;
int resetPin=3;
int ledred=9;
int ledblue=10;
int ledgreen=11;
int spectrumValue[7];
int filter=80;

void setup(){

pinMode(analogPin, INPUT);
pinMode(strobePin, OUTPUT);
pinMode(resetPin, OUTPUT);
pinMode(ledred, OUTPUT);
pinMode(ledblue, OUTPUT);
pinMode(ledgreen, OUTPUT);
digitalWrite(resetPin, LOW);
digitalWrite(strobePin, HIGH);

void loop(){

digitalWrite(resetPin, HIGH);
digitalWrite(resetPin, LOW);
for (int i=0;i<7;i++){
digitalWrite(strobePin, LOW);
spectrumValue_=constrain(spectrumValue*, filter, 1023);
spectrumValue=map(spectrumValue, filter,1023,0,255);
Serial.print(" ");
digitalWrite(strobePin, HIGH);

from this link:

Tru editing that post and put the code between the tags. It will make many people happy

That code is crap. You can tell by the "instructables" in the URL. These things are written by people with very little knowledge of what they are doing.

In this case it uses values in the "spectrumValue" array and yet in never puts any values in this array.

Also constraining an analogue read to values between 0 and 1023 is stupid because it can't possibly be outside those values.