Sunday 6 April 2014

Arduino and the Si570

I've been wanting to experiment with replacing my little AD9850 DDS modules with the Si570 device. Not out of any sense of dissatisfaction with the former - more out of a spirit of adventure and in preparation for future experiments with extended bandwidth. The big problem with the Si570 - apart from cost - is the package.

I decided to solve the problem by mounting the awkward package on one of my little plug in modules, which start with a small printed circuit board...

Here are a few of the "carrier" PCBs, knocked up yesterday in my "back yard fab", along with an Si570

I got out my little USB microscope and did the best I could with my soldering iron, failing eyesight and shaking hands- here's a close-up shot from the microscope part-way through assembly...

Once the chip was on the carrier, I added some header pins to serve as "legs" for the module, which acts as an 8 pin DIL "wide" (i.e. 0.6 inch) package, which is infinitely easier for me to handle (and, indeed, see) than the original bare device...

Now - I just need to program the thing.

I have driven an Si570 before from a PIC (in my original multi-mode beacon) - that was a pretty brute-force piece of coding. This time I wanted something a little more elegant, so I looked around on the 'net.

The first fruit of that search was the ArduinoSi570 Library , by Gabriel Fournier.

I downloaded that library, but could not get it to compile, either with the provided example sketch or with my own simplified examples. Gabriel quickly and graciously answered an email asking for help - but his suggestion was that I should find another library! So I searched some more...

Fortunately, that search soon reminded me of Farhan's new Minima transceiver, and I found the "Radiono" code for it, which includes library resources for controlling the Si570. I downloaded that library and soon had modified the code (which is intended for the ATmega328P) to run on an Arduino MEGA, which allowed me to confirm that my new Si570 module was working correctly...

My real interest was in getting the new Si570 module running under the control of the Arduino DUE and - I'm ashamed to say - I still haven't succeeded in that goal.

My modified program now compiles and I can see the I2C activity between the DUE and the Si570, but they are not yet successfully communicating.

You can see how much I'm struggling by the presence of an empty coffee cup in the frame below - things are obviously bad...

I guess it won't be long before we have Si570-derived RF for the Arduino SDR - but not today!

...-.- de m0xpd


  1. Hi,

    "Si570-Based Universal HAM Radio VFO"( see link below) is a nice project involving the ARM Processor and the Si540.

    Below link leads to a Si570 Library. Since you are in Arduino Due , it will not be difficult to port the same lib to Arduino.




    1. Thanks for this Vinod - you are right.
      Whilst I do some ARM programming at work (most recently on the STM32F4), I've some reasons to want to keep this project "Arduino" in flavour as much as possible. Therefore I'd like to see the Arduino core libraries like Wire doing their job properly on the Due!

  2. Hi Paul
    I have been following you Due Adventure and I am also contemplating using the I2C on my newly ordered Due as well. I have been reading about various I2C issues and thought this link <> might be of interest if you haven't already came across it. Good luck with finding a solution.

    Cecil NA6RF

    1. Cecil - Many thanks for your comment but (as you see) the link didn't arrive. Please can you re-send (or contact me via email to add it - see etc).

  3. Sorry, here is the link to the Arduino DUE forum.


  4. Hi Paul
    You my know this But....Have a look at G0MGX Blog of Thursday 23 Jan,14 about 5Vmega and 3.3V si570 pullup resistors, it may help.
    Mark G6ZQS

  5. Hi Paul
    I am still looking for info regarding the Due board I2c issues. Seems like Wires/TWI has caused lots of folks problems. I came across SoftI2CMaster library to eliminate Wires by using I/O port pins directly. There are examples that are reported to run on Mega boards, but no mention of the Due. Take a look at the links below.

    Hope this looks like it can be useful to get around the Wires/TWI issues.

    Cecil NA6RF

  6. Well, it was a good idea until I realized that Softi2cMaster uñderlying code is written in assembly for the AVR micros, not the Dues's ARM.


  7. Hi Paul,

    I just noticed a new release of the Arduino Due software version 1.5.7 Beta. In the accompanying release notes is the following excerpt:

    sam: Fix to Wire::endTransmisson() return value (bluesign2k)
    sam: Fix to Wire usage of TWI status register (bluesign2k)

    Hopefully this clears up the I2C issues for the Due.