import time def timeit(function, n): start = time.ticks_us() for _ in range(n): function() return time.ticks_diff(time.ticks_us(), start) class PPS: __slots__ = ("rtc", "pin") def __init__(self, rtc, pin, ntp=False): self.rtc = rtc self.pin = pin if ntp: self.ntp() self.pin.init(Pin.IN, pull=Pin.PULL_DOWN) self.pin.irq(self.pulse, Pin.IRQ_RISING) def ntp(self): try: import ntptime ntptime.settime() except ImportError: print("ntptime is not installed") except OSError: print("No internet connection") def pulse(self): dt = list(self.rtc.datetime()) dt[-1] = 0 dt[-2] += 1 self.rtc.datetime(dt) if __name__ == "__main__": from machine import Pin from machine import RTC pps_pin = Pin(17) rtc = RTC() pps = PPS(rtc, pps_pin, ntp=True) repeat = 1_000 delay_us = timeit(pps.pulse, repeat) / repeat print(f"Delay of pps.pulse call: {delay_us:.0f} us.")