Capturing i2c data

Forum for discussing PicoScope version 6 (non-automotive version)
Post Reply
Posts: 0
Joined: Fri Aug 20, 2010 5:24 pm

Capturing i2c data

Post by daubsi »

Dear all,

I am new to this forum and also a new user of my PicoScope 2204. I've never used any oscilloscope before and am learning.

At the moment I am hacking around with my Atmel ATmega eval board and learning things. Right know I'd like to access an LM75 via i2c.

I've written a small program for the MC and it works without problems and displays the correct temperature on a LCD. Now I wanted to capture the signal on the wire with my PicoScope in order to analyze and understand better what is happening. Please find the results of my capture as an attachment. The i2c bus is driven with 100kHz.

The probes are 2 Testec LF312 x1/x10 probes running at x1. They have been calibrated to a 1kHz square signal. I didn't know where to attach them the best way, so I attached two jump wires to the bus outlet on my board and clipped the probes to these wires. The ground clip is attached to a jump wire which is connected to GND of my board. Is this OK? If not, how should I improve the placement of the probes?
The captured signal looks like this
I've got the following questions:

a) Why is the clock signal (red) ranging from -300mV to +150mV? I'd assumed that the SCL would be also changing between 0V and 5V? It does not seem to be a display problem, because the trigger will also fire on -100mV. Also the curved form of the SCL irritates me. Is this the normal SCL representation when generated on a AVR microcontroller?

b) Why is are the spikes so spiky when a 1 is transmitted on SDA (blue)? I'd assumed that there would be a rather clear square wave? I've sampled with 10ms (mainly because I still wanted to *see* the result) up to the max of 2GS (and down to 20ns) but the outline did not change. Is this the normal outline when generated by an AVR microcontroller?

c) When I try to decode the i2c using the functions of PicoScope the data is incorrectly decoded (DeviceID=0x67, data bytes 2x0xFF). The address should be 0x90 + 1 for I2C_READ and the data bytes are obviously not 0xFF. As I said the program works correctly (device ID IS 0x90), so it is clearly wrong decoded, which can also be verified by manually looking at the wave and counting the bits. Why is this? What can I do to improve the decoding?

d) I used the "repeat" trigger on SCL to capture the data (I'm repeating my query of the LM75 over and over again). Is it possible to capture more than one window full of data per trigger? It seems as if as maximum one window/one buffer is captured per trigger. if my i2c data sequence contains more bytes and is longer this won't be sufficient. Can I instruct PicoScope to capture all 32 buffers for one trigger?

e) Are there any plans to also support UART decoding in UART anytime soon?

Thank you very much for your answers! Please keep in mind that I am still a beginner, so a rather easy to understand answer is much appreciated.


Posts: 8
Joined: Wed Jan 16, 2008 4:17 pm

Re: Capturing i2c data

Post by ffortino »


Your red clock line (Chan B) looks like it is AC coupled
Set Chan B to DC not AC

Also your data looks like it is inverted so a hex x6* = x9*

I hope it helps you

Post Reply