RTC_NXP_Arduino 0.5.0
LED driver device operation sample code for Arduino
Loading...
Searching...
No Matches
RTC_NXP.h
1
8#ifndef ARDUINO_LED_DRIVER_NXP_ARD_H
9#define ARDUINO_LED_DRIVER_NXP_ARD_H
10
11#include <Arduino.h>
12#include <stdint.h>
13#include <time.h>
14
15#include <I2C_device.h>
16#include <SPI.h>
17
27{
28public:
30 enum board {
31 NONE,
32 ARDUINO_SHIELD,
33 };
36 SECOND,
37 MINUTE,
38 HOUR,
39 DAY,
40 WEEKDAY,
41 };
42
44 RTC_NXP();
45
47 virtual ~RTC_NXP();
48
50 virtual void begin( void ) = 0;
51
59 time_t time( time_t* tp );
60
65 virtual void set( struct tm* now_tm ) = 0;
66
71 virtual bool oscillator_stop( void ) = 0;
72
78 virtual void alarm( alarm_setting digit, int val ) = 0;
79
82 virtual void alarm_clear( void ) = 0;
83
86 virtual void alarm_disable( void ) = 0;
87
90 virtual uint8_t int_clear( void ) = 0;
91
92protected:
97 virtual time_t rtc_time( void ) = 0;
98
104 static uint8_t bcd2dec( uint8_t v );
105
111 static uint8_t dec2bcd( uint8_t v );
112};
113
114
123class PCF2131_base : public RTC_NXP
124{
125public:
127 enum reg_num {
128 Control_1, Control_2, Control_3, Control_4, Control_5,
129 SR_Reset,
130 _100th_Seconds, Seconds, Minutes,Hours, Days, Weekdays, Months, Years,
131 Second_alarm, Minute_alarm, Hour_alarm, Day_alarm, Weekday_alarm,
132 CLKOUT_ctl,
133 Timestp_ctl1, Sec_timestp1, Min_timestp1, Hour_timestp1, Day_timestp1, Mon_timestp1, Year_timestp1,
134 Timestp_ctl2, Sec_timestp2, Min_timestp2, Hour_timestp2, Day_timestp2, Mon_timestp2, Year_timestp2,
135 Timestp_ctl3, Sec_timestp3, Min_timestp3, Hour_timestp3, Day_timestp3, Mon_timestp3, Year_timestp3,
136 Timestp_ctl4, Sec_timestp4, Min_timestp4, Hour_timestp4, Day_timestp4, Mon_timestp4, Year_timestp4,
137 Aging_offset,
138 INT_A_MASK1, INT_A_MASK2, INT_B_MASK1, INT_B_MASK2,
139 Watchdg_tim_ctl, Watchdg_tim_val
140 };
143 DISABLE,
144 EVERY_SECOND,
145 EVERY_MINUTE,
146 };
149 LAST,
150 FIRST,
151 };
152
154 PCF2131_base();
155
157 virtual ~PCF2131_base();
158
160 void begin( void );
161
166 bool oscillator_stop( void );
167
172 time_t rtc_time( void );
173
178 void set( struct tm* now_tm );
179
180
186 void alarm( alarm_setting digit, int val );
187
194 void alarm( alarm_setting digit, int val, int int_sel );
195
198 void alarm_clear( void );
199
202 void alarm_disable( void );
203
210 void timestamp( int num, timestanp_setting ts_setting, int int_sel = 0 );
211
217 time_t timestamp( int num );
218
221 uint8_t int_clear( void );
222
225 uint8_t int_clear( uint8_t* state_p );
226
232 void periodic_interrupt_enable( periodic_int_select sel, int int_sel = 0 );
233
234protected:
236 virtual void _reg_w( uint8_t reg, uint8_t *vp, int len ) = 0;
237
239 virtual void _reg_r( uint8_t reg, uint8_t *vp, int len ) = 0;
240
242 virtual void _reg_w( uint8_t reg, uint8_t val ) = 0;
243
245 virtual uint8_t _reg_r( uint8_t reg ) = 0;
246
248 virtual void _bit_op8( uint8_t reg, uint8_t mask, uint8_t val ) = 0;
249
250private:
251 const int int_mask_reg[ 2 ][ 2 ] = {
252 { INT_A_MASK1, INT_A_MASK2, },
253 { INT_B_MASK1, INT_B_MASK2, },
254 };
255};
256
257
265class PCF2131_I2C : public PCF2131_base, public I2C_device
266{
267public:
269 PCF2131_I2C( uint8_t i2c_address = (0xA6 >> 1) );
270
272 PCF2131_I2C( TwoWire& wire, uint8_t i2c_address = (0xA6 >> 1) );
273
275 virtual ~PCF2131_I2C();
276
277private:
279 void _reg_w( uint8_t reg, uint8_t *vp, int len );
280
282 void _reg_r( uint8_t reg, uint8_t *vp, int len );
283
285 void _reg_w( uint8_t reg, uint8_t val );
286
288 uint8_t _reg_r( uint8_t reg );
289
291 void _bit_op8( uint8_t reg, uint8_t mask, uint8_t val );
292};
293
294
303{
304public:
312 void txrx( uint8_t *data, int size );
313
321 void reg_w( uint8_t reg_adr, uint8_t *data, int size );
322
330 void reg_w( uint8_t reg_adr, uint8_t data );
331
339 void reg_r( uint8_t reg_adr, uint8_t *data, int size );
340
346 uint8_t reg_r( uint8_t reg_adr );
347
353 void write_r8( uint8_t reg, uint8_t val );
354
360 uint8_t read_r8( uint8_t reg );
361
370 void bit_op8( uint8_t reg, uint8_t mask, uint8_t value );
371};
372
381{
382public:
384 PCF2131_SPI();
385
387 virtual ~PCF2131_SPI();
388
389private:
390// void txrx( uint8_t *data, uint16_t size );
391
393 void _reg_w( uint8_t reg, uint8_t *vp, int len );
394
396 void _reg_r( uint8_t reg, uint8_t *vp, int len );
397
399 void _reg_w( uint8_t reg, uint8_t val );
400
402 uint8_t _reg_r( uint8_t reg );
403
405 void _bit_op8( uint8_t reg, uint8_t mask, uint8_t val );
406};
407
415class PCF85063_base : public RTC_NXP
416{
417public:
418 enum reg_num {
419 Control_1, Control_2,
420 Offset,
421 RAM_byte,
422 Seconds, Minutes, Hours, Days, Weekdays, Months, Years,
423 Second_alarm, Minute_alarm, Hour_alarm, Day_alarm, Weekday_alarm,
424 Timer_value, Timer_mode
425 };
428
430 virtual ~PCF85063_base();
431
433 void begin( void );
434
439 void set( struct tm* now_tm );
440
445 bool oscillator_stop( void );
446
452 void alarm( alarm_setting digit, int val );
453
456 void alarm_clear( void );
457
460 void alarm_disable( void );
461
464 uint8_t int_clear( void );
465
466
472 float timer( float period );
473
474protected:
479 time_t rtc_time( void );
480
482 virtual void _reg_w( uint8_t reg, uint8_t *vp, int len ) = 0;
483
485 virtual void _reg_r( uint8_t reg, uint8_t *vp, int len ) = 0;
486
488 virtual void _reg_w( uint8_t reg, uint8_t val ) = 0;
489
491 virtual uint8_t _reg_r( uint8_t reg ) = 0;
492
494 virtual void _bit_op8( uint8_t reg, uint8_t mask, uint8_t val ) = 0;
495};
496
497class PCF85063A : public PCF85063_base, public I2C_device
498{
499public:
501 PCF85063A( uint8_t i2c_address = (0xA2 >> 1) );
502
504 PCF85063A( TwoWire& wire, uint8_t i2c_address = (0xA2 >> 1) );
505
507 virtual ~PCF85063A();
508
509private:
511 void _reg_w( uint8_t reg, uint8_t *vp, int len );
512
514 void _reg_r( uint8_t reg, uint8_t *vp, int len );
515
517 void _reg_w( uint8_t reg, uint8_t val );
518
520 uint8_t _reg_r( uint8_t reg );
521
523 void _bit_op8( uint8_t reg, uint8_t mask, uint8_t val );
524};
525
526class PCF85063TP : public PCF85063A
527{
528public:
530 PCF85063TP( uint8_t i2c_address = (0xA2 >> 1) );
531
533 PCF85063TP( TwoWire& wire, uint8_t i2c_address = (0xA2 >> 1) );
534
536 virtual ~PCF85063TP();
537
541 void alarm( alarm_setting digit, int val );
542
546 void alarm_clear( void );
547
551 void alarm_disable( void );
552
556 uint8_t int_clear( void );
557
558
562 float timer( float period );
563
564};
565
566class PCF85263A : public RTC_NXP, public I2C_device
567{
568public:
569 enum reg_num {
570 _100th_seconds, Seconds, Minutes, Hours, Days, Weekdays, Months, Years,
571 Second_alarm1, Minute_alarm1, Hour_alarm1, Day_alarm1, Month_alarm1,
572 Minute_alarm2, Hour_alarm2, Weekday_alarm2,
573 Alarm_enables,
574 TSR1_seconds, TSR1_minutes, TSR1_hours, TSR1_days, TSR1_months, TSR1_years,
575 TSR2_seconds, TSR2_minutes, TSR2_hours, TSR2_days, TSR2_months, TSR2_years,
576 TSR3_seconds, TSR3_minutes, TSR3_hours, TSR3_days, TSR3_months, TSR3_years,
577 TSR_mode,
578 Offset, Oscillator, Battery_switch, Pin_IO, Function,
579 INTA_enable, INTB_enable, Flags,
580 RAM_byte, WatchDog, Stop_enable, Resets,
581
582 Hours_xx_xx_00 = 0x03, Hours_xx_00_xx, Hours_00_xx_xx, Reserved0, Reserved1,
583 Second_alm1, Minute_alm1, Hr_xx_xx_00_alm1, Hr_xx_00_xx_alm1, Hr_00_xx_xx_alm1,
584 Minute_alm2, Hr_xx_00_alm2, Hr_00_xx_alm2,
585 TSR1_hr_xx_xx_00 = 0x13, TSR1_hr_xx_00_xx, TSR1_hr_00_xx_xx, Reserved2,
586 TSR2_hr_xx_xx_00 = 0x19, TSR2_hr_xx_00_xx, TSR2_hr_00_xx_xx, Reserved3,
587 TSR3_hr_xx_xx_00 = 0x1F, TSR3_hr_xx_00_xx, TSR3_hr_00_xx_xx, Reserved4,
588 };
589
592 SECOND,
593 MINUTE,
594 HOUR,
595 DAY,
596 MONTH,
597 MINUTE2,
598 HOUR2,
599 WEEKDAY2,
600 };
601
604 DISABLE,
605 EVERY_SECOND,
606 EVERY_MINUTE,
607 };
608
610 enum inta {
611 INTA_CLKOUT,
612 INTA_BATTERY_MODE_INDICATION,
613 INTA_INTTERRUPT,
614 INTA_HIGH_Z,
615 };
616
618 enum intb {
619 INTB_DISABLE,
620 INTB_INTTERRUPT,
621 INTB_CLKOUT,
622 INTB_INPUT_MODE,
623 };
624
626 enum ts_in {
627 TS_PULLUP_80K = 0x00,
628 TS_PULLUP_40K = 0x40,
629 TSL_ACTIVE_HIGH = 0x00,
630 TSL_ACTIVE_LOW = 0x20,
631 TSIM_CMOS = 0x00,
632 TSIM_MECHANICAL = 0x10,
633 };
634
636 PCF85263A( uint8_t i2c_address = (0xA2 >> 1) );
637
639 PCF85263A( TwoWire& wire, uint8_t i2c_address = (0xA2 >> 1) );
640
642 virtual ~PCF85263A();
643
645 void begin( void );
646
651 void set( struct tm* now_tm );
652
657 bool oscillator_stop( void );
658
664 void alarm( alarm_setting digit, int val );
665
672 void alarm( alarm_setting digit, int val, int int_sel );
673
679 void alarm( alarm_setting_85263A digit, int val, int int_sel = 0 );
680
683 void alarm_clear( void );
684
687 void alarm_disable( void );
688
691 uint8_t int_clear( void );
692
697 time_t rtc_time( void );
698
703 void periodic_interrupt_enable( periodic_int_select sel, int int_sel = 0 );
704
710 void pin_congfig(inta cfg_a, intb cfg_b);
711
716 void ts_congfig(int setting);
717
722 time_t timestamp( int num );
723
724private:
725 void set_alarm( int digit, int val, int int_sel );
726};
727
728class ForFutureExtention : public RTC_NXP, public I2C_device
729{
730public:
733
736
738 void begin( void );
739
744 void set( struct tm* now_tm );
745
750 bool oscillator_stop( void );
751
756 void alarm( alarm_setting digit, int val );
757
760 void alarm_clear( void );
761
764 void alarm_disable( void );
765
768 uint8_t int_clear( void );
769
770protected:
775 time_t rtc_time( void );
776};
777
778
779#endif // ARDUINO_LED_DRIVER_NXP_ARD_H
void alarm(alarm_setting digit, int val)
void alarm_clear(void)
virtual ~ForFutureExtention()
time_t rtc_time(void)
uint8_t int_clear(void)
bool oscillator_stop(void)
void alarm_disable(void)
void set(struct tm *now_tm)
virtual ~PCF2131_I2C()
Definition: PCF2131_I2C.cpp:11
virtual ~PCF2131_SPI()
Definition: PCF2131_SPI.cpp:7
void timestamp(int num, timestanp_setting ts_setting, int int_sel=0)
void begin(void)
virtual uint8_t _reg_r(uint8_t reg)=0
periodic_int_select
Definition: RTC_NXP.h:142
void set(struct tm *now_tm)
uint8_t int_clear(void)
void alarm_clear(void)
time_t rtc_time(void)
void periodic_interrupt_enable(periodic_int_select sel, int int_sel=0)
virtual ~PCF2131_base()
Definition: PCF2131_base.cpp:7
void alarm_disable(void)
bool oscillator_stop(void)
void alarm(alarm_setting digit, int val)
virtual void _reg_r(uint8_t reg, uint8_t *vp, int len)=0
virtual void _bit_op8(uint8_t reg, uint8_t mask, uint8_t val)=0
virtual void _reg_w(uint8_t reg, uint8_t val)=0
virtual void _reg_w(uint8_t reg, uint8_t *vp, int len)=0
void set(struct tm *now_tm)
Definition: PCF85063A.cpp:15
virtual void _bit_op8(uint8_t reg, uint8_t mask, uint8_t val)=0
bool oscillator_stop(void)
Definition: PCF85063A.cpp:38
uint8_t int_clear(void)
Definition: PCF85063A.cpp:60
void alarm_disable(void)
Definition: PCF85063A.cpp:55
void alarm(alarm_setting digit, int val)
Definition: PCF85063A.cpp:43
virtual void _reg_w(uint8_t reg, uint8_t val)=0
float timer(float period)
Definition: PCF85063A.cpp:68
virtual void _reg_w(uint8_t reg, uint8_t *vp, int len)=0
void begin(void)
Definition: PCF85063A.cpp:11
virtual uint8_t _reg_r(uint8_t reg)=0
virtual void _reg_r(uint8_t reg, uint8_t *vp, int len)=0
virtual ~PCF85063_base()
Definition: PCF85063A.cpp:7
void alarm_clear(void)
Definition: PCF85063A.cpp:50
time_t rtc_time(void)
Definition: PCF85063A.cpp:100
virtual ~PCF85063A()
Definition: PCF85063A.cpp:128
virtual ~PCF85063TP()
Definition: PCF85063TP.cpp:17
void alarm(alarm_setting digit, int val)
Definition: PCF85063TP.cpp:21
uint8_t int_clear(void)
Definition: PCF85063TP.cpp:38
float timer(float period)
Definition: PCF85063TP.cpp:44
void alarm_disable(void)
Definition: PCF85063TP.cpp:33
void alarm_clear(void)
Definition: PCF85063TP.cpp:28
void pin_congfig(inta cfg_a, intb cfg_b)
Definition: PCF85263A.cpp:128
void alarm_disable(void)
Definition: PCF85263A.cpp:88
void ts_congfig(int setting)
Definition: PCF85263A.cpp:133
void alarm(alarm_setting digit, int val)
Definition: PCF85263A.cpp:50
void periodic_interrupt_enable(periodic_int_select sel, int int_sel=0)
Definition: PCF85263A.cpp:120
uint8_t int_clear(void)
Definition: PCF85263A.cpp:94
virtual ~PCF85263A()
Definition: PCF85263A.cpp:11
time_t timestamp(int num)
Definition: PCF85263A.cpp:139
void begin(void)
Definition: PCF85263A.cpp:15
alarm_setting_85263A
Definition: RTC_NXP.h:591
bool oscillator_stop(void)
Definition: PCF85263A.cpp:45
void alarm_clear(void)
Definition: PCF85263A.cpp:83
periodic_int_select
Definition: RTC_NXP.h:603
time_t rtc_time(void)
Definition: PCF85263A.cpp:102
void set(struct tm *now_tm)
Definition: PCF85263A.cpp:19
virtual void begin(void)=0
virtual uint8_t int_clear(void)=0
virtual void set(struct tm *now_tm)=0
virtual time_t rtc_time(void)=0
RTC_NXP()
Definition: RTC_NXP.cpp:3
virtual void alarm_disable(void)=0
virtual bool oscillator_stop(void)=0
alarm_setting
Definition: RTC_NXP.h:35
static uint8_t dec2bcd(uint8_t v)
Definition: RTC_NXP.cpp:24
static uint8_t bcd2dec(uint8_t v)
Definition: RTC_NXP.cpp:19
virtual ~RTC_NXP()
Definition: RTC_NXP.cpp:7
virtual void alarm_clear(void)=0
virtual void alarm(alarm_setting digit, int val)=0
time_t time(time_t *tp)
Definition: RTC_NXP.cpp:11
uint8_t read_r8(uint8_t reg)
Definition: SPI_for_RTC.cpp:54
void bit_op8(uint8_t reg, uint8_t mask, uint8_t value)
Definition: SPI_for_RTC.cpp:59
void reg_w(uint8_t reg_adr, uint8_t *data, int size)
Definition: SPI_for_RTC.cpp:10
void txrx(uint8_t *data, int size)
Definition: SPI_for_RTC.cpp:3
void write_r8(uint8_t reg, uint8_t val)
Definition: SPI_for_RTC.cpp:49
void reg_r(uint8_t reg_adr, uint8_t *data, int size)
Definition: SPI_for_RTC.cpp:27