copy from mbed
PCF8523.h@1:41dd31bbbe6d, 2020-06-18 (annotated)
- Committer:
- irsanjul
- Date:
- Thu Jun 18 08:57:58 2020 +0000
- Revision:
- 1:41dd31bbbe6d
- Parent:
- 0:b7ac3add7d83
pcf8523
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
irsanjul | 0:b7ac3add7d83 | 1 | #ifndef PCF8523_H |
irsanjul | 0:b7ac3add7d83 | 2 | #define PCF8523_H |
irsanjul | 0:b7ac3add7d83 | 3 | |
irsanjul | 0:b7ac3add7d83 | 4 | #include "mbed.h" |
irsanjul | 0:b7ac3add7d83 | 5 | |
irsanjul | 0:b7ac3add7d83 | 6 | #define address 0xD0 |
irsanjul | 0:b7ac3add7d83 | 7 | |
irsanjul | 0:b7ac3add7d83 | 8 | class PCF8523 |
irsanjul | 0:b7ac3add7d83 | 9 | { |
irsanjul | 0:b7ac3add7d83 | 10 | public: |
irsanjul | 0:b7ac3add7d83 | 11 | |
irsanjul | 0:b7ac3add7d83 | 12 | enum RegisterName |
irsanjul | 0:b7ac3add7d83 | 13 | { |
irsanjul | 0:b7ac3add7d83 | 14 | // Control Register | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
irsanjul | 0:b7ac3add7d83 | 15 | CTRL1 = 0x00, // Ctrl 1 |Cap Sel| T | Stop | SR | 12-24 | SIE | AIE | CIE | |
irsanjul | 0:b7ac3add7d83 | 16 | CTRL2 = 0x01, // Ctrl 2 | WTAF | CTAF | CTBF | SF | AF | WTAIE | CTAIE | CTBIE | |
irsanjul | 0:b7ac3add7d83 | 17 | CTRL3 = 0x02, // Ctrl 3 | PM [2:0] | X | BSF | BLF | BSIE | BLIE | |
irsanjul | 0:b7ac3add7d83 | 18 | |
irsanjul | 0:b7ac3add7d83 | 19 | // Time and Date Register |
irsanjul | 0:b7ac3add7d83 | 20 | SEC = 0x03, // Second | OS | ( 0 - 59 ) | |
irsanjul | 0:b7ac3add7d83 | 21 | MIN = 0x04, // Minute | X | ( 0 - 59 ) | |
irsanjul | 0:b7ac3add7d83 | 22 | HOUR = 0x05, // Hour | X | X | AM/PM | ( 1 - 12 ) | |
irsanjul | 0:b7ac3add7d83 | 23 | // Hour | X | X | ( 0 - 23 ) | |
irsanjul | 0:b7ac3add7d83 | 24 | DAY = 0x06, // Day | X | X | ( 1 - 31 ) | |
irsanjul | 0:b7ac3add7d83 | 25 | WDAY = 0x07, // Day of week | X | X | X | X | X | ( 0 - 6 ) | |
irsanjul | 0:b7ac3add7d83 | 26 | MONTH = 0x08, // month | X | X | X | ( 1 - 12 ) | |
irsanjul | 0:b7ac3add7d83 | 27 | YEAR = 0x09, // year | ( 0 - 99 ) | |
irsanjul | 0:b7ac3add7d83 | 28 | |
irsanjul | 0:b7ac3add7d83 | 29 | // Alarm register |
irsanjul | 0:b7ac3add7d83 | 30 | MINALARM = 0x0A, // Minute | AEN_M | ( 0 - 59 ) | |
irsanjul | 0:b7ac3add7d83 | 31 | HOURALARM = 0x0B, // Hour | AEN_H | X | ( 0 - 23 ) | |
irsanjul | 0:b7ac3add7d83 | 32 | // Hour | AEN_H | X | AM/PM | ( 1 - 12 ) | |
irsanjul | 0:b7ac3add7d83 | 33 | DAYALARM = 0x0C, // Day | AEN_D | X | ( 1 - 31 ) | |
irsanjul | 0:b7ac3add7d83 | 34 | WDAYALARM = 0x0D, // Day of week | AEN_W | X | X | X | X | ( 0 - 6 ) | |
irsanjul | 0:b7ac3add7d83 | 35 | |
irsanjul | 0:b7ac3add7d83 | 36 | // Offset Control Register |
irsanjul | 0:b7ac3add7d83 | 37 | OFFSET = 0x0E, // OffSet ctrl | MODE | OFFSET | |
irsanjul | 0:b7ac3add7d83 | 38 | |
irsanjul | 0:b7ac3add7d83 | 39 | // ClockOut adn Timer Register |
irsanjul | 0:b7ac3add7d83 | 40 | TMRCLKOUT = 0x0F, // Timer Clk Out| TAM | TBM | COF | TAC | TBC | |
irsanjul | 0:b7ac3add7d83 | 41 | TIMERAFR = 0x10, // Timer A Freq | X | X | X | X | X | TAQ | |
irsanjul | 0:b7ac3add7d83 | 42 | TIMERARG = 0x11, // Timer A Reg | T_A [7:0] | |
irsanjul | 0:b7ac3add7d83 | 43 | TIMERBFR = 0x12, // Timer B Freq | X | TBW | X | TBQ | |
irsanjul | 0:b7ac3add7d83 | 44 | TIMERBRG = 0x13, // Timer B Reg | T_B [7:0] | |
irsanjul | 0:b7ac3add7d83 | 45 | }; |
irsanjul | 0:b7ac3add7d83 | 46 | |
irsanjul | 0:b7ac3add7d83 | 47 | bool write(char adr, char data); |
irsanjul | 0:b7ac3add7d83 | 48 | char read(char adr); |
irsanjul | 0:b7ac3add7d83 | 49 | time_t now(); |
irsanjul | 0:b7ac3add7d83 | 50 | bool set_time(time_t time); |
irsanjul | 0:b7ac3add7d83 | 51 | bool set_alarm(const struct tm &now, bool min_en=false, bool hour_en=false, bool mday_en=false); |
irsanjul | 0:b7ac3add7d83 | 52 | bool enable_alarm(bool enable=false); |
irsanjul | 0:b7ac3add7d83 | 53 | bool alarm_off(char buffer); |
irsanjul | 0:b7ac3add7d83 | 54 | bool check_alarm(); |
irsanjul | 0:b7ac3add7d83 | 55 | bool IsConnected(); |
irsanjul | 0:b7ac3add7d83 | 56 | bool software_reset(); |
irsanjul | 1:41dd31bbbe6d | 57 | bool Initialize(char adr, uint8_t val); |
irsanjul | 0:b7ac3add7d83 | 58 | |
irsanjul | 0:b7ac3add7d83 | 59 | PCF8523(PinName scl, PinName sda); |
irsanjul | 0:b7ac3add7d83 | 60 | ~PCF8523(); |
irsanjul | 0:b7ac3add7d83 | 61 | |
irsanjul | 0:b7ac3add7d83 | 62 | private: |
irsanjul | 0:b7ac3add7d83 | 63 | I2C i2c; |
irsanjul | 0:b7ac3add7d83 | 64 | char data[64]; |
irsanjul | 0:b7ac3add7d83 | 65 | char w[32]; |
irsanjul | 0:b7ac3add7d83 | 66 | char r[32]; |
irsanjul | 0:b7ac3add7d83 | 67 | |
irsanjul | 0:b7ac3add7d83 | 68 | static int bcdToDecimal(int bcd) { |
irsanjul | 0:b7ac3add7d83 | 69 | return ((bcd & 0xF0) >> 4) * 10 + (bcd & 0x0F); |
irsanjul | 0:b7ac3add7d83 | 70 | } |
irsanjul | 0:b7ac3add7d83 | 71 | |
irsanjul | 0:b7ac3add7d83 | 72 | static int decimalToBcd(int dec) { |
irsanjul | 0:b7ac3add7d83 | 73 | return (dec % 10) + ((dec / 10) << 4); |
irsanjul | 0:b7ac3add7d83 | 74 | } |
irsanjul | 0:b7ac3add7d83 | 75 | }; |
irsanjul | 0:b7ac3add7d83 | 76 | |
irsanjul | 0:b7ac3add7d83 | 77 | #endif |