Electronics > Projects, Designs, and Technical Stuff

I2C data transfer issue - signal is probed

(1/2) > >>

HendriXML:
For outputting info on a oled display which uses the I2C protocol I had some stability issues.
https://www.eevblog.com/forum/projects/nerfo-meter-measuring-the-speed-of-nerf-darts/msg2717374/#msg2717374

To get it stable I reduced the clock speed to 50 Khz, but now I wanted to know why this matters.

So soldered some wires at the receiving end, just long enough for a probe hook.

When no data (In rest) is send, some stuff can be seen on the line. The same stuff could be seen at the VCC, so I added a 1000 uF and a ceramic, to try to eliminate that. Only for the VCC it did.

The other pictures are self explanatory.

What I would like to know is can this be improved? The wires to the display are one pair of power wires, and 2 loose ones for data. (The project thread has photo's of it) So a capacitive problem seems not likely.

And if it can't be improved, is the 200 Khz signal good enough, or should I drop the freq further?

HendriXML:
I went for the 100 Khz, faster doesn't really offer benefits.

From what I've read using a smaller pull-up resistor might be an option, however I did't want reverse engineer the tiny components/pcb of the display module.

I also went to 5V vcc, but that didn't make much difference in how the signal looked.

That makes me wonder where the pull-up resistors are. Do they use the internal pull-up resistors of the ATMega2560? Does the display also has its own? (Will measure that soon.)

Ice-Tea:
- That 'stuff' on the VCC bus shouldn't be there. I think you have an actual problem there somewhere

- It is obvious @400kHz that the pull-up is too-large in value. The pullup makes sure the line gets back to power supply voltage once released (slaves and masters High-Z). You can see there isn't enough time to return to the supply rail before a new period starts. Have you measured the resistance between SDA and/or SCL and the power rail? Nothing keeping you from adding a 4k7 or so on your end. Don't have to reverse eng anything.

HendriXML:
Maybe I should check the VCC of the Arduino board as well. It is has a daisy chained power source, and I don't see much of a bypass capacitor, so that might be the cause.

maginnovision:
I use 2.2k ohm pullups for 1Mb I²C and get a rise time of 192.7ns. Which works flawlessly. I would assume your display module has the pullups and they're probably 10K. Internal pin pullups are usually too high a value to be effective. Adding a 4.7K like Ice-Tea said is probably a good idea at least to see how it affects the signal. I also wouldn't be using high res to check those signals. Use normal or peak detect.

Navigation

[0] Message Index

[#] Next page

There was an error while thanking
Thanking...
Go to full version
Powered by SMFPacks Advanced Attachments Uploader Mod