Demonic waveforms on bit banger port above 16K hz

I am new to the Arduino universe, but not to computing in general and I'm looking in more detail about the hardware side of things.

To facilitate debugging I intend to use one of the ubiquitous tm1637 based 4 digit displays. It can display two hex digits and that is enough to get some reasonable information out of the chip in a pinch.

In any case I have two questions that are easier to ask then to investigate.

First, the chip is not I2C compatible even though it was shipped as such - Trust no one - but is I2C like.

Without looking at the hardware I2C and serial hardware, wouldn't that be better to use than a standard bit banger driver that is out there?

Second: I've put the transmit and clock pins on a new scope to learn how this new tool works, and was surprised to see that the output was a saw toothed wave on the clock and saw toothed pulses on the data line.

Slowing the output timing squared them up a bit or a lot depending on how slow you make the line voltage transitions.

It is if there is a coupling capacitor tying both lines to ground.

Something in the 200uF range.

I've looked at the TM1637 and note that the input capacitance (If I'm reading the data sheet correctly) is something like 10pf. Way too small to produce the effect I'm seeing.

Here are two images that show the output of the original driver, and my diver running at a slower clock rate. Well Similar outputs since I don't see a way to include images here.


Hmmm. Lets try again with the images


The builder of the particular set of displays that I have (nicely built by the way) has placed some capacitors on the board that tie both the clock and data lines to ground.

I estimate the value at 1.7 microfarad, and that is enough to limit the input bit rate to around 20K hz.

I presume this was done to reduce the likelihood of noise on the signal lines, and that not much thought was given to the data transmission rate.

I think I will remove them.

1.7 microfarad is a large amount of capacitance to put on a signal line. Are you sure you aren’t misinterpreting it’s value?

Then again, if it’s some cheap chinese POS I guess anything’s possible. Some of the stuff Big Clive tears down from ebay is just horrific.

The chip’s not I2C anyway, just a generic serial interface. You’re better off using shiftOut() or SPI.transfer().

The datasheet for the TM1637 has an example circuit with 100pF caps on the clock and data lines,
some clown has substituted 100nF or worse, probably not knowing the difference between pico and nano...