The blog of a dedicated radio amateur and electronics enthusiast

"Having fun on the air and in the workshop - communicating and creating"

27 March 2019

Demonstrating I2C serial communications bus

Continuing the theme on serial interfaces from the last post, Inter Integrated Circuit, ( I2C ), is another type of serial communications interface, also called '2-wire bus', and is a very common peripheral interface. There is a master device, slave device(s), addressing and also a clock, making communication synchronous. Two connections are required; serial data ( SDA ) and serial clock ( SCL ).
In this post I demonstrate using I2C with a Silicon Labs Si5351 frequency synthesiser chip and a miniature 0.96" 128/64px two colour OLED display. Both have I2C interfaces but different addresses, hex60 and hex3C respectively, and so can be connected on the same bus. 

Master reads 1 byte from slave ( SCL = clock, SDA = data )
 The I2C protocol is more complex than that for RS232/485 in the previous post. The image above shows that a 4 byte transaction is required in order for the master to read in one byte of data from a slave, ( in this case Si5351 ). Compare to RS485 in the previous post.
The master is my usual micro-controller unit ( MCU ) development board which does have embedded I2C modules. I programmed it with my own firmware to enable and setup I2C to communicate with the Si5351 and OLED.
Top MCU, bottom L OLED, bottom R Si5351 board
Using I2C, I tested the OLED by turning the display on/off and switching between normal and reverse video. I configured the Si5351 on the purple coloured break-out board to generate two square-wave output signals, on my favourite frequency 137.7KHz in the 2190m amateur radio longwave band. See image immediately below.

Si5351 generates two separate output signals simultaneously