tfabris / BlueGigaEmpeg

Arduino module and daughter board to convert the empeg Car MP3 player to Bluetooth output.
GNU General Public License v3.0
0 stars 0 forks source link

Intermittent crackling static on I2S developed recently. #69

Closed tfabris closed 6 years ago

tfabris commented 6 years ago

Yesterday the I2S audio developed an occasional intermittent crackle sound. Like a digital version of dust on an LP record. This is after weeks of perfect operation.

The crackles are each a single digital "pop" sound that happens approximately once every 10 seconds, but it's very random, so sometimes 30 seconds or more will go by without a crackle, and sometimes you will get several crackles over the span of a few seconds.

The crackles happen in either the left channel or the right channel and it's random as to which channel they occur on. This tells me that it is a digital bitstream error that is very very small and localized, perhaps a single bit error which causes a given byte of audio data to have the wrong number in it, causing the pop.

Originally I had everything working fine on my Rev3 PCB for the BlueGigaEmpeg with the 7.5v Pololu regulator. Everything worked fine for weeks without crackles. Then I got the Rev6 boards in for BlueGigaEmpeg and soldered one together. It worked perfectly for a day with no crackles. Then I left it in the car overnight, and when I started the car up again the next morning there were crackles.

The crackles are mostly noticeable when the music is quiet, but, they are there all the time as long as there is digital music data to send. If you turn the volume on the Empeg front panel all the way down to -infinity (ie all sound is all zero bytes) then the crackles go away. But as soon as there's even the slightest amount of audio data to transmit, the crackles come back.

Best repro steps are:

I have checked all voltages and done a ton of diagnosis, including ruling out the Empeg, the wiring, the Arduino, and my new Rev 6 board. My current theory is that either the chip or my current Betz board is going bad.

This is troubling because I've fried chips before, and I thought I had solved all those problems. Another Betz board is on its way, and if that one doesn't crackle then I'll have to think about whether I need to look at power issues AGAIN.

tfabris commented 6 years ago

Tried all of these things, which did NOT fix the issue:

What does fix the crackling but does not help:

TO DO:

mlord commented 6 years ago

Could it be a grounding issue? Eg.. run a wire from GND on the empeg (eg, the chassis) to GND on the Betz board, and see if problem goes away.

tfabris commented 6 years ago

Thanks @mlord, I will definitely try that! I have high hopes for putting the C16 470uf cap back as well, I'm about to try that right now.

tfabris commented 6 years ago

Tried the following, unfortunately did not work:

Tried the following which seemed to maaaaaaybe help:

TO DO:

tfabris commented 6 years ago

Works:

This tells me that the problem is some kind of interference, but what/how. Why did the R3 board have less of it than the R6 board?

Things to think about:

tfabris commented 6 years ago

Moving the SCK wire closer to the Arduino produces some pops.

tfabris commented 6 years ago

Moving WS wire closer to the Arduino did not immediately produce any pops.

tfabris commented 6 years ago

Moving the SD wire closer to the Arduino did not immediately produce any pops.

Theory:

tfabris commented 6 years ago

Tried:

Stumped, because the act of printing an entirely new PCB with a theoretical design is a bit of an outlay of time and expense and I'd hate to do all that and then not have it be fixed.

tfabris commented 6 years ago

Tried:

Consider:

tfabris commented 6 years ago

To do:

mlord commented 6 years ago

Good work. Google this: "isolation routing", and try applying it to the SCLK line (and others if you can). I think sn00p even posted some nice photos of such on the BBS (EDIT: found the post, but photos are gone..).

tfabris commented 6 years ago

Hey @mlord what do you think of this? This document here.... http://www.ti.com/lit/an/szza009/szza009.pdf ... says something interesting:

"In the case of an I/O pin in the input mode, the capacitance of the unused output transistors transfers noise from both power rails to the pin. The amount of noise is based on the impedance of whatever is connected to the pin. The higher the impedance, the more noise comes out of the microcomputer. That is why unused inputs should be tied to the lowest-impedance rail: ground, by direct short, if possible."

Do you think it would be worth it to try simply grounding all the unused analog and digital I/O pins on the Arduino? Right now I just leave them untouched.

I could also, in the code (i.e., no physical board changes), change all I/O pins from their default setting of "INPUT" to the alternative "INPUT_PULLUP", but I don't know if that would help. I was worried that changing them all to pullups would require more overall power draw for the Arduino board.

tfabris commented 6 years ago

I'm reading some stuff on the internet such as this... https://arduino.stackexchange.com/questions/574/should-all-unused-analog-input-ports-be-tied-to-ground-for-accurate-a2d-measurem https://forum.arduino.cc/index.php?topic=57067.0 http://forum.arduino.cc/index.php?topic=15495.0 ... which says that setting the pins to either "INPUT_PULLUP" or setting them to "OUTPUT" and "LOW" (essentially pulling them to ground) will reduce noise emitted by the Arduino. The Pullup uses a small amount of energy, Output/Low uses the least energy. Does that sound right to you, @mlord?

tfabris commented 6 years ago

To Do:

mlord commented 6 years ago

You are not using the A2D (analog to digital sampling) pins, so there is no need to fuss much about those particular pins. But setting all of the unused ones to INPUT_PULLUP shouldn't hurt -- the internal pull-up is 10's of K-Ohms, so the power draw/waste ought to be pretty small.

tfabris commented 6 years ago

Tried the following, none fixed the issue:

I'm not sure if holding the Arduino reset line to ground truly sleeps the chip or not, so more investigation is needed there.

tfabris commented 6 years ago

Tried, did not fix the issue:

tfabris commented 6 years ago

Tried, based on @mlord suggestion:

Result: With 2.33k of resistance (doubled up 4.7k's) there was a significant reduction in pops, though not completely fixed.

TO DO:

tfabris commented 6 years ago

Tried:

Result:

To do:

tfabris commented 6 years ago

Closing issue. 1.55k resistors seems to work and I have 1.5k on the way. Happy dance!