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