Demo code for PCF2127 (and PCF2129) library. Setting of time and displaying can be done on PC-terminal application through the USB Serial Port. PCF2127 and PCF2129 are high accuracy real-time-clock (RTC) module. This library provides simple interface to accessing clock information.

Dependencies:   PCF2127 mbed

Demo code for PCF2127 library

Information

The "PCF2127" library works for PCF2127T, PCF2127AT, PCF2129T and PCF2129AT.

The device information is available on the component page and the library page.

PCF2127T
PCF2127T is in SO16 package

Committer:
nxp_ip
Date:
Wed Dec 10 02:08:15 2014 +0000
Revision:
2:47151300f95a
Parent:
1:86dc8dfe6a20
version to include latest library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nxp_ip 0:658f351580f0 1 /*
nxp_ip 0:658f351580f0 2 * A sample code for PCF2127 library
nxp_ip 0:658f351580f0 3 *
nxp_ip 0:658f351580f0 4 * @author Akifumi (Tedd) OKANO, NXP Semiconductors
nxp_ip 2:47151300f95a 5 * @version 1.8
nxp_ip 1:86dc8dfe6a20 6 * @date 10-Dec-2014
nxp_ip 0:658f351580f0 7 *
nxp_ip 0:658f351580f0 8 * PCF2127 is a "real time clock (RTC)" module which is including a Xtal and TCXO
nxp_ip 0:658f351580f0 9 * http://www.nxp.com/products/interface_and_connectivity/real_time_clocks/rtcs_with_temp_compensation/series/PCF2127.html
nxp_ip 0:658f351580f0 10 *
nxp_ip 0:658f351580f0 11 * RTC initializing part is ported from..
nxp_ip 0:658f351580f0 12 * http://mbed.org/users/roen/notebook/real-time/
nxp_ip 0:658f351580f0 13 *
nxp_ip 0:658f351580f0 14 * This code is refined version of..
nxp_ip 0:658f351580f0 15 * http://developer.mbed.org/users/okano/code/NXP_PCF2127A/
nxp_ip 0:658f351580f0 16 */
nxp_ip 0:658f351580f0 17
nxp_ip 0:658f351580f0 18 #include "mbed.h"
nxp_ip 0:658f351580f0 19 #include "PCF2127.h"
nxp_ip 0:658f351580f0 20
nxp_ip 0:658f351580f0 21 PCF2127 rtc( p28, p27 );
nxp_ip 0:658f351580f0 22
nxp_ip 0:658f351580f0 23 void show_time( void );
nxp_ip 0:658f351580f0 24 void set_time( void );
nxp_ip 0:658f351580f0 25
nxp_ip 1:86dc8dfe6a20 26 void RAM_dump( void ); // for PCF2127 only
nxp_ip 1:86dc8dfe6a20 27 void RAM_read_test( void ); // for PCF2127 only
nxp_ip 1:86dc8dfe6a20 28 void RAM_write_test( void ); // for PCF2127 only
nxp_ip 1:86dc8dfe6a20 29 void RAM_test( int last_RAM_content_invalid ); // for PCF2127 only
nxp_ip 1:86dc8dfe6a20 30
nxp_ip 0:658f351580f0 31 int main()
nxp_ip 0:658f351580f0 32 {
nxp_ip 0:658f351580f0 33 printf( "PCF2127 demo started.\r\n" );
nxp_ip 0:658f351580f0 34
nxp_ip 1:86dc8dfe6a20 35 int clock_integrity_fail = rtc.is_init_required();
nxp_ip 1:86dc8dfe6a20 36
nxp_ip 1:86dc8dfe6a20 37 if ( clock_integrity_fail ) {
nxp_ip 0:658f351580f0 38 set_time();
nxp_ip 0:658f351580f0 39 }
nxp_ip 0:658f351580f0 40
nxp_ip 1:86dc8dfe6a20 41 /*
nxp_ip 1:86dc8dfe6a20 42 * Next line can be enabled when using PCF2127 only
nxp_ip 1:86dc8dfe6a20 43 */
nxp_ip 1:86dc8dfe6a20 44 //RAM_test( clock_integrity_fail );
nxp_ip 1:86dc8dfe6a20 45
nxp_ip 0:658f351580f0 46 while ( 1 ) {
nxp_ip 0:658f351580f0 47 show_time();
nxp_ip 0:658f351580f0 48 wait( 0.25 );
nxp_ip 0:658f351580f0 49 }
nxp_ip 0:658f351580f0 50 }
nxp_ip 0:658f351580f0 51
nxp_ip 0:658f351580f0 52 void show_time( void )
nxp_ip 0:658f351580f0 53 {
nxp_ip 0:658f351580f0 54 struct tm dt, *dtp;
nxp_ip 0:658f351580f0 55 time_t t;
nxp_ip 0:658f351580f0 56 char s[ 30 ];
nxp_ip 1:86dc8dfe6a20 57
nxp_ip 0:658f351580f0 58 dtp = &dt;
nxp_ip 0:658f351580f0 59
nxp_ip 0:658f351580f0 60 rtc.clear_intr();
nxp_ip 0:658f351580f0 61
nxp_ip 0:658f351580f0 62 // get time information from PCF2127
nxp_ip 1:86dc8dfe6a20 63 if ( PCF2127::TIME_FUNC_ERROR == (t = rtc.time( NULL )) ) {
nxp_ip 0:658f351580f0 64 printf( "error at reading time\r\n" );
nxp_ip 0:658f351580f0 65 return;
nxp_ip 0:658f351580f0 66 }
nxp_ip 1:86dc8dfe6a20 67
nxp_ip 0:658f351580f0 68 dtp = localtime( &t );
nxp_ip 0:658f351580f0 69
nxp_ip 0:658f351580f0 70 // print time and date on terminal
nxp_ip 0:658f351580f0 71 strftime( s, 30, "%H:%M:%S, %Y/%b/%d %a", dtp );
nxp_ip 0:658f351580f0 72 printf( "%s\r\n", s );
nxp_ip 0:658f351580f0 73 }
nxp_ip 0:658f351580f0 74
nxp_ip 0:658f351580f0 75 void set_time( void )
nxp_ip 0:658f351580f0 76 {
nxp_ip 0:658f351580f0 77 #define MAX_CHAR_LENGTH 21
nxp_ip 0:658f351580f0 78 char s[ MAX_CHAR_LENGTH ];
nxp_ip 0:658f351580f0 79
nxp_ip 0:658f351580f0 80 printf( "Enter current date and time:\r\n" );
nxp_ip 0:658f351580f0 81 printf( "YYYY MM DD HH MM SS[enter]\r\n" );
nxp_ip 0:658f351580f0 82
nxp_ip 0:658f351580f0 83 fgets( s, MAX_CHAR_LENGTH, stdin );
nxp_ip 0:658f351580f0 84 printf( "user input: \"%s\"\r\n", s );
nxp_ip 0:658f351580f0 85
nxp_ip 0:658f351580f0 86 rtc.set_time( s );
nxp_ip 0:658f351580f0 87 }
nxp_ip 1:86dc8dfe6a20 88
nxp_ip 1:86dc8dfe6a20 89 void RAM_function_test( void )
nxp_ip 1:86dc8dfe6a20 90 {
nxp_ip 1:86dc8dfe6a20 91 }
nxp_ip 1:86dc8dfe6a20 92
nxp_ip 1:86dc8dfe6a20 93 void RAM_dump( void )
nxp_ip 1:86dc8dfe6a20 94 {
nxp_ip 1:86dc8dfe6a20 95 char b[ 512 ];
nxp_ip 1:86dc8dfe6a20 96
nxp_ip 1:86dc8dfe6a20 97 if ( rtc.RAM_read( 0, b, 512 ) ) {
nxp_ip 1:86dc8dfe6a20 98 printf( "error at reading RAM\r\n" );
nxp_ip 1:86dc8dfe6a20 99 }
nxp_ip 1:86dc8dfe6a20 100
nxp_ip 1:86dc8dfe6a20 101 for ( int i = 0; i < 512; i++ ) {
nxp_ip 1:86dc8dfe6a20 102 if ( !(i % 16) ) {
nxp_ip 1:86dc8dfe6a20 103 printf( "\r\n 0x%03X(%03d): 0x", i, i );
nxp_ip 1:86dc8dfe6a20 104 }
nxp_ip 1:86dc8dfe6a20 105 printf( " %02X", b[ i ] );
nxp_ip 1:86dc8dfe6a20 106 }
nxp_ip 1:86dc8dfe6a20 107 }
nxp_ip 1:86dc8dfe6a20 108
nxp_ip 1:86dc8dfe6a20 109 const char *texts[] = {
nxp_ip 1:86dc8dfe6a20 110 "Love the life you live. Live the life you love.",
nxp_ip 1:86dc8dfe6a20 111 "It always seems impossible until it's done.",
nxp_ip 1:86dc8dfe6a20 112 "You'll never find a rainbow if you're looking down.",
nxp_ip 1:86dc8dfe6a20 113 "There is always light behind the clouds."
nxp_ip 1:86dc8dfe6a20 114 };
nxp_ip 1:86dc8dfe6a20 115
nxp_ip 1:86dc8dfe6a20 116 void RAM_test( int last_RAM_content_invalid )
nxp_ip 1:86dc8dfe6a20 117 {
nxp_ip 1:86dc8dfe6a20 118 char txt[ 64 ];
nxp_ip 1:86dc8dfe6a20 119 time_t t;
nxp_ip 1:86dc8dfe6a20 120
nxp_ip 1:86dc8dfe6a20 121 if ( !last_RAM_content_invalid ) {
nxp_ip 1:86dc8dfe6a20 122 rtc.RAM_read( 0, (char *)&t, sizeof( t ) );
nxp_ip 1:86dc8dfe6a20 123 rtc.RAM_read( 16, txt, sizeof( txt ) );
nxp_ip 1:86dc8dfe6a20 124 printf( "RAM test read\r\n" );
nxp_ip 1:86dc8dfe6a20 125 printf( " last program start was on %s\r", ctime( &t ) );
nxp_ip 1:86dc8dfe6a20 126 printf( " last saved text was \"%s\"\r\n", txt );
nxp_ip 1:86dc8dfe6a20 127 }
nxp_ip 1:86dc8dfe6a20 128
nxp_ip 1:86dc8dfe6a20 129 t = rtc.time( NULL );
nxp_ip 1:86dc8dfe6a20 130 rtc.RAM_write( 0, (char *)&t, sizeof( t ) );
nxp_ip 1:86dc8dfe6a20 131 rtc.RAM_write( 16, (char *)texts[ t % 4 ], strlen( texts[ t % 4 ] ) + 1 );
nxp_ip 1:86dc8dfe6a20 132 }
nxp_ip 1:86dc8dfe6a20 133