Help Please: Good Sat signal poor PPS


I am defeated!

I have three Raspberry Pi 4 with Adafruit ultimate GPS HAT and RTC.
Gpsd ver 3.17
Chrony ver 3.4

GPS Signal is as below:

Chronyc sources;
root@ntp-s1-0:/home/pi# chronyc sources
210 Number of sources = 5
MS Name/IP address Stratum Poll Reach LastRx Last sample

#x PPS0 0 4 43 10 +74ms[ +74ms] +/- 1052ns
#? GPS 0 4 377 16 +276ms[ +276ms] +/- 106ms
^+ 1 6 377 11 -15ms[ -15ms] +/- 30ms
^* 1 6 377 11 -15ms[ -15ms] +/- 30ms
^+ 1 6 377 4 +80ms[ +80ms] +/- 82ms

This issue is observed on all three devices, sometimes all at once, more often one will drop out.

When they run, they run very accurately, and this issue happens about once per week or sometimes every other day.

Any thoughts?


You might need to adjust your offset and delay:

$ chronyc sources
210 Number of sources = 6
MS Name/IP address         Stratum Poll Reach LastRx Last sample
#? NMEA                          0   4   377    12   +186ms[ +186ms] +/-  200ms
#* PPS                           0   4   377    12   +773ns[ +943ns] +/-  525ns
^- 072-239-115-057.res.spec>     1  10   377   114  +8761us[+8761us] +/-   18ms
^-            1  10   377     4   -333us[ -333us] +/- 1681us
^-               1  10   377   620  +1069us[+1072us] +/-   22ms
^-            2  10   377   130   +629us[ +629us] +/-   17ms

Relevant chrony config lines:

refclock SHM 0 refid NMEA precision 1e-1 offset 0.2511 delay 0.2 noselect
refclock PPS /dev/pps0 refid PPS

I have the same setup as you except I am on a r3b+.

What are your chrony config lines for PPS and GPS?


Thanks for the reply, my Chrony conf is below, however, my question is about the PPS signal BEFORE it gets to Chrony. If you look, my sat signal is way better than yours (#notacompetition) with 10 Sats of 40 or more s/n ratio and a quality of 2, and locked to 13, yet the PPS is poor.

My chrony config is quite capable of taking the GPSD feed at very good (ns) accuracies, so I believe the offsets are ok, but then it just borks, and sits with this poor PPS for periods of time. A reboot of the Pis sometimes helps, but not always.

This is occurring across three separate Pis that all sit in the same cabinet, they are sharing an antenna with a splitter, maybe I have some interference issues?

Photo of cabinet:

server offset 0.09 maxpoll 5 iburst
server offset 0.09 maxpoll 5 iburst
server maxpoll 5 iburst
driftfile /var/lib/chrony/chrony.drift

refclock PPS /dev/pps0 lock GPS
refclock SHM 0 offset 0.5 delay 0.2 refid GPS noselect

# This directive specify the location of the file containing ID/key pairs for
# NTP authentication.
keyfile /etc/chrony/chrony.keys

# Uncomment the following line to turn logging on.
#log tracking measurements statistics

# Log files location.
logdir /var/log/chrony

# Step the system clock instead of slewing it if the adjustment is larger than
# one second, but only in the first three clock updates.
makestep 1 10

You gave an ill defined anecdote and a photo which hopefully isn’t intentionally deceptive. You probably should check if you need to terminate (or power) the fourth port on the splitter. A low quality signal (possibly from a bad skyview) might explain it, but I wouldn’t know a good one if you hit me with it.

Gary Miller with the gpsd project would probably help you. I think he would want you to run this script on all three pis. The outputs should look close to identical. Pastebin them if contacting via IRC or attach the to an email to the gpsd users mailing list after subscribing.
Don’t email him directly unless he asks you to probably as negotiating a consultation.

Might be wrong, sorry about the rambling.

Hello Jamesb192,

Thank you for the feedback and apologies for the ill defined anecdote.

Photo was intended to show the installation I have as part of a study as to whats wrong with my PPS, and I think that I will move over to the GPSD fora with this topic.

However, you have pointed out something that I could look at. I can confirm that skyview is not the problem, but perhaps the ability of the adafruit gps hat to power the antenna through the splitter may be a problem. I need to confirm what voltage and current the antenna draws and what the hat can put out.

I think you may be on to something there.



Hi Alex,

I have tried to use the PPS signal via /dev/pps0 and mine was way off too.
You may want to try this instead:

refclock SHM 0 refid GPS poll 3 precision 1e-3 offset 0.127
refclock SHM 1 refid PPS poll 2 precision 1e-9 lock GPS prefer

GPSD is very good to deliver the PPS signal to chrony.

See for yourself:

Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
GPS                         9   6    64    -30.240     56.730  -1366us   675us
PPS                        17  12    66     +0.006      0.327    +14ns  5813ns

The /dev/pps0 device is not good for non-RS232 PPS-sevices, GPSD is much better.

Well in my case.

Hi Bas,

Well, you seem to have put me in the right direction.

First I updated my raspberry pi to debian bullseye to get a more recent version of chrony, then I also manually install gpsd to ver 3.23, the combined effort seems to give better feedback in the results shown in gpsmon and also in chronyc clients.

When I use /dev/pps0 in chronyc.conf with more recent verion of chrony, I can see that reachability fluctuates, it gets to 377 stays there for 1 or 2 cycles then drops to unreachable, then repeats that cycle.

Using SHM1 as you suggest seems to be stable.

Its still early days so let me me watch.

Thanks for the tip.


BTW, my gps is a RS232 device though…

Hi Alex,

An ttyAMA0 device doesn’t seem a real RS-232 device to me.
Typical these are USB-devices that often use an RS-232-USB converter.
But they are not real RS-232 and as such they are unstable when being used as RS-232.
GPSD is better at getting the PPS signal via USB and very fast too.