1
0
Fork 0

wasp: pinetime: Basic RTC support

Currently this supports time only (no date) and it based on the
RTCounter class which is customized for nRF ports. At present
the nRF port doesn't have proper machine.rtc support so we have
implemented within wasp instead.
pull/5/head
Daniel Thompson 2020-02-03 19:12:04 +00:00
parent 8168dd5939
commit 127df66335
3 changed files with 64 additions and 3 deletions

View File

@ -3,6 +3,7 @@ freeze('../..',
'boot.py',
'demo.py',
'drivers/battery.py',
'drivers/nrf_rtc.py',
'drivers/signal.py',
'drivers/st7789.py',
'drivers/vibrator.py',

View File

@ -1,9 +1,10 @@
from machine import Pin
from machine import RTCounter as RTC
from machine import RTCounter
#from machine import Signal
from machine import SPI
from drivers.battery import Battery
from drivers.nrf_rtc import RTC
from drivers.signal import Signal
from drivers.st7789 import ST7789_SPI
from drivers.vibrator import Vibrator
@ -50,11 +51,12 @@ display = Display()
backlight.set(1)
# Start measuring time (and feeding the watchdog)
rtc = RTC(1, mode=RTC.PERIODIC)
rtc.start()
rtc = RTC(RTCounter(1, mode=RTCounter.PERIODIC))
rtc.counter.start()
battery = Battery(
Pin('BATTERY', Pin.IN),
Signal(Pin('CHARGING', Pin.IN), invert=True),
Signal(Pin('USB_PWR', Pin.IN), invert=True))
vibrator = Vibrator(Pin('MOTOR', Pin.OUT, value=0), active_low=True)
button = Pin('BUTTON', Pin.IN)

View File

@ -0,0 +1,58 @@
""" Real Time Clock based on the nRF-family low power counter """
#class Stim(object):
# def __init__(self):
# self(0)
#
# def __call__(self, v):
# self.c = v
#
# def counter(self):
# return self.c
class RTC(object):
"""Real Time Clock based on the nRF-family low power counter.
TODO: Maintain hh:mm:ss as an array so we can report time
without memory allocation.
"""
def __init__(self, counter):
self.counter = counter
self.uptime = 0
self.set_time((12, 0, 0))
def update(self):
newcount = self.counter.counter()
split = newcount - self.lastcount
if split == 0:
return False
if split < 0:
split += (1 << 24)
elapsed = split // 8
self.lastcount += elapsed * 8
self.lastcount &= (1 << 24) - 1
self.uptime += elapsed
self.ss += elapsed
if self.ss >= 60:
self.mm += self.ss // 60
self.ss %= 60
if self.mm >= 60:
self.hh += self.mm // 60
self.mm %= 60
self.hh %= 24
return True
def set_time(self, t):
self.lastcount = self.counter.counter()
self.hh = t[0]
self.mm = t[1]
self.ss = t[2]
def get_time(self):
self.update()
return (self.hh, self.mm, self.ss)