Télécharger Imprimer la page

Raspberry PICO Mode D'emploi page 78

Publicité

15.2.1 Mise à l'heure manuel
Mettre les 4 fichiers suivants dans le PICO
Gestion du DS1307 à nommer ds1307.py
from
micropython
import
DATETIME_REG
= const(0)
CHIP_HALT
= const(128)
CONTROL_REG
= const(7)
RAM_REG
= const(8)
class
DS1307(object):
"""Driver for the DS1307 RTC."""
def
__init__(self, i2c, addr=0x68):
self.i2c
=
i2c
self.addr
=
self.weekday_start
self._halt
=
def
_dec2bcd(self, value):
"""Convert decimal to binary coded decimal (BCD) format"""
return
(value
def
_bcd2dec(self, value):
"""Convert binary coded decimal (BCD) format to decimal"""
return
((value
def
datetime(self, datetime=None):
"""Get or set datetime"""
if
datetime
buf
= self.i2c.readfrom_mem(self.addr, DATETIME_REG, 7)
return
(
self._bcd2dec(buf[6]) + 2000,
self._bcd2dec(buf[5]),
self._bcd2dec(buf[4]),
self._bcd2dec(buf[3] - self.weekday_start),
self._bcd2dec(buf[2]),
self._bcd2dec(buf[1]),
self._bcd2dec(buf[0] & 0x7F),
0
# subseconds
)
buf
= bytearray(7)
buf[0] = self._dec2bcd(datetime[6]) & 0x7F # second, msb = CH, 1=halt, 0=go
buf[1] = self._dec2bcd(datetime[5]) # minute
buf[2] = self._dec2bcd(datetime[4]) # hour
buf[3] = self._dec2bcd(datetime[3] + self.weekday_start) # weekday
buf[4] = self._dec2bcd(datetime[2]) # day
buf[5] = self._dec2bcd(datetime[1]) # month
buf[6] = self._dec2bcd(datetime[0] - 2000) # year
if (self._halt):
buf[0] |= (1 << 7)
self.i2c.writeto_mem(self.addr, DATETIME_REG, buf)
def halt(self, val=None):
"""Power up, power down or check status"""
if val is None:
return self._halt
reg = self.i2c.readfrom_mem(self.addr, DATETIME_REG, 1)[0]
if val:
reg |= CHIP_HALT
else:
reg &= ~CHIP_HALT
self._halt = bool(val)
self.i2c.writeto_mem(self.addr, DATETIME_REG, bytearray([reg]))
def square_wave(self, sqw=0, out=0):
"""Output square wave on pin SQ at 1Hz, 4.096kHz, 8.192kHz or 32.768kHz,
or disable the oscillator and output logic level high/low."""
rs0 = 1 if sqw == 4 or sqw == 32 else 0
rs1 = 1 if sqw == 8 or sqw == 32 else 0
out = 1 if out > 0 else 0
sqw = 1 if sqw > 0 else 0
reg = rs0 | rs1 << 1 | sqw << 4 | out << 7
self.i2c.writeto_mem(self.addr, CONTROL_REG, bytearray([reg]))
const
# 0x00-0x06
# 0x07
# 0x08-0x3F
addr
=
1
False
// 10) <<
4
|
(value
>> 4) * 10) +
(value
is
None:
# month
# day
# hour
# minute
% 10)
& 0x0F)
# year
# weekday
# second

Publicité

loading

Ce manuel est également adapté pour:

Pico w