time-nuts@lists.febo.com

Discussion of precise time and frequency measurement

View all threads

SR620 TCXO calibration

DC
David C. Partridge
Mon, Jun 19, 2017 2:35 PM

I think I'm being dense, but I can't work out how to get this thing to
display CalDat 04.  I have managed to get it to display CalDat 0 value, but
can't work out how to step through to view adjust CalDat 04.

Once I do  get there, how do I manage to adjust the CalDat value while
observing the output of measuring my GPSDO 10MHz output at the same time?

Please could someone put me out of my misery?

Thanks
Dave

I think I'm being dense, but I can't work out how to get this thing to display CalDat 04. I have managed to get it to display CalDat 0 value, but can't work out how to step through to view adjust CalDat 04. Once I do get there, how do I manage to adjust the CalDat value while observing the output of measuring my GPSDO 10MHz output at the same time? Please could someone put me out of my misery? Thanks Dave
DD
Dr. David Kirkby (Kirkby Microwave Ltd)
Mon, Jun 19, 2017 8:03 PM

On 19 June 2017 at 15:35, David C. Partridge david.partridge@perdrix.co.uk
wrote:

I think I'm being dense, but I can't work out how to get this thing to
display CalDat 04.  I have managed to get it to display CalDat 0 value,
but
can't work out how to step through to view adjust CalDat 04.

Once I do  get there, how do I manage to adjust the CalDat value while
observing the output of measuring my GPSDO 10MHz output at the same time?

Please could someone put me out of my misery?

Thanks
Dave

I can't recall how you step the data, but it must be in the manual.

I wrote a bit of C code that attempts to correct the timebase, if 10 MHz is
put into channel A. It measures the frequency on channel A, then adjust the
crystal frequency until the frequency is 10 MHz. That's probably not the
best way on a TI counter, but seems to work reasonably well - at least any
errors are small compared to the fact that only integer values may be
programmed into the calbytes. Hence it seems impossible to fully correct
this.

One issue is that frequency shift is non-linear with respect to the
calbytes. So the approach I took was to shift the value by 4, see the
effect of the shift, and then use that to try to work out a suitable
correction.

Below is the bit of C-code. If you want the complete set of code, which
reads data from the SR620, I can send you it. I don't think it is well
commented, and in any case has only been tested on Solaris. It will only
work with an NI card, but I would expect it to work under

case SETTIMEBASE:
  output(device_descriptor,"MODE3;"); /* Set frequency mode */
  output(device_descriptor,"SRCE0;");  /* Measure source A */
  do {
    calbyte_4=read_calbyte(device_descriptor,4);
    frequency=read_frequency(device_descriptor);
    frequency_error=frequency-1e7;
    if (fabs(frequency_error) < 0.0008)  {
      printf("GOOD ENNOUGH frequency error=%lf\n\n",frequency_error);
      exit(0);
    }
    printf("cb4=%d f=%lf\n",calbyte_4, frequency);

    if(frequency_error > 0)
      set_calbyte(device_descriptor, 4, calbyte_4+3);
    else
      set_calbyte(device_descriptor, 4, calbyte_4-3);

    printf("Changed calbyte 4 a little cb4=%d f=%lf\n",calbyte_4,

frequency);
new_frequency=read_frequency(device_descriptor);
new_frequency_error=new_frequency-1e7;

    if(frequency_error > 0)
      frequency_change_per_calbyte=(new_frequency-frequency)/3; /* in

Hz/calbyte /
else
frequency_change_per_calbyte=-(new_frequency-frequency)/3; /
in
Hz/calbyte */

printf("frequency_change_per_calbyte=%lf\n",frequency_change_per_calbyte);
/* Do a correction of half the value calculated */
calbyte_change=-(int)
((new_frequency_error/frequency_change_per_calbyte)+0.5);

    /* Attempt to correct the frequency */
    set_calbyte(device_descriptor, 4, calbyte_4+calbyte_change);


    /* Read the frequency, then exit if within an acceptable tollerence

*/
frequency=read_frequency(device_descriptor);
frequency_error=frequency-1e7;
calbyte_4=read_calbyte(device_descriptor,4);
printf("new cb4=%d frequency error=%lf\n\n",calbyte_4,
frequency_error);
} while (fabs(frequency_error) > 0.0008);
exit(0);
break;

On 19 June 2017 at 15:35, David C. Partridge <david.partridge@perdrix.co.uk> wrote: > I think I'm being dense, but I can't work out how to get this thing to > display CalDat 04. I have managed to get it to display CalDat 0 value, > but > can't work out how to step through to view adjust CalDat 04. > > Once I do get there, how do I manage to adjust the CalDat value while > observing the output of measuring my GPSDO 10MHz output at the same time? > > Please could someone put me out of my misery? > > Thanks > Dave > I can't recall how you step the data, but it must be in the manual. I wrote a bit of C code that attempts to correct the timebase, if 10 MHz is put into channel A. It measures the frequency on channel A, then adjust the crystal frequency until the frequency is 10 MHz. That's probably not the best way on a TI counter, but seems to work reasonably well - at least any errors are small compared to the fact that only integer values may be programmed into the calbytes. Hence it seems impossible to fully correct this. One issue is that frequency shift is non-linear with respect to the calbytes. So the approach I took was to shift the value by 4, see the effect of the shift, and then use that to try to work out a suitable correction. Below is the bit of C-code. If you want the complete set of code, which reads data from the SR620, I can send you it. I don't think it is well commented, and in any case has only been tested on Solaris. It will only work with an NI card, but I would expect it to work under case SETTIMEBASE: output(device_descriptor,"MODE3;"); /* Set frequency mode */ output(device_descriptor,"SRCE0;"); /* Measure source A */ do { calbyte_4=read_calbyte(device_descriptor,4); frequency=read_frequency(device_descriptor); frequency_error=frequency-1e7; if (fabs(frequency_error) < 0.0008) { printf("GOOD ENNOUGH frequency error=%lf\n\n",frequency_error); exit(0); } printf("cb4=%d f=%lf\n",calbyte_4, frequency); if(frequency_error > 0) set_calbyte(device_descriptor, 4, calbyte_4+3); else set_calbyte(device_descriptor, 4, calbyte_4-3); printf("Changed calbyte 4 a little cb4=%d f=%lf\n",calbyte_4, frequency); new_frequency=read_frequency(device_descriptor); new_frequency_error=new_frequency-1e7; if(frequency_error > 0) frequency_change_per_calbyte=(new_frequency-frequency)/3; /* in Hz/calbyte */ else frequency_change_per_calbyte=-(new_frequency-frequency)/3; /* in Hz/calbyte */ printf("frequency_change_per_calbyte=%lf\n",frequency_change_per_calbyte); /* Do a correction of half the value calculated */ calbyte_change=-(int) ((new_frequency_error/frequency_change_per_calbyte)+0.5); /* Attempt to correct the frequency */ set_calbyte(device_descriptor, 4, calbyte_4+calbyte_change); /* Read the frequency, then exit if within an acceptable tollerence */ frequency=read_frequency(device_descriptor); frequency_error=frequency-1e7; calbyte_4=read_calbyte(device_descriptor,4); printf("new cb4=%d frequency error=%lf\n\n",calbyte_4, frequency_error); } while (fabs(frequency_error) > 0.0008); exit(0); break;
DD
Dr. David Kirkby (Kirkby Microwave Ltd)
Mon, Jun 19, 2017 8:21 PM

I should have added, mine had an OCXO - I just see you had a TCXO.

I don't have the SR620 any more. I swapped it, along with a HP 4.2 GHz
signal generator, for an HP 4291B impedance and material analyzer.

Dave

I should have added, mine had an OCXO - I just see you had a TCXO. I don't have the SR620 any more. I swapped it, along with a HP 4.2 GHz signal generator, for an HP 4291B impedance and material analyzer. Dave
DC
David C. Partridge
Mon, Jun 19, 2017 8:41 PM

actually I think mine also has an OCXO

D.

-----Original Message-----
From: time-nuts [mailto:time-nuts-bounces@febo.com] On Behalf Of Dr. David Kirkby (Kirkby Microwave Ltd)
Sent: 19 June 2017 21:21
To: Discussion of precise time and frequency measurement
Subject: Re: [time-nuts] SR620 TCXO calibration

I should have added, mine had an OCXO - I just see you had a TCXO.

I don't have the SR620 any more. I swapped it, along with a HP 4.2 GHz signal generator, for an HP 4291B impedance and material analyzer.

Dave


time-nuts mailing list -- time-nuts@febo.com To unsubscribe, go to https://www.febo.com/cgi-bin/mailman/listinfo/time-nuts
and follow the instructions there.

actually I think mine also has an OCXO D. -----Original Message----- From: time-nuts [mailto:time-nuts-bounces@febo.com] On Behalf Of Dr. David Kirkby (Kirkby Microwave Ltd) Sent: 19 June 2017 21:21 To: Discussion of precise time and frequency measurement Subject: Re: [time-nuts] SR620 TCXO calibration I should have added, mine had an OCXO - I just see you had a TCXO. I don't have the SR620 any more. I swapped it, along with a HP 4.2 GHz signal generator, for an HP 4291B impedance and material analyzer. Dave _______________________________________________ time-nuts mailing list -- time-nuts@febo.com To unsubscribe, go to https://www.febo.com/cgi-bin/mailman/listinfo/time-nuts and follow the instructions there.
DC
David C. Partridge
Mon, Jun 19, 2017 8:43 PM

Yes please. ...

-----Original Message-----
From: time-nuts [mailto:time-nuts-bounces@febo.com] On Behalf Of Dr. David Kirkby (Kirkby Microwave Ltd)
Sent: 19 June 2017 21:03
To: Discussion of precise time and frequency measurement
Subject: Re: [time-nuts] SR620 TCXO calibration

On 19 June 2017 at 15:35, David C. Partridge david.partridge@perdrix.co.uk
wrote:

I think I'm being dense, but I can't work out how to get this thing to
display CalDat 04.  I have managed to get it to display CalDat 0 value,
but
can't work out how to step through to view adjust CalDat 04.

Once I do  get there, how do I manage to adjust the CalDat value while
observing the output of measuring my GPSDO 10MHz output at the same time?

Please could someone put me out of my misery?

Thanks
Dave

I can't recall how you step the data, but it must be in the manual.

I wrote a bit of C code that attempts to correct the timebase, if 10 MHz is put into channel A. It measures the frequency on channel A, then adjust the crystal frequency until the frequency is 10 MHz. That's probably not the best way on a TI counter, but seems to work reasonably well - at least any errors are small compared to the fact that only integer values may be programmed into the calbytes. Hence it seems impossible to fully correct this.

One issue is that frequency shift is non-linear with respect to the calbytes. So the approach I took was to shift the value by 4, see the effect of the shift, and then use that to try to work out a suitable correction.

Below is the bit of C-code. If you want the complete set of code, which reads data from the SR620, I can send you it. I don't think it is well commented, and in any case has only been tested on Solaris. It will only work with an NI card, but I would expect it to work under

case SETTIMEBASE:
  output(device_descriptor,"MODE3;"); /* Set frequency mode */
  output(device_descriptor,"SRCE0;");  /* Measure source A */
  do {
    calbyte_4=read_calbyte(device_descriptor,4);
    frequency=read_frequency(device_descriptor);
    frequency_error=frequency-1e7;
    if (fabs(frequency_error) < 0.0008)  {
      printf("GOOD ENNOUGH frequency error=%lf\n\n",frequency_error);
      exit(0);
    }
    printf("cb4=%d f=%lf\n",calbyte_4, frequency);

    if(frequency_error > 0)
      set_calbyte(device_descriptor, 4, calbyte_4+3);
    else
      set_calbyte(device_descriptor, 4, calbyte_4-3);

    printf("Changed calbyte 4 a little cb4=%d f=%lf\n",calbyte_4, frequency);
    new_frequency=read_frequency(device_descriptor);
    new_frequency_error=new_frequency-1e7;

    if(frequency_error > 0)
      frequency_change_per_calbyte=(new_frequency-frequency)/3; /* in Hz/calbyte */
    else
      frequency_change_per_calbyte=-(new_frequency-frequency)/3; /* in Hz/calbyte */

printf("frequency_change_per_calbyte=%lf\n",frequency_change_per_calbyte);
/* Do a correction of half the value calculated */
calbyte_change=-(int)
((new_frequency_error/frequency_change_per_calbyte)+0.5);

    /* Attempt to correct the frequency */
    set_calbyte(device_descriptor, 4, calbyte_4+calbyte_change);


    /* Read the frequency, then exit if within an acceptable tollerence */
    frequency=read_frequency(device_descriptor);
    frequency_error=frequency-1e7;
    calbyte_4=read_calbyte(device_descriptor,4);
    printf("new cb4=%d frequency error=%lf\n\n",calbyte_4, frequency_error);
  } while (fabs(frequency_error) > 0.0008);
  exit(0);
break;

time-nuts mailing list -- time-nuts@febo.com To unsubscribe, go to https://www.febo.com/cgi-bin/mailman/listinfo/time-nuts
and follow the instructions there.

Yes please. ... -----Original Message----- From: time-nuts [mailto:time-nuts-bounces@febo.com] On Behalf Of Dr. David Kirkby (Kirkby Microwave Ltd) Sent: 19 June 2017 21:03 To: Discussion of precise time and frequency measurement Subject: Re: [time-nuts] SR620 TCXO calibration On 19 June 2017 at 15:35, David C. Partridge <david.partridge@perdrix.co.uk> wrote: > I think I'm being dense, but I can't work out how to get this thing to > display CalDat 04. I have managed to get it to display CalDat 0 value, > but > can't work out how to step through to view adjust CalDat 04. > > Once I do get there, how do I manage to adjust the CalDat value while > observing the output of measuring my GPSDO 10MHz output at the same time? > > Please could someone put me out of my misery? > > Thanks > Dave > I can't recall how you step the data, but it must be in the manual. I wrote a bit of C code that attempts to correct the timebase, if 10 MHz is put into channel A. It measures the frequency on channel A, then adjust the crystal frequency until the frequency is 10 MHz. That's probably not the best way on a TI counter, but seems to work reasonably well - at least any errors are small compared to the fact that only integer values may be programmed into the calbytes. Hence it seems impossible to fully correct this. One issue is that frequency shift is non-linear with respect to the calbytes. So the approach I took was to shift the value by 4, see the effect of the shift, and then use that to try to work out a suitable correction. Below is the bit of C-code. If you want the complete set of code, which reads data from the SR620, I can send you it. I don't think it is well commented, and in any case has only been tested on Solaris. It will only work with an NI card, but I would expect it to work under case SETTIMEBASE: output(device_descriptor,"MODE3;"); /* Set frequency mode */ output(device_descriptor,"SRCE0;"); /* Measure source A */ do { calbyte_4=read_calbyte(device_descriptor,4); frequency=read_frequency(device_descriptor); frequency_error=frequency-1e7; if (fabs(frequency_error) < 0.0008) { printf("GOOD ENNOUGH frequency error=%lf\n\n",frequency_error); exit(0); } printf("cb4=%d f=%lf\n",calbyte_4, frequency); if(frequency_error > 0) set_calbyte(device_descriptor, 4, calbyte_4+3); else set_calbyte(device_descriptor, 4, calbyte_4-3); printf("Changed calbyte 4 a little cb4=%d f=%lf\n",calbyte_4, frequency); new_frequency=read_frequency(device_descriptor); new_frequency_error=new_frequency-1e7; if(frequency_error > 0) frequency_change_per_calbyte=(new_frequency-frequency)/3; /* in Hz/calbyte */ else frequency_change_per_calbyte=-(new_frequency-frequency)/3; /* in Hz/calbyte */ printf("frequency_change_per_calbyte=%lf\n",frequency_change_per_calbyte); /* Do a correction of half the value calculated */ calbyte_change=-(int) ((new_frequency_error/frequency_change_per_calbyte)+0.5); /* Attempt to correct the frequency */ set_calbyte(device_descriptor, 4, calbyte_4+calbyte_change); /* Read the frequency, then exit if within an acceptable tollerence */ frequency=read_frequency(device_descriptor); frequency_error=frequency-1e7; calbyte_4=read_calbyte(device_descriptor,4); printf("new cb4=%d frequency error=%lf\n\n",calbyte_4, frequency_error); } while (fabs(frequency_error) > 0.0008); exit(0); break; _______________________________________________ time-nuts mailing list -- time-nuts@febo.com To unsubscribe, go to https://www.febo.com/cgi-bin/mailman/listinfo/time-nuts and follow the instructions there.
DD
Dr. David Kirkby (Kirkby Microwave Ltd)
Tue, Jun 20, 2017 12:09 PM

On 19 June 2017 at 21:43, David C. Partridge david.partridge@perdrix.co.uk
wrote:

Yes please. ...

OK, the code is here

http://www.kirkbymicrowave.co.uk/tmp/srs-0.02.tar.gz

Note

  1. It has only be tested on Solaris SPARC, with a National Instruments GPIB
    card.

  2. I would expect it to run under Linux, with few if any changes. If any
    are needed for an NI card, please let me know. I don't mind trying to get
    it to run under Linux, or any Unix system.

  3. I've no idea how easy it would be to run under Windoze, and have no
    intention of trying to help getting it to run under Windoze.

  4. There's no man page, but there is some rudimentary in-built help, if you
    run it with the wrong number of arguments. Below I run it with none, so it
    generates a semi-helpful help message. It needs at least one option, and a
    GPIB address. So something like

srs --time 12

would run it time-internval mode, and expect to find the SR620 on address
12.

I've NOT distributed this before, and have made no attempt to clean it up
to consider it in a fit state to distribute. But feel free to try it. Send
any comments directly to me.

Consider it released under the GPL version 2, or at your option any later
version.

drkirkby@buzzard:~/srs-0.02/src$ ./srs
srs - Version 0.02, by David Kirkby, G8WRB, drkirkby@kirkbymicrowave.co.uk
Dumps data from a Stanford Research SR620 time-interval counter
Usage: srs [options] GPIB_address
MODE
--time
--width
--risefall
--frequency (or use --freq)
--phase
--count

SOURCE (or start)
--A
--B
--reference (or use --ref)
--ratio

SAMPLE SIZE
--size n (n=1 to 1000000)

DISPLAY
--mean
--rel
--jitter
--max
--min
--trig
--dvm
OTHERS
--autocal
--readcalbyte n
--setcalbyte n m (sets calbye n to the value m)
--settimebase (Put 10 MHz into input A before running this, to correct
the timebase)
--help
-h, --help
-v, --version
-V, --verbose

On 19 June 2017 at 21:43, David C. Partridge <david.partridge@perdrix.co.uk> wrote: > Yes please. ... > OK, the code is here http://www.kirkbymicrowave.co.uk/tmp/srs-0.02.tar.gz Note 1) It has only be tested on Solaris SPARC, with a National Instruments GPIB card. 2) I would expect it to run under Linux, with few if any changes. If any are needed for an NI card, please let me know. I don't mind trying to get it to run under Linux, or any Unix system. 3) I've no idea how easy it would be to run under Windoze, and have no intention of trying to help getting it to run under Windoze. 4) There's no man page, but there is some rudimentary in-built help, if you run it with the wrong number of arguments. Below I run it with none, so it generates a semi-helpful help message. It needs at least one option, and a GPIB address. So something like srs --time 12 would run it time-internval mode, and expect to find the SR620 on address 12. I've NOT distributed this before, and have made no attempt to clean it up to consider it in a fit state to distribute. But feel free to try it. Send any comments directly to me. Consider it released under the GPL version 2, or at your option any later version. drkirkby@buzzard:~/srs-0.02/src$ ./srs srs - Version 0.02, by David Kirkby, G8WRB, drkirkby@kirkbymicrowave.co.uk Dumps data from a Stanford Research SR620 time-interval counter Usage: srs [options] GPIB_address **MODE** --time --width --risefall --frequency (or use --freq) --phase --count **SOURCE (or start)** --A --B --reference (or use --ref) --ratio **SAMPLE SIZE** --size n (n=1 to 1000000) **DISPLAY** --mean --rel --jitter --max --min --trig --dvm **OTHERS** --autocal --readcalbyte n --setcalbyte n m (sets calbye n to the value m) --settimebase (Put 10 MHz into input A before running this, to correct the timebase) --help -h, --help -v, --version -V, --verbose