Los módulos GPS con salidas de 1pps están disponibles y son económicos.
No es realmente necesario disciplinar el oscilador de la CPU al GPS (por ejemplo, con un PLL). Siempre que pueda "marcar la hora" de los eventos externos en relación con el reloj de la CPU, es relativamente sencillo interpolar la hora de su ola de transmisión y recepción de eventos entre cualquiera de los dos eventos PPS.
Con frecuencia puede usar la combinación de un temporizador de hardware en el microcontrolador, junto con un contador de software para sus eventos de desbordamiento, para crear un contador de ciclos de CPU de ancho arbitrario. Puede ser complicado lidiar correctamente con los eventos de reinversión, tanto del contador de hardware como del contador de software, pero al final, puede tener, digamos, un contador de 32 bits que cuenta a la velocidad del reloj de la CPU (dando alta resolución ) y se desplaza con un período más largo que los intervalos que está tratando de medir (por ejemplo, 429 segundos a 10 MHz).
Puede usar este contador para marcar diferentes eventos externos. Si uno de esos eventos son pulsos de 1 pps de un receptor de GPS, entonces la precisión básica a largo plazo del reloj de la CPU se convierte en algo que no importa. Lo único que importa es su estabilidad a corto plazo. Puede guardar las marcas de tiempo de GPS en un búfer FIFO y comparar las marcas de tiempo de otros eventos con los valores de ese búfer. Como sabe que los pulsos del GPS están separados exactamente por un segundo, puede encontrar la hora exacta de cualquier otro evento mediante la interpolación.
Supongamos que \ $ GPS_n \ $ y \ $ GPS_ {n + 1} \ $ son las marcas de tiempo del reloj de la CPU para dos pulsos GPS sucesivos. También conoce los tiempos reales (reloj atómico) asociados con cada uno de esos pulsos (de los mensajes GPS), \ $ Time_n \ $ y \ $ Time_ {n + 1} \ $. Si \ $ Ext \ $ es la marca de tiempo del reloj de la CPU para algún evento externo que desee medir que se encuentre entre \ $ GPS_n \ $ y \ $ GPS_ {n + 1} \ $, su hora exacta es:
$$ Time_n + \ frac {Ext - GPS_n} {GPS_ {n + 1} - GPS_n} $$
Finalmente, si tiene esta configuración ejecutándose en dos sistemas separados, cada uno con su propio receptor GPS, puede comparar los tiempos calculados para varios eventos en los dos sistemas con alta precisión (generalmente del orden de ± 100 ns), incluso si los relojes de la CPU de los dos sistemas no están sincronizados.