diff options
author | fishsoupisgood <github@madingley.org> | 2019-02-20 02:39:38 +0000 |
---|---|---|
committer | fishsoupisgood <github@madingley.org> | 2019-02-20 02:39:38 +0000 |
commit | c93861c733ced9c6659241cea69c7feed56afcce (patch) | |
tree | edcef2f980ae99f8ff8746c585eaf611c940e9ef /app/pll.c | |
parent | 971cc458aea21832a20b1b087185659d8e9ec2b3 (diff) | |
download | clock-c93861c733ced9c6659241cea69c7feed56afcce.tar.gz clock-c93861c733ced9c6659241cea69c7feed56afcce.tar.bz2 clock-c93861c733ced9c6659241cea69c7feed56afcce.zip |
use OCXO, and auto fail-over between different clock sources
Diffstat (limited to 'app/pll.c')
-rw-r--r-- | app/pll.c | 35 |
1 files changed, 30 insertions, 5 deletions
@@ -2,7 +2,7 @@ #define JUMP_THRESH 0.1 #define JUMP_TICKS 30 -#define FEEDBACK 0.01 +#define FEEDBACK 0.001 #define WARM_UP 3 @@ -47,7 +47,7 @@ static void modify_pll_freq (uint64_t now, int d) phase = now - pd2; } -void pll_dispatch (uint64_t edge) +void pll_dispatch (uint64_t happy, uint64_t edge, const char *src) { double f; int64_t pd; @@ -58,6 +58,32 @@ void pll_dispatch (uint64_t edge) } +#if 0 + { + int h1, h2, h3, h4; + EPOCH e; + + + e = pll_decompose (happy); + h1 = e.s; + e = pll_decompose (gps_last_happy); + h2 = e.s; + e = pll_decompose (dcf77_last_happy); + h3 = e.s; + e = pll_decompose (msf_last_happy); + h4 = e.s; + + printf ("H %d %d %d %d\r\n", h1 - h2, h2 - h2, h3 - h2, h4 - h2); + } +#endif + + + if (happy < gps_last_happy) return; + + if (happy < dcf77_last_happy) return; + + if (happy < msf_last_happy) return; + { int diff, hf; @@ -81,9 +107,7 @@ void pll_dispatch (uint64_t edge) else if (out_of_lock <= JUMP_TICKS) out_of_lock = 0; -#if 1 - printf ("PLL pd %.3f pll_freq %d phase %d\r\n", (float) f, (int) pll_freq, (int) phase); -#endif + printf ("PLL pd %.3f pll_freq %d phase %d %s\r\n", (float) f, (int) pll_freq, (int) phase, src); if (out_of_lock > JUMP_TICKS) { phase += pd; @@ -108,6 +132,7 @@ void pll_set_offset (EPOCH epoch, uint64_t abs) int64_t new_offset; int diff; + /* Find nearest second to abs*/ abs += pll_freq >> 2; abs -= phase; |