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

  • From: "Steve VK2SJA" <vk2sja@xxxxxxxxxxx>
  • To: minima@xxxxxxxxxxxxx
  • Date: Mon, 10 Feb 2014 14:47:44 +1100

Further suggestions.

Setup routine in radiono firmware. Enter setup by push and hold Function
button down while powering up. Setup routine outputs 10Mhz. Monitor
frequency with counter. Use VFO knob to change Xtal offset parameter value
up and down. User adjusts VFO up and down know until output exactly 10Mhz.
Then presses function button again. This writes the new Xtal value to
EEPROM.


> thomas, i have pulled the changes. i was just wondering if there should
be
> a caliberation procedure that is independent of the si570 marking. i
have
> used this in sweeperino. check
http://www.youtube.com/watch?v=qRNOp1F81i8
> a
> 1:10 onwards. It caliberates a number of things, but essentially, the
process is this:
> 1. Set the Si570 to 10 Mhz while using the hard-coded xtal value. 2.
Measure the frequency. If the crystal freq. is the same as hard coded
value, the output will be exactly at 10 Mhz. Let's consider the measured
frequency to be M. If M is higher, the crystal's actual frequency is
higher, if M is lower, it is lower.
> 3. The actual frequency of the internal crystal = (M/10,000,000) *
XTAL_FREQ.
> Here is what I suggest we can do:
> 1. Store the xtal frequency in the eeprom memory of the radiono, (so
that
> it does not forget it when powered down. (
> http://arduino.cc/en/Reference/EEPROM)
> 2. Using the serial port, send the newly calculated xtal frequency to
radiono. radiono overwrites the original.
> The serial port protocol has to be written. I am starting a separate thread
> for that.
> - f
> On Mon, Feb 10, 2014 at 8:15 AM, Steve VK2SJA <vk2sja@xxxxxxxxxxx>
wrote:
>> Great work Thomas. Thanks!
>> > 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: