RTC PCF2129 Library

Committer:
king33jp
Date:
Tue Jul 21 15:13:41 2015 +0000
Revision:
1:a2f545432493
Parent:
0:7f72438fee70
i2c addr parameter is deleted.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
king33jp 0:7f72438fee70 1 /*
king33jp 0:7f72438fee70 2 * PCF2129 mbed library
king33jp 0:7f72438fee70 3 *
king33jp 0:7f72438fee70 4 * @author king33jp , imAkichi
king33jp 0:7f72438fee70 5 * @version 0.1
king33jp 0:7f72438fee70 6 * @date 13-Jul-2015
king33jp 0:7f72438fee70 7 *
king33jp 0:7f72438fee70 8 * datasheet:
king33jp 0:7f72438fee70 9 * http://www.jp.nxp.com/products/interface_and_connectivity/real_time_clocks/rtcs_with_temp_compensation/PCF2129T.html
king33jp 0:7f72438fee70 10 *
king33jp 0:7f72438fee70 11 */
king33jp 0:7f72438fee70 12
king33jp 0:7f72438fee70 13 #ifndef MBED_PCF2129
king33jp 0:7f72438fee70 14 #define MBED_PCF2129
king33jp 0:7f72438fee70 15
king33jp 0:7f72438fee70 16 #include "mbed.h"
king33jp 0:7f72438fee70 17
king33jp 0:7f72438fee70 18 /** PCF2129 class
king33jp 0:7f72438fee70 19 *
king33jp 0:7f72438fee70 20 * PCF2129AT is RTC IC.
king33jp 0:7f72438fee70 21 * datasheet is followed.
king33jp 0:7f72438fee70 22 * http://www.jp.nxp.com/products/interface_and_connectivity/real_time_clocks/rtcs_with_temp_compensation/PCF2129T.html
king33jp 0:7f72438fee70 23 * Example:
king33jp 0:7f72438fee70 24 * @code
king33jp 0:7f72438fee70 25 * #include "mbed.h"
king33jp 0:7f72438fee70 26 * #include "PCF2129.h"
king33jp 0:7f72438fee70 27 *
king33jp 0:7f72438fee70 28 * PCF2129 rtc( PTE0, PTE1 ); // sda,scl
king33jp 0:7f72438fee70 29 *
king33jp 0:7f72438fee70 30 * int main()
king33jp 0:7f72438fee70 31 * struct tm dt,*dtp;
king33jp 0:7f72438fee70 32 * dtp = &dt;
king33jp 0:7f72438fee70 33 * dt.tm_sec = 0;
king33jp 0:7f72438fee70 34 * dt.tm_min = 0;
king33jp 0:7f72438fee70 35 * dt.tm_hour = 23;
king33jp 0:7f72438fee70 36 * dt.tm_mday = 25;
king33jp 0:7f72438fee70 37 * dt.tm_mon = 12 - 1; // Janualy=0
king33jp 0:7f72438fee70 38 * dt.tm_year = 115; // 1900 is start. PCF2129 is start 2000
king33jp 0:7f72438fee70 39 *
king33jp 0:7f72438fee70 40 * t = mktime( &dt );
king33jp 0:7f72438fee70 41 * dtp = localtime(&t);
king33jp 0:7f72438fee70 42 *
king33jp 0:7f72438fee70 43 * {
king33jp 0:7f72438fee70 44 * if ( rtc.is_init_required() ) {
king33jp 0:7f72438fee70 45 * rtc.set_time( dtp );
king33jp 0:7f72438fee70 46 * }
king33jp 0:7f72438fee70 47 *
king33jp 0:7f72438fee70 48 * while ( 1 ) {
king33jp 0:7f72438fee70 49 * t = rtc.time( NULL );
king33jp 0:7f72438fee70 50 * printf( "%s\r", ctime( &t ) );
king33jp 0:7f72438fee70 51 * wait( 0.25 );
king33jp 0:7f72438fee70 52 * }
king33jp 0:7f72438fee70 53 * }
king33jp 0:7f72438fee70 54 * @endcode
king33jp 0:7f72438fee70 55 */
king33jp 0:7f72438fee70 56
king33jp 0:7f72438fee70 57 class PCF2129
king33jp 0:7f72438fee70 58 {
king33jp 0:7f72438fee70 59 public:
king33jp 0:7f72438fee70 60 /** Error code */
king33jp 0:7f72438fee70 61 typedef enum {
king33jp 0:7f72438fee70 62 NO_ERROR = 0,
king33jp 0:7f72438fee70 63 CLOCK_INTEGRITY_FAIL = 1,
king33jp 0:7f72438fee70 64 I2C_ACCESS_FAIL = 2,
king33jp 0:7f72438fee70 65 TIME_FUNC_ERROR = ((time_t)-1)
king33jp 0:7f72438fee70 66 }
king33jp 0:7f72438fee70 67 ErrorNum;
king33jp 0:7f72438fee70 68
king33jp 0:7f72438fee70 69 /** Create a PCF2129 instance connected to specified I2C pins with specified address
king33jp 0:7f72438fee70 70 *
king33jp 0:7f72438fee70 71 * @param I2C_sda I2C-bus SDA pin
king33jp 0:7f72438fee70 72 * @param I2C_scl I2C-bus SCL pin
king33jp 0:7f72438fee70 73 */
king33jp 1:a2f545432493 74 PCF2129( PinName sda, PinName scl );
king33jp 0:7f72438fee70 75
king33jp 0:7f72438fee70 76 /** Destractor
king33jp 0:7f72438fee70 77 */
king33jp 0:7f72438fee70 78 ~PCF2129();
king33jp 0:7f72438fee70 79
king33jp 0:7f72438fee70 80
king33jp 0:7f72438fee70 81 /** Clock integrity check
king33jp 0:7f72438fee70 82 *
king33jp 0:7f72438fee70 83 * @return non-zero value if the clock was stopped (means need to set the time)
king33jp 0:7f72438fee70 84 */
king33jp 0:7f72438fee70 85 int is_init_required( void );
king33jp 0:7f72438fee70 86
king33jp 0:7f72438fee70 87 /** Set the time
king33jp 0:7f72438fee70 88 *
king33jp 0:7f72438fee70 89 * @param dtp Pointer to struct tm
king33jp 0:7f72438fee70 90 * @return Error code (NO_ERROR==0)
king33jp 0:7f72438fee70 91 */
king33jp 0:7f72438fee70 92 int set_time( struct tm *dtp );
king33jp 0:7f72438fee70 93
king33jp 0:7f72438fee70 94 /** Set the time
king33jp 0:7f72438fee70 95 *
king33jp 0:7f72438fee70 96 * @param tp pointer to time_t
king33jp 0:7f72438fee70 97 * @return Error code (NO_ERROR==0)
king33jp 0:7f72438fee70 98 */
king33jp 0:7f72438fee70 99 int set_time( time_t *tp );
king33jp 0:7f72438fee70 100
king33jp 0:7f72438fee70 101 /** Get time of day
king33jp 0:7f72438fee70 102 *
king33jp 0:7f72438fee70 103 * This function works similar to "time()" in standard-C-library
king33jp 0:7f72438fee70 104 *
king33jp 0:7f72438fee70 105 * @param tp Pointer to time_t
king33jp 0:7f72438fee70 106 * @return Error code (NO_ERROR==0)
king33jp 0:7f72438fee70 107 */
king33jp 0:7f72438fee70 108 time_t get_time( time_t *tp );
king33jp 0:7f72438fee70 109
king33jp 0:7f72438fee70 110 char Dec2RtcData(char tmp);
king33jp 0:7f72438fee70 111 char RtcData2Dec(char tmp);
king33jp 0:7f72438fee70 112
king33jp 0:7f72438fee70 113 private:
king33jp 0:7f72438fee70 114 int init( char vControl_1, char vControl_2, char vControl_3, char vCLKOUT_ctl );
king33jp 0:7f72438fee70 115 int set_register( char reg_addr, char reg_data );
king33jp 0:7f72438fee70 116 int read_register( char reg_addr );
king33jp 0:7f72438fee70 117
king33jp 0:7f72438fee70 118 I2C m_i2c;
king33jp 0:7f72438fee70 119 }
king33jp 0:7f72438fee70 120 ;
king33jp 0:7f72438fee70 121 #endif // end of "#ifndef MBED_PCF2129"