first commit
This commit is contained in:
commit
b8768c3ff8
249 files changed
+38439
No files matched your search
@@ -0,0 +1,103 @@
|
||||
import sys
|
||||
import time
|
||||
import wiringpi
|
||||
#from wiringpi import GPIO
|
||||
|
||||
I2C_ADDR = 0x68
|
||||
|
||||
def b2s(bcd, mask):
|
||||
bcd &= mask
|
||||
b1 = bcd & 0x0F
|
||||
b2 = ((bcd >> 4) & 0x0F)*10
|
||||
return b1 + b2
|
||||
|
||||
def decCompensation(units):
|
||||
unitsU = units%10
|
||||
if units >= 50:
|
||||
units = 0x50 + unitsU
|
||||
elif units >= 40:
|
||||
units = 0x40 + unitsU
|
||||
elif units >= 30:
|
||||
units = 0x30 + unitsU
|
||||
elif units >= 20:
|
||||
units = 0x20 + unitsU
|
||||
elif units >= 10:
|
||||
units = 0x10 + unitsU
|
||||
return units
|
||||
|
||||
def getHours():
|
||||
HH = time.strftime("%H")
|
||||
return decCompensation(int(HH))
|
||||
|
||||
def getMins():
|
||||
MM = time.strftime("%M")
|
||||
return decCompensation(int(MM))
|
||||
|
||||
def getSecs():
|
||||
SS = time.strftime("%S")
|
||||
return decCompensation(int(SS))
|
||||
|
||||
def getWeeks():
|
||||
WW = time.strftime("%w")
|
||||
return decCompensation(int(WW))
|
||||
|
||||
def getDays():
|
||||
DD = time.strftime("%d")
|
||||
return decCompensation(int(DD))
|
||||
|
||||
def getMons():
|
||||
MON = time.strftime("%m")
|
||||
return decCompensation(int(MON))
|
||||
|
||||
def getYear():
|
||||
YY = time.strftime("%Y")
|
||||
return decCompensation(int(YY))
|
||||
|
||||
def clear_register(fd):
|
||||
wiringpi.wiringPiI2CWriteReg8(fd, 0x02, 0b0) # hours
|
||||
wiringpi.wiringPiI2CWriteReg8(fd, 0x01, 0b0) # mins
|
||||
wiringpi.wiringPiI2CWriteReg8(fd, 0x00, 0b10000000) # secs
|
||||
wiringpi.wiringPiI2CWriteReg8(fd, 0x03, 0b0) # weeks
|
||||
wiringpi.wiringPiI2CWriteReg8(fd, 0x04, 0b0) # days
|
||||
wiringpi.wiringPiI2CWriteReg8(fd, 0x05, 0b0) # mons
|
||||
|
||||
def sys2rtcSet(fd):
|
||||
wiringpi.wiringPiI2CWriteReg8(fd, 0x02, getHours())
|
||||
wiringpi.wiringPiI2CWriteReg8(fd, 0x01, getMins())
|
||||
wiringpi.wiringPiI2CWriteReg8(fd, 0x00, getSecs()+0b10000000)
|
||||
wiringpi.wiringPiI2CWriteReg8(fd, 0x03, getWeeks())
|
||||
wiringpi.wiringPiI2CWriteReg8(fd, 0x04, getDays())
|
||||
wiringpi.wiringPiI2CWriteReg8(fd, 0x05, getMons())
|
||||
wiringpi.wiringPiI2CWriteReg8(fd, 0x06, getYear())
|
||||
|
||||
def read_register(fd):
|
||||
secs = b2s(wiringpi.wiringPiI2CReadReg8(fd, 0x00), 0x7F)
|
||||
mins = b2s(wiringpi.wiringPiI2CReadReg8(fd, 0x01), 0x7F)
|
||||
hours = b2s(wiringpi.wiringPiI2CReadReg8(fd, 0x02) - 0b10000000, 0x3F)
|
||||
week = b2s(wiringpi.wiringPiI2CReadReg8(fd, 0x03), 0x3F)
|
||||
day = b2s(wiringpi.wiringPiI2CReadReg8(fd, 0x04), 0x1F)
|
||||
mon = b2s(wiringpi.wiringPiI2CReadReg8(fd, 0x05), 0x07)
|
||||
year = b2s(wiringpi.wiringPiI2CReadReg8(fd, 0x06), 0xFF) + 1970
|
||||
print("week:%d mon:%d day:%d hours:%d mins:%d secs:%d year:%d"%(week,mon,day,hours,mins,secs,year))
|
||||
|
||||
def main():
|
||||
wiringpi.wiringPiSetup()
|
||||
fd = wiringpi.wiringPiI2CSetup(I2C_ADDR)
|
||||
if not fd:
|
||||
return False;
|
||||
while True:
|
||||
try:
|
||||
# clear RTC Register
|
||||
clear_register(fd)
|
||||
# set sys time to RTC Register
|
||||
sys2rtcSet(fd)
|
||||
# read RTC Register
|
||||
read_register(fd)
|
||||
time.sleep(1)
|
||||
except KeyboardInterrupt:
|
||||
print("\nexit")
|
||||
sys.exit(0)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
Reference in new issue
Block a user