test rtc

PCF85263AT.h

Committer:
irsanjul
Date:
2020-06-17
Revision:
0:fa906a89a756

File content as of revision 0:fa906a89a756:

#ifndef PCF85263AT_H
#define PCF85263AT_H

#include "mbed.h"

#define address 0xA2

class PCF85263AT
{
public:
    
    enum RegisterName
    {
        // Time and Date Register			| Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
		MSEC		= 0x00, // Mili Second	|                           ( 0 - 99 )                          |
        SEC         = 0x01, // Second       |   OS  |                       ( 0 - 59 )                      |
        MIN         = 0x02, // Minute       | EMON  |                       ( 0 - 59 )                      |
        HOUR        = 0x03, // Hour         |   X   |   X   | AM/PM |       ( 1 - 12 )                      |
                            // Hour         |   X   |   X   |               ( 0 - 23 )                      |
        DAY         = 0x04, // Day          |   X   |   X   |               ( 1 - 31 )                      |
        WDAY        = 0x05, // Day of week  |   X   |   X   |   X   |   X   |   X   |       ( 0 - 6 )       |
        MONTH       = 0x06, // month        |   X   |   X   |   X   |               ( 1 - 12 )              |
        YEAR        = 0x07, // year         |                           ( 0 - 99 )                          |
        
        // Alarm1 register
		SECALARM	= 0x08,	// Second1		|   X   |                       ( 0 - 59 )                      |
        MINALARM    = 0x09, // Minute1      |   X   |                       ( 0 - 59 )                      |
        HOURALARM   = 0x0A, // Hour1        |   X   |   X   | AM/PM |       ( 1 - 12 )                      |
                            // Hour1        |   X   |   X   |               ( 0 - 23 )                      |
        DAYALARM    = 0x0B, // Day          |   X   |   X   |               ( 1 - 31 )                      |
        MONALARM    = 0x0C, // Day of week  |   X   |   X   |   X   |               ( 1 - 12 )              |
		
		// Alarm2 register
        MINALARM2   = 0x0D, // Minute1      |   X   |                       ( 0 - 59 )                      |
        HOURALARM2  = 0x0E, // Hour1        |   X   |   X   | AM/PM |       ( 1 - 12 )                      |
        WDAYALARM2  = 0x0F, // Day          |   X   |   X   |   X   |   X   |   X   |       ( 0 - 6 )       |
		
		// RTC Alarm Enable
		ALARMEN		= 0x10,	// Alarm Enable	|WDAY2E | HR2E  | MIN2E | MON1E | DAYE  | HR1E  | MIN1E | SEC1E |
		
		// OFFSET Register
        OFFSET      = 0x24, // Offset       |								[7:0]							|
		
		// CONTROL REGISTER
		OSCI		= 0x25, // Oscilator	| CLKIV | OFFM  | 12_24 |  LOWJ |   OSCD[1:0]   |    CL[1:0]    |
		BTRSW		= 0x26, // BatterySwitch|   X   |   X   |   X   | BSOFF | BSRR  |   BSM[1:0]    | BSTH  |
        PINIO       = 0x27, // Pin I/O      | CLKPM | TSPULL| TSL   | TSIM  |   TSPM[1:0]   | INTAPM[1:0]   |
		FUNCT		= 0x28, // Fungtion		| 100TH |   PI [2:0]    |  RTCM | STOPM |        COF[2:0]       |
		FLAG		= 0x2B, // Flags		|  PIF  |  A2F  |  A1F  |  WDF  |  BSF  | TSR3F | TSR2F | TSR1F |
		
		// STOP
		STOPEN		= 0x2E, // Stop Enable	|   X   |   X   |   X   |   X   |   X   |   X   |   X   |  STOP |
		
		// RESET
        RESET       = 0x2F // Reset RTC    |  CPR  |   0   |   1   |   0   |  SR   |   1   |   0   |  CTS  |
    };
    
    bool write(char adr, char data);
    char read(char adr);
    time_t now();
    bool set_time(time_t time);
    bool IsConnected();
    bool software_reset();
    
    PCF85263AT(PinName sda, PinName scl);
    ~PCF85263AT();
    
private:
    I2C i2c;
    char data[64];
    char w[32];
    char r[32];
    
    static int bcdToDecimal(int bcd) {
        return ((bcd & 0xF0) >> 4) * 10 + (bcd & 0x0F);
    }

    static int decimalToBcd(int dec) {
        return (dec % 10) + ((dec / 10) << 4);
    }
};

#endif // PCF85263AT_H