[minima] Re: Auto-calibration of the Si570 + some refactoring

  • From: farhanbox@xxxxxxxxx
  • To: minima@xxxxxxxxxxxxx
  • Date: Tue, 11 Feb 2014 08:45:56 +0000

Steve, a frequency counter is not a must. You can accurately set it with a 10 
MHz receiver. It might even be far more accurate if you can beat it to WWV.

Sent from BlackBerry® on Airtel

-----Original Message-----
From: "Steve VK2SJA" <vk2sja@xxxxxxxxxxx>
Sender: minima-bounce@xxxxxxxxxxxxx
Date: Tue, 11 Feb 2014 19:07:40 
To: <minima@xxxxxxxxxxxxx>
Reply-To: minima@xxxxxxxxxxxxx
Subject: [minima] Re: Auto-calibration of the Si570 + some refactoring

Some random thoughts:-

Two calibration methods exist.

1. Manually enter the start-up frequency. Software uses this value along
with additional values retrieved from the Si570 chip to calculate the
actual reference crystal value.

2. Instruct Si570 to output known frequency, say 10Mhz and adjust up and
down the software crystal reference value until the output on a frequency
counter is exactly 10Mhz.

Both methods have some Pros and Cons.

Method 1:-
You don't need a Frequency Counter
You need to know your Si570 start-up frequency (might prove awkward
finding this out without a counter - negates not needing one)
Accuracy is good. But Tomas's own results seem to show that +/- 300 Hz
might not be an unreasonable expectation.

Method 2:-
You DO require a frequency counter of some sort.
Accuracy will only be as good as the counter.
You don't need to know the Si570 start-up frequency.
It is probably reasonable to expect errors of only +/- 3 Hz after calibration

Not every person owns a Frequency Counter. I will even allow that it is
possible that someone building a Minima may not own one.

So I would actually suggest having both methods available via a Firmware
set-up routine. Since most of the extra code would deal with changing a
value via the VFO pot. And both methods require this. A significant
portion of the code should be able to be shared between both methods.

I'm thinking something along the lines of:-

Press and hold Function button while powering up Minima to enter setup
routine. Use VFO knob to cycle through setup options. Press enter to
select the one you want. One option can be to exit setup. Something like
this:-

Setup
Calibrate 1 -> Calibrate 2 -> Other Options we haven't thought of yet ->
Quit -> Back to Calibrate 1

When you enter either Calibrate 1 or 2 the user interaction is much the
same. With one you are adjusting the crystal reference frequency up and
down until you get exactly 10Mhz on the counter. With the other you are
adjusting the value of the start-up frequency up or down until it matches
your known Si570 start-up frequency. In both cases you press the Function
button to accept and save the new value. Which returns to the top level
setup menu.

There is even a logical progression in doing both calibration routines in
order 1 and 2. While entirely non-essential Calibrate 2 could use the
calculated value produced by Calibrate 1 as its starting point. Which
would put it very close to the correct value.


Anyway just some random thoughts out loud.

73, Steve.









> Thomas,
>
> Just to be clear, what I am suggesting is that the calibration
> procedure would initially present on the display a 'common'
> start-up frequency for the Si570.  As an example, the CMOS
> Si570 that is sold by KM5H
> http://km5h.softrockradio.org/index.php?route=product/product&product_id=49
> has a start-up frequency of 56.32 MHz.  If it is agreed upon that
> that start-up frequency is commonly used, then that would be the
> frequency value initially presented to the operator.  If the
> Si570 actually being used has a different start-up frequency,
> then the operator can use the potentiometer to change the initial,
> value to the actual value.  For example, the CMOS Si570 that I
> have has an initial start-up frequency of 10 MHz, so I would
> adjust the frequency setting displayed accordingly prior to
> pushing the function button to accept the value displayed.  I
> hope this makes sense to you.
>
> 73,
>
> Mac AE5PH
>
> On 02/10/2014 12:24 PM, Thomas Sarlandie wrote:
>> Dan,
>>
>> Latest version of my code will always be available in my github
>> repository:
>> https://github.com/sarfata/radiono
>>
>> The code I was mentioning yesterday has already been merged by Farhan
>> and so you will get all my changes in the official version which is
>> available here:
>> https://github.com/afarhan/radiono
>>
>> The rest of the discussion is about what is the best way to calibrate:
>>  1 - Using factory calibration settings in the chip - but we need a
>> way for the user to find out this frequency and give it to the program
>> (maybe through a menu like what Mac suggested)
>>  2 - Starting with no calibration and a fixed output frequency
>> (10Mhz). Ask the user to adjust until it is perfectly 10mhz.
>>
>> Both method will play nicely with my changes. Nothing was lost ;)
>>
>> best,
>> thomas
>>
>>
>> On Mon, Feb 10, 2014 at 9:50 AM, Dan Reynolds <on30ng@xxxxxxxxx
>> <mailto:on30ng@xxxxxxxxx>>wrote:
>>
>>     Thomas, I would still like to see your code if possible.
>>
>>
>>     73
>>     Dan -- KB9JLO
>>     https://sites.google.com/site/on30ng/
>>
>>
>>     On Sun, Feb 9, 2014 at 8:27 PM, Thomas Sarlandie
>>     <thomas@xxxxxxxxxxxxx <mailto:thomas@xxxxxxxxxxxxx>>wrote:
>>
>>         Hi everyone!
>>
>>         Spent some time this week-end on the Radiono software. I found
>>         out earlier this week that my Si570 had a very large error
>>         that grew linearly with frequency. We quickly found out that
>>         each module is different and you need to use calibration
>>         information that is saved in the module. The current source
>>         code has Farhan's si570 calibration hardcoded in. That will
>>         most likely not work for you.
>>
>>         I have updated the Radiono source code to automatically get
>>         the calibration information and calculate the crystal
>>         frequency every time we start the program. The only
>>         information that needs to be defined in the source code is the
>>         default frequency programmed by the factory. In my case it was
>>         56.320 but your mileage may vary.
>>
>>         There are two ways to find this frequency:
>>          - Spec: Look on the marking on your Si570 (mine says
>>         CAC000141) and lookup some tables online to find which
>>         frequency corresponds to your marking (I cant find this table,
>>         if someone has it, please share!)
>>          - Experimental: just remove the Arduino and apply power to
>>         the control board. Measure the frequency at the output of the
>>         Si570.
>>
>>         I have updated the wiki:
>> http://www.hfsignals.org/index.php/Si570
>>
>>         The updated source code has been submitted to Farhan in a
>>         pull-request:
>>         https://github.com/afarhan/radiono/pull/4
>>
>>         Full list of changes:
>>
>>         Split the Si570 code in a separate class.
>>
>>         In the Si570 class:
>>         * Use the factory-calibrated output frequency to automatically
>>         calculate the internal crystal frequency and use that instead
>>         of hard coded values.
>>         * During initialization detect errors talking to the Si570.
>>         * Use multi-bytes i2c reads and writes when possible (ie:
>>         read/write multiple bytes without re-starting a transaction).
>>         Only works for read/writes in consecutive registers.
>>         * Use types with explicit size where that makes sense (uint8_t
>>         instead of char, uint64_t, etc)
>>         * Added some debugging on the serial console through a "debug"
>>         function
>>
>>         In the main sketch:
>>         * Show a message on the LCD if the Si570 is unreachable.
>>         * Initialize the serial port for debugging
>>         * Fix some compilation warnings with string litterals being
>>         casted to char*
>>         * Removed unused variables
>>
>>
>>         And now, back to the soldering iron!
>>
>>         73,
>>         thomas
>>
>>
>>
>
>



Other related posts: