DeaD_EyE icon

micropython pps

DeaD_EyE | PRO | 06/14/22 01:30:21 PM UTC | 0 ⭐ | 1477 👁️ | Never ⏰ | []
Python |

1.13 KB

|

None

|

0 👍

/

0 👎

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.")
 

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎