26 bf[ 3 ] =
dec2bcd( now_tmp->tm_sec );
27 bf[ 4 ] =
dec2bcd( now_tmp->tm_min );
28 bf[ 5 ] =
dec2bcd( now_tmp->tm_hour );
29 bf[ 6 ] =
dec2bcd( now_tmp->tm_mday );
30 bf[ 8 ] =
dec2bcd( now_tmp->tm_mon + 1 );
31 bf[ 9 ] =
dec2bcd( now_tmp->tm_year - 100 );
33 now_time = mktime( now_tmp );
34 cnv_tmp = localtime( &now_time );
35 bf[ 5 ] =
dec2bcd( cnv_tmp->tm_wday );
37 reg_w( Stop_enable, bf,
sizeof( bf ) );
38 reg_w( Stop_enable, 0x00 );
43 return reg_r( Seconds ) & 0x80;
48 alarm( digit, val, 0 );
53 if ( WEEKDAY == digit ) {
54 Serial.println(
"*** 'WEEKDAY' for PCF85263A is unsupported alarm setting ***");
58 set_alarm( digit, val, int_sel );
63 set_alarm( digit, val, int_sel );
66void PCF85263A::set_alarm(
int digit,
int val,
int int_sel )
70 en = ((val & 80) ? 0x0 : 0x1) << digit;
72 reg_w( Second_alarm1 + digit,
dec2bcd( val ) );
73 bit_op8( Alarm_enables, ~en, en );
75 uint8_t en_bit = (digit < 5) ? 0x10 : 0x80;
76 bit_op8( INTA_enable + int_sel, ~en_bit, en_bit );
81 reg_w( Alarm_enables, 0x00 );
86 bit_op8( INTA_enable, ~0x18, 0x18 );
87 bit_op8( INTB_enable, ~0x18, 0x18 );
92 uint8_t status = reg_r( Flags );
94 reg_w( Flags, ~status );
103 reg_r( _100th_seconds, bf,
sizeof( bf ) );
105 now_tm.tm_sec =
bcd2dec( bf[ 1 ] );
106 now_tm.tm_min =
bcd2dec( bf[ 2 ] );
107 now_tm.tm_hour =
bcd2dec( bf[ 3 ] );
108 now_tm.tm_mday =
bcd2dec( bf[ 4 ] );
109 now_tm.tm_mon =
bcd2dec( bf[ 6 ] ) - 1;
110 now_tm.tm_year =
bcd2dec( bf[ 7 ] ) + 100;
113 return mktime( &now_tm );
118 bit_op8( Function, ~0x60, sel << 5 );
119 bit_op8( Function, ~0x60, sel << 5 );
121 bit_op8( INTA_enable + int_sel, ~0x40, (sel ? 1 : 0) << 6 );
126 bit_op8(Pin_IO, ~0x0F, (cfg_b << 2) | cfg_a);
131 bit_op8( Pin_IO, 0x0F, setting );
132 bit_op8( INTA_enable, ~0x04, 0x04 );
139 const int offset = 6;
141 reg_r( TSR1_seconds + offset * num, bf,
sizeof( bf ) );
143 ts_tm.tm_sec =
bcd2dec( bf[ 0 ] );
144 ts_tm.tm_min =
bcd2dec( bf[ 1 ] );
145 ts_tm.tm_hour =
bcd2dec( bf[ 2 ] );
146 ts_tm.tm_mday =
bcd2dec( bf[ 3 ] );
147 ts_tm.tm_mon =
bcd2dec( bf[ 4 ] ) - 1;
148 ts_tm.tm_year =
bcd2dec( bf[ 5 ] ) + 100;
151 return mktime( &ts_tm );
void pin_congfig(inta cfg_a, intb cfg_b)
void ts_congfig(int setting)
void alarm(alarm_setting digit, int val)
void periodic_interrupt_enable(periodic_int_select sel, int int_sel=0)
time_t timestamp(int num)
bool oscillator_stop(void)
PCF85263A(uint8_t i2c_address=(0xA2 > > 1))
void set(struct tm *now_tm)
static uint8_t dec2bcd(uint8_t v)
static uint8_t bcd2dec(uint8_t v)