test rtc
PCF85263AT.h@0:fa906a89a756, 2020-06-17 (annotated)
- Committer:
- irsanjul
- Date:
- Wed Jun 17 08:46:25 2020 +0000
- Revision:
- 0:fa906a89a756
test rtc
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
irsanjul | 0:fa906a89a756 | 1 | #ifndef PCF85263AT_H |
irsanjul | 0:fa906a89a756 | 2 | #define PCF85263AT_H |
irsanjul | 0:fa906a89a756 | 3 | |
irsanjul | 0:fa906a89a756 | 4 | #include "mbed.h" |
irsanjul | 0:fa906a89a756 | 5 | |
irsanjul | 0:fa906a89a756 | 6 | #define address 0xA2 |
irsanjul | 0:fa906a89a756 | 7 | |
irsanjul | 0:fa906a89a756 | 8 | class PCF85263AT |
irsanjul | 0:fa906a89a756 | 9 | { |
irsanjul | 0:fa906a89a756 | 10 | public: |
irsanjul | 0:fa906a89a756 | 11 | |
irsanjul | 0:fa906a89a756 | 12 | enum RegisterName |
irsanjul | 0:fa906a89a756 | 13 | { |
irsanjul | 0:fa906a89a756 | 14 | // Time and Date Register | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
irsanjul | 0:fa906a89a756 | 15 | MSEC = 0x00, // Mili Second | ( 0 - 99 ) | |
irsanjul | 0:fa906a89a756 | 16 | SEC = 0x01, // Second | OS | ( 0 - 59 ) | |
irsanjul | 0:fa906a89a756 | 17 | MIN = 0x02, // Minute | EMON | ( 0 - 59 ) | |
irsanjul | 0:fa906a89a756 | 18 | HOUR = 0x03, // Hour | X | X | AM/PM | ( 1 - 12 ) | |
irsanjul | 0:fa906a89a756 | 19 | // Hour | X | X | ( 0 - 23 ) | |
irsanjul | 0:fa906a89a756 | 20 | DAY = 0x04, // Day | X | X | ( 1 - 31 ) | |
irsanjul | 0:fa906a89a756 | 21 | WDAY = 0x05, // Day of week | X | X | X | X | X | ( 0 - 6 ) | |
irsanjul | 0:fa906a89a756 | 22 | MONTH = 0x06, // month | X | X | X | ( 1 - 12 ) | |
irsanjul | 0:fa906a89a756 | 23 | YEAR = 0x07, // year | ( 0 - 99 ) | |
irsanjul | 0:fa906a89a756 | 24 | |
irsanjul | 0:fa906a89a756 | 25 | // Alarm1 register |
irsanjul | 0:fa906a89a756 | 26 | SECALARM = 0x08, // Second1 | X | ( 0 - 59 ) | |
irsanjul | 0:fa906a89a756 | 27 | MINALARM = 0x09, // Minute1 | X | ( 0 - 59 ) | |
irsanjul | 0:fa906a89a756 | 28 | HOURALARM = 0x0A, // Hour1 | X | X | AM/PM | ( 1 - 12 ) | |
irsanjul | 0:fa906a89a756 | 29 | // Hour1 | X | X | ( 0 - 23 ) | |
irsanjul | 0:fa906a89a756 | 30 | DAYALARM = 0x0B, // Day | X | X | ( 1 - 31 ) | |
irsanjul | 0:fa906a89a756 | 31 | MONALARM = 0x0C, // Day of week | X | X | X | ( 1 - 12 ) | |
irsanjul | 0:fa906a89a756 | 32 | |
irsanjul | 0:fa906a89a756 | 33 | // Alarm2 register |
irsanjul | 0:fa906a89a756 | 34 | MINALARM2 = 0x0D, // Minute1 | X | ( 0 - 59 ) | |
irsanjul | 0:fa906a89a756 | 35 | HOURALARM2 = 0x0E, // Hour1 | X | X | AM/PM | ( 1 - 12 ) | |
irsanjul | 0:fa906a89a756 | 36 | WDAYALARM2 = 0x0F, // Day | X | X | X | X | X | ( 0 - 6 ) | |
irsanjul | 0:fa906a89a756 | 37 | |
irsanjul | 0:fa906a89a756 | 38 | // RTC Alarm Enable |
irsanjul | 0:fa906a89a756 | 39 | ALARMEN = 0x10, // Alarm Enable |WDAY2E | HR2E | MIN2E | MON1E | DAYE | HR1E | MIN1E | SEC1E | |
irsanjul | 0:fa906a89a756 | 40 | |
irsanjul | 0:fa906a89a756 | 41 | // OFFSET Register |
irsanjul | 0:fa906a89a756 | 42 | OFFSET = 0x24, // Offset | [7:0] | |
irsanjul | 0:fa906a89a756 | 43 | |
irsanjul | 0:fa906a89a756 | 44 | // CONTROL REGISTER |
irsanjul | 0:fa906a89a756 | 45 | OSCI = 0x25, // Oscilator | CLKIV | OFFM | 12_24 | LOWJ | OSCD[1:0] | CL[1:0] | |
irsanjul | 0:fa906a89a756 | 46 | BTRSW = 0x26, // BatterySwitch| X | X | X | BSOFF | BSRR | BSM[1:0] | BSTH | |
irsanjul | 0:fa906a89a756 | 47 | PINIO = 0x27, // Pin I/O | CLKPM | TSPULL| TSL | TSIM | TSPM[1:0] | INTAPM[1:0] | |
irsanjul | 0:fa906a89a756 | 48 | FUNCT = 0x28, // Fungtion | 100TH | PI [2:0] | RTCM | STOPM | COF[2:0] | |
irsanjul | 0:fa906a89a756 | 49 | FLAG = 0x2B, // Flags | PIF | A2F | A1F | WDF | BSF | TSR3F | TSR2F | TSR1F | |
irsanjul | 0:fa906a89a756 | 50 | |
irsanjul | 0:fa906a89a756 | 51 | // STOP |
irsanjul | 0:fa906a89a756 | 52 | STOPEN = 0x2E, // Stop Enable | X | X | X | X | X | X | X | STOP | |
irsanjul | 0:fa906a89a756 | 53 | |
irsanjul | 0:fa906a89a756 | 54 | // RESET |
irsanjul | 0:fa906a89a756 | 55 | RESET = 0x2F // Reset RTC | CPR | 0 | 1 | 0 | SR | 1 | 0 | CTS | |
irsanjul | 0:fa906a89a756 | 56 | }; |
irsanjul | 0:fa906a89a756 | 57 | |
irsanjul | 0:fa906a89a756 | 58 | bool write(char adr, char data); |
irsanjul | 0:fa906a89a756 | 59 | char read(char adr); |
irsanjul | 0:fa906a89a756 | 60 | time_t now(); |
irsanjul | 0:fa906a89a756 | 61 | bool set_time(time_t time); |
irsanjul | 0:fa906a89a756 | 62 | bool IsConnected(); |
irsanjul | 0:fa906a89a756 | 63 | bool software_reset(); |
irsanjul | 0:fa906a89a756 | 64 | |
irsanjul | 0:fa906a89a756 | 65 | PCF85263AT(PinName sda, PinName scl); |
irsanjul | 0:fa906a89a756 | 66 | ~PCF85263AT(); |
irsanjul | 0:fa906a89a756 | 67 | |
irsanjul | 0:fa906a89a756 | 68 | private: |
irsanjul | 0:fa906a89a756 | 69 | I2C i2c; |
irsanjul | 0:fa906a89a756 | 70 | char data[64]; |
irsanjul | 0:fa906a89a756 | 71 | char w[32]; |
irsanjul | 0:fa906a89a756 | 72 | char r[32]; |
irsanjul | 0:fa906a89a756 | 73 | |
irsanjul | 0:fa906a89a756 | 74 | static int bcdToDecimal(int bcd) { |
irsanjul | 0:fa906a89a756 | 75 | return ((bcd & 0xF0) >> 4) * 10 + (bcd & 0x0F); |
irsanjul | 0:fa906a89a756 | 76 | } |
irsanjul | 0:fa906a89a756 | 77 | |
irsanjul | 0:fa906a89a756 | 78 | static int decimalToBcd(int dec) { |
irsanjul | 0:fa906a89a756 | 79 | return (dec % 10) + ((dec / 10) << 4); |
irsanjul | 0:fa906a89a756 | 80 | } |
irsanjul | 0:fa906a89a756 | 81 | }; |
irsanjul | 0:fa906a89a756 | 82 | |
irsanjul | 0:fa906a89a756 | 83 | #endif // PCF85263AT_H |