[GPS_Standard] GPSstd_PLL New Version 0.23

Bob Stewart bob at evoria.net
Thu Nov 28 21:07:55 EST 2013


Jim pointed out that I had miscounted the columns and was missing a description or two in the README file.  I've fixed that and replaced the file.  One of these days I'll make a real document.  Promise!  =)


Bob - AE6RV




>________________________________
> From: Bob Stewart <bob at evoria.net>
>To: GPS Standard <gps_standard at mailman.qth.net> 
>Sent: Wednesday, November 27, 2013 12:33 PM
>Subject: [GPS_Standard] GPSstd_PLL New Version 0.23
> 
>
>Hi everyone,
>
>I've just uploaded the latest version of my software: Version 0.23.  This new version adds a couple of needed features.  
>
>1. I've completely rewritten the PWM and dithering code.  The result is that the "T" parameter now updates all the digits of the DAC value, including the dithered value digit.  IOW, if you enter "T1B47" the DAC value will go to 1B47.  NOTE that there is no leading zero.  Also, NOTE that if you enter the DAC value via the T parameter, the PLL will be forced into lock mode.
>
>2. With the rewrite of the PWM, I've been able to finally use a binary search to find the best solution (most accurate DAC value) much more quickly.  The search begins by using a change value of 0x80.  IOW, the DAC is stepped by 0x80 until it goes past the best solution.  When the code senses direction needed for update has reversed, then the change value is divided by 2.  So, once we've gone past best solution, the direction changes and we would step by 0x40.  This continues down to a step value of 0x01, where we go to locked mode.
>
>Users of this type of binary search may notice that it's possible to reach best solution before the step value reaches 0x01.  To account for this, during the binary search, if the time between updates exceeds 0x0800 seconds, then it is assumed that we are at best solution, and we go to locked mode.  The figure 0x800 was chosen because it represents the limit of a 14-bit DAC driving an OCXO with a span of 8 Hz.  A 14-bit DAC has 16384 positions.  If we divide that by 8Hz, we get an accuracy value of 2048 seconds between steps, which is 0x800.  Divide that once again by 256 and we get 0x08 which is now used for the default "L" parameter.
>
>During testing, lock mode was generally achieved in about 2 hours after power-up.
>
>3.  I have changed the default warmup value from 5 minutes to 16 minutes.  In testing I found that 5 minutes simply was not long enough to get a fully stable OCXO on my system.
>
>4.  I have kept the State Machine 1 from Version 0.13, but replaced the State Machine 2 with one that is a bit better.  So, essentially, this is a Version 0.13 with a better SM2, along with a rewritten PWM and the addition of the binary search feature.  If you looked at the various plots I posted recently, this code matches the best performing plots.
>
>5. I added the ability to trigger off of either the leading edge of the 1PPS pulse, or the trailing edge.  By default, it triggers on the leading edge.  If you have added an Adafruit, you probably discovered you needed to buffer the 1PPS signal to make it work reliably.  If so, then remove the leading semicolon from the PPS_INVERTED define so that it appears as follows:
>
>#define PPS_INVERTED           ;Use the falling edge of the 1PPS as the trigger, rather than the rising edge.
>
>6. I have removed the Motorola Oncore UT+ from my system and am now using an Adafruit Ultimate Breakout GPS receiver.  None of the changes I've made will affect the accuracy when using an Oncore.  However, I've come to believe that the huge sawtooth (jitter) on the 1PPS signal from the Oncore will limit the accuracy attainable using Bert's board.  The Adafruit, which uses an MTK-3339 chip, has a much smaller 1PPS jitter, which is not prone to long biases to one side or the other of the phase point.  I believe the MTK-3339 offers the best performance achievable by Bert's board with changes to the hardware other than the jumper between pins 9 and 11, and the buffer for the 1PPS signal.
>
>As usual, my code is located at "http://www.evoria.net/AE6RV/GPSstd_PLL".  Go to the "Version 0.23" folder, download the gzipped tar file, and proceed from there.  You will find both the source code, and a burnable hex file.  You will, of course, need a PIC burner and an 18F2220 to burn.  And don't forget that you must add a jumper between pins 9 and 11 of the PIC to use my code.  Bert's code will run as normal with this jumper installed.
>
>And finally, you will notice that this is still not Version 1.0.  I still have further changes to make before I am satisfied with calling it "1.0".  Hopefully one of the ideas I have for achieving at least a loose phase lock will be productive, as well.
>
>Happy Thanksgiving
>
>Bob - AE6RV
>______________________________________________________________
>GPS_Standard mailing list
>Home: http://mailman.qth.net/mailman/listinfo/gps_standard
>Help: http://mailman.qth.net/mmfaq.htm
>Post: mailto:GPS_Standard at mailman.qth.net
>
>This list hosted by: http://www.qsl.net
>Please help support this email list: http://www.qsl.net/donate.html
>
>
>


More information about the GPS_Standard mailing list