I recently needed to synchronize a Windows XP machine with GPS time.  One of the requirements was sub-millisecond accuracy, which is no small thing for non-RTOS computers.  David Hart to the rescue!  He has written an driver for the NTP (network time protocol) service to incorporate a PPS (pulse per second) signal.  The PPS signal, coming from a GPS, is highly accurate after sufficient time has elapsed for the GPS to sync with the satellites.  I’ve received a lot of help from David Taylor; thanks again, David!  So, without further ado, here’s an example of how to proceed with the installation:

[UPDATE:  from David Hart – “I’ve posted a new serialpps-20091228.zip which should correct that [install.bat bug]. The (huge) debug build of serialpps-ppsapi-provider.dll is also added, along with a tiny bit of instructions in install.bat regarding PPSAPI_DLLS.”]

1.  Configure hardware.
Connect the PPS signal to the DCD pin on the RS232 connector.

2.  Install Meinberg NTP software.
Keep all defaults.
Create and use a special NTP account. (I always had problems using anything else)
Account name:  ntp (use whatever you want)
Account pass:  ntpntp

3.  Stop NTP.
Run “C:\Program Files\NTP\bin\stopntp.bat”.   There are alot of useful utils in the \bin directory.

4.  Replace ntpd.exe with altered version.
Extract “ntpd.exe” from “ntp-4.2.4p6-DLH-QPC-20090315-bin.zip
Copy to “C:\Program Files\NTP\bin”, replacing previous ntpd.exe.

5.  Install SerialPPS.
Extract all from “serialpps-20090606.zip“.
Edit “install.bat”
On line 6, remove ‘if “x86″==”%PROCESSOR_ARCHITECTURE” ‘
Remove line 7 and 8 (you can just put “REM ” in front and they will be ignored, almost like a comment)
Run “install.bat”
Ensure that “serialpps.sys” was copied to “C:\Windows\system32\drivers”
Copy “serialpps-ppsapi-provider\x86\serialpps-ppsapi-provider.dll” to “C:\”
Right-click “My Computer”, go to properties.
Click “Advanced” tab
Click “Environment Variables” button
Under “System variables”, Click “New” button
Name:  PPSAPI_DLLS
Value: C:\serialpps-ppsapi-provider.dll

6.  Configure GPS (for Garmin)
Run “SNSRCFG.exe
Connect to GPS
Configure
Set baud rate to 4800
Enable “Pulse Per Second”
Press F7
Enable GPRMC, disable others
Send config to GPS

7.  Configure NTP
Edit “C:\Program Files\NTP\etc\ntp.conf”
Remove all entries, add the following
driftfile “C:\Program Files\NTP\etc\ntp.drift”
enable stats
statsdir “C:\Program Files\NTP\etc\”
statistics loopstats
server 127.127.22.1 minpoll 4 #PPS
server 127.127.20.1 iburst prefer minpoll 4 maxpoll 7 #GPS
#fudge 127.127.20.1 time1 0.4 refid GPS #uncomment and change time1 as needed

8.  Ensure GPS is connected to serial port 1

9.  Restart computer

10. Unplug GPS and disable Microsoft Ball-mouse (if listed)
Go to device manager: My Computer->Properties->Hardware->Device Manager
Under “Mice and other pointing devices”, right-click and disable “Microsoft Serial BallPoint”

11. Reconnect GPS Restart computer

12. Start NTP server
Run “C:\Program Files\NTP\bin\startntp.bat”

13. Monitor NTP server
Run “C:\Program Files\NTP\bin\ntpstatus.bat”
Both GPS and PPS should show up.  After the GPS gets a lock, NTP should sync to the servers.
Refer to online documentation for help.
Alternatively, use “NTP Time Server Monitor” from Meinberg

To Uninstall PPS driver, run “uninstall.bat”.