| 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 |