Advertisement
DeaD_EyE

micropython pps

Jun 14th, 2022
1,026
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.13 KB | None | 0 0
  1. import time
  2.  
  3.  
  4. def timeit(function, n):
  5.     start = time.ticks_us()
  6.     for _ in range(n):
  7.         function()
  8.  
  9.     return time.ticks_diff(time.ticks_us(), start)
  10.  
  11.  
  12. class PPS:
  13.     __slots__ = ("rtc", "pin")
  14.    
  15.     def __init__(self, rtc, pin, ntp=False):
  16.         self.rtc = rtc
  17.         self.pin = pin
  18.         if ntp:
  19.             self.ntp()
  20.            
  21.         self.pin.init(Pin.IN, pull=Pin.PULL_DOWN)
  22.         self.pin.irq(self.pulse, Pin.IRQ_RISING)
  23.  
  24.     def ntp(self):
  25.         try:
  26.             import ntptime
  27.             ntptime.settime()
  28.  
  29.         except ImportError:
  30.             print("ntptime is not installed")
  31.  
  32.         except OSError:
  33.             print("No internet connection")
  34.  
  35.     def pulse(self):
  36.         dt = list(self.rtc.datetime())
  37.         dt[-1] = 0
  38.         dt[-2] += 1
  39.         self.rtc.datetime(dt)
  40.  
  41.  
  42. if __name__ == "__main__":
  43.     from machine import Pin
  44.     from machine import RTC
  45.    
  46.     pps_pin = Pin(17)
  47.     rtc = RTC()
  48.     pps = PPS(rtc, pps_pin, ntp=True)
  49.  
  50.     repeat = 1_000
  51.     delay_us = timeit(pps.pulse, repeat) / repeat
  52.     print(f"Delay of pps.pulse call: {delay_us:.0f} us.")
  53.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement