10
10
import as_GPS
11
11
import as_tGPS
12
12
13
+ print ('Available tests:' )
14
+ print ('calibrate(minutes=5) Set and calibrate the RTC.' )
15
+ print ('drift(minutes=5) Repeatedly print the difference between RTC and GPS time.' )
16
+
13
17
# Setup for tests. Red LED toggles on fix, blue on PPS interrupt.
14
18
async def setup ():
15
19
red = pyb .LED (1 )
@@ -20,13 +24,20 @@ async def setup():
20
24
pps_pin = pyb .Pin ('X3' , pyb .Pin .IN )
21
25
return as_tGPS .GPS_Timer (gps , pps_pin , blue )
22
26
23
- async def drift_test (gps_tim , minutes ):
24
- for _ in range (minutes ):
25
- for _ in range (6 ):
26
- dt = await gps_tim .delta ()
27
- print (gps_tim .get_t_split (), end = '' )
28
- print ('Delta {}' .format (dt ))
29
- await asyncio .sleep (10 )
27
+ running = True
28
+
29
+ async def killer (minutes ):
30
+ global running
31
+ await asyncio .sleep (minutes * 60 )
32
+ running = False
33
+
34
+ async def drift_test (gps_tim ):
35
+ dstart = await gps_tim .delta ()
36
+ while running :
37
+ dt = await gps_tim .delta ()
38
+ print ('{} Delta {}μs' .format (gps_tim .gps .time (), dt ))
39
+ await asyncio .sleep (10 )
40
+ return dt - dstart
30
41
31
42
# Calibrate and set the Pyboard RTC
32
43
async def do_cal (minutes ):
@@ -39,9 +50,19 @@ def calibrate(minutes=5):
39
50
40
51
# Every 10s print the difference between GPS time and RTC time
41
52
async def do_drift (minutes ):
53
+ print ('Setting up GPS.' )
42
54
gps_tim = await setup ()
43
- await drift_test (gps_tim , minutes )
55
+ print ('Waiting for time data.' )
56
+ await gps_tim .ready ()
57
+ print ('Setting RTC.' )
58
+ await gps_tim .set_rtc ()
59
+ print ('Measuring drift.' )
60
+ change = await drift_test (gps_tim )
61
+ print ('Rate of change {}μs/hr' .format (int (60 * change / minutes )))
44
62
45
63
def drift (minutes = 5 ):
64
+ global running
65
+ running = True
46
66
loop = asyncio .get_event_loop ()
67
+ loop .create_task (killer (minutes ))
47
68
loop .run_until_complete (do_drift (minutes ))
0 commit comments