Controlling The Si5351 Via USB
This project is actually a repackaging and expansion of a previous one, the I2CStick. It’s intended to provide a USB interface for control of an Si5351. I put it together as part of another project and thought it might be of interest to others.
The interface schematic is shown below. The original I2CStick was a USB to I2C interface based on SparkFun’s AVR Stick. However, SparkFun has retired this product and I no longer have any on hand.
Instead I used a 3.3V AdaFruit Trinket. Since the Trinket hardware is so similar to that of the AVR Stick I was able to port the firmware with little trouble. Mostly it involved redefining the pins used for the USB interface and updating the firmware so it could be built using the Arduino compiler.
The control software consists of two parts, both written in Python. The first is a port of the original .NET I2CStick software.
The second is module I’ve named Py5351, which provides basic control of the Si5351. Clocks 0 and 1 are connected to PLLA. They’re intended to provide quadrature signals at a common frequency. Clock 2 is connected to PLLB to provide an independent signal source.
Using The Interface
There’s really not much to explain. The picture below shows the prototype build on a small piece of stripboard.
All software is available in my GitHub repository. Once you’ve pulled down the project, start the Arduino IDE and load the Arduuino library and code. Compile, and push the firmware to a 3.3V Trinket. Be sure to use a 3.3V Trinket since it’s providing the voltage for the Si5351, which is a 3.3V part.
Close the Arduino IDE, reset the Trinket, and wait for it to complete the bootloader sequence. Once the LED stops blinking you can issue commands to the Si5351 using the Py5351 module or directly read and write registers via the I2C module.
While the focus here is on providing a USB interface for the Si5351, the Trinket code along with the I2C control software (either the Python or original .NET version) can be adapted for any project requiring a USB to I2C interface. I think the extra power provided by control from a laptop and the convenience of a USB interface will lend itself to more complex projects, so I hope you find it useful.