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
Message Index
Next page
There was an error while thanking
Thanking...

Go to full version
Powered by SMFPacks Advanced Attachments Uploader Mod