30 bf[ 3 ] =
dec2bcd( now_tmp->tm_sec );
31 bf[ 4 ] =
dec2bcd( now_tmp->tm_min );
32 bf[ 5 ] =
dec2bcd( now_tmp->tm_hour );
33 bf[ 6 ] =
dec2bcd( now_tmp->tm_mday );
34 bf[ 8 ] =
dec2bcd( now_tmp->tm_mon + 1 );
35 bf[ 9 ] =
dec2bcd( now_tmp->tm_year - 100 );
37 now_time = mktime( now_tmp );
38 cnv_tmp = localtime( &now_time );
39 bf[ 5 ] =
dec2bcd( cnv_tmp->tm_wday );
41 reg_w( Stop_enable, bf,
sizeof( bf ) );
42 reg_w( Stop_enable, 0x00 );
47 return reg_r( Seconds ) & 0x80;
52 alarm( digit, val, 0 );
57 if ( WEEKDAY == digit ) {
58 Serial.println(
"*** 'WEEKDAY' for PCF85263A is unsupported alarm setting ***");
62 set_alarm( digit, val, int_sel );
67 set_alarm( digit, val, int_sel );
70void PCF85263A::set_alarm(
int digit,
int val,
int int_sel )
74 en = ((val & 80) ? 0x0 : 0x1) << digit;
76 reg_w( Second_alarm1 + digit,
dec2bcd( val ) );
77 bit_op8( Alarm_enables, ~en, en );
79 uint8_t en_bit = (digit < 5) ? 0x10 : 0x80;
80 bit_op8( INTA_enable + int_sel, ~en_bit, en_bit );
85 reg_w( Alarm_enables, 0x00 );
90 bit_op8( INTA_enable, ~0x18, 0x18 );
91 bit_op8( INTB_enable, ~0x18, 0x18 );
96 uint8_t status = reg_r( Flags );
98 reg_w( Flags, ~status );
107 reg_r( _100th_seconds, bf,
sizeof( bf ) );
109 now_tm.tm_sec =
bcd2dec( bf[ 1 ] );
110 now_tm.tm_min =
bcd2dec( bf[ 2 ] );
111 now_tm.tm_hour =
bcd2dec( bf[ 3 ] );
112 now_tm.tm_mday =
bcd2dec( bf[ 4 ] );
113 now_tm.tm_mon =
bcd2dec( bf[ 6 ] ) - 1;
114 now_tm.tm_year =
bcd2dec( bf[ 7 ] ) + 100;
117 return mktime( &now_tm );
122 bit_op8( Function, ~0x60, sel << 5 );
123 bit_op8( Function, ~0x60, sel << 5 );
125 bit_op8( INTA_enable + int_sel, ~0x40, (sel ? 1 : 0) << 6 );
130 bit_op8(Pin_IO, ~0x0F, (cfg_b << 2) | cfg_a);
135 bit_op8( Pin_IO, 0x0F, setting );
136 bit_op8( INTA_enable, ~0x04, 0x04 );
143 const int offset = 6;
145 reg_r( TSR1_seconds + offset * num, bf,
sizeof( bf ) );
147 ts_tm.tm_sec =
bcd2dec( bf[ 0 ] );
148 ts_tm.tm_min =
bcd2dec( bf[ 1 ] );
149 ts_tm.tm_hour =
bcd2dec( bf[ 2 ] );
150 ts_tm.tm_mday =
bcd2dec( bf[ 3 ] );
151 ts_tm.tm_mon =
bcd2dec( bf[ 4 ] ) - 1;
152 ts_tm.tm_year =
bcd2dec( bf[ 5 ] ) + 100;
155 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)