Xadow Watch with RGB OLED
Dependents: Xadow_Watch_RGBOLED Xadow_Watch_RGBOLED
DS1337.h@0:9d7c6f478d8c, 2014-04-01 (annotated)
- Committer:
- loovee
- Date:
- Tue Apr 01 07:02:12 2014 +0000
- Revision:
- 0:9d7c6f478d8c
..;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
loovee | 0:9d7c6f478d8c | 1 | /* |
loovee | 0:9d7c6f478d8c | 2 | DS1337.h - library for DS1337 rtc |
loovee | 0:9d7c6f478d8c | 3 | */ |
loovee | 0:9d7c6f478d8c | 4 | |
loovee | 0:9d7c6f478d8c | 5 | // ensure this library description is only included once |
loovee | 0:9d7c6f478d8c | 6 | #ifndef DS1337_h |
loovee | 0:9d7c6f478d8c | 7 | #define DS1337_h |
loovee | 0:9d7c6f478d8c | 8 | |
loovee | 0:9d7c6f478d8c | 9 | // include types & constants of Wiring core API |
loovee | 0:9d7c6f478d8c | 10 | #include "mbed.h" |
loovee | 0:9d7c6f478d8c | 11 | |
loovee | 0:9d7c6f478d8c | 12 | typedef int8_t byte; |
loovee | 0:9d7c6f478d8c | 13 | |
loovee | 0:9d7c6f478d8c | 14 | // indices within the rtc_bcd[] buffer |
loovee | 0:9d7c6f478d8c | 15 | #define DS1337_SEC 0 |
loovee | 0:9d7c6f478d8c | 16 | #define DS1337_MIN 1 |
loovee | 0:9d7c6f478d8c | 17 | #define DS1337_HR 2 |
loovee | 0:9d7c6f478d8c | 18 | #define DS1337_DOW 3 |
loovee | 0:9d7c6f478d8c | 19 | #define DS1337_DATE 4 |
loovee | 0:9d7c6f478d8c | 20 | #define DS1337_MTH 5 |
loovee | 0:9d7c6f478d8c | 21 | #define DS1337_YR 6 |
loovee | 0:9d7c6f478d8c | 22 | |
loovee | 0:9d7c6f478d8c | 23 | #define DS1337_BASE_YR 2000 |
loovee | 0:9d7c6f478d8c | 24 | |
loovee | 0:9d7c6f478d8c | 25 | #define DS1337_CTRL_ID 0xD0 |
loovee | 0:9d7c6f478d8c | 26 | |
loovee | 0:9d7c6f478d8c | 27 | #define I2C_FREQ 100000 |
loovee | 0:9d7c6f478d8c | 28 | |
loovee | 0:9d7c6f478d8c | 29 | // Define register bit masks |
loovee | 0:9d7c6f478d8c | 30 | #define DS1337_CLOCKHALT (1<<7) |
loovee | 0:9d7c6f478d8c | 31 | |
loovee | 0:9d7c6f478d8c | 32 | #define DS1337_LO_BCD 0xf |
loovee | 0:9d7c6f478d8c | 33 | #define DS1337_HI_BCD 0xf0 |
loovee | 0:9d7c6f478d8c | 34 | |
loovee | 0:9d7c6f478d8c | 35 | #define DS1337_HI_SEC 0x70 |
loovee | 0:9d7c6f478d8c | 36 | #define DS1337_HI_MIN 0x70 |
loovee | 0:9d7c6f478d8c | 37 | #define DS1337_HI_HR 0x30 |
loovee | 0:9d7c6f478d8c | 38 | #define DS1337_LO_DOW 0x07 |
loovee | 0:9d7c6f478d8c | 39 | #define DS1337_HI_DATE 0x30 |
loovee | 0:9d7c6f478d8c | 40 | #define DS1337_HI_MTH 0x30 |
loovee | 0:9d7c6f478d8c | 41 | #define DS1337_HI_YR 0xf0 |
loovee | 0:9d7c6f478d8c | 42 | |
loovee | 0:9d7c6f478d8c | 43 | #define DS1337_ARLM1 0x07 |
loovee | 0:9d7c6f478d8c | 44 | #define DS1337_ARLM1_LO_SEC 0xf |
loovee | 0:9d7c6f478d8c | 45 | #define DS1337_ARLM1_HI_SEC 0x70 |
loovee | 0:9d7c6f478d8c | 46 | #define DS1337_ARLM1_LO_MIN 0x70 |
loovee | 0:9d7c6f478d8c | 47 | #define DS1337_ARLM1_HI_MIN 0xf |
loovee | 0:9d7c6f478d8c | 48 | |
loovee | 0:9d7c6f478d8c | 49 | #define DS1337_SP 0x0E |
loovee | 0:9d7c6f478d8c | 50 | #define DS1337_SP_EOSC (1<<7) |
loovee | 0:9d7c6f478d8c | 51 | #define DS1337_SP_RS2 (1<<4) |
loovee | 0:9d7c6f478d8c | 52 | #define DS1337_SP_RS1 (1<<3) |
loovee | 0:9d7c6f478d8c | 53 | #define DS1337_SP_INTCN (1<<2) |
loovee | 0:9d7c6f478d8c | 54 | #define DS1337_SP_A2IE (1<<1) |
loovee | 0:9d7c6f478d8c | 55 | #define DS1337_SP_A1IE (1<<0) |
loovee | 0:9d7c6f478d8c | 56 | |
loovee | 0:9d7c6f478d8c | 57 | #define DS1337_STATUS 0x0F |
loovee | 0:9d7c6f478d8c | 58 | #define DS1337_STATUS_OSF (1<<7) |
loovee | 0:9d7c6f478d8c | 59 | #define DS1337_STATUS_A2F (1<<1) |
loovee | 0:9d7c6f478d8c | 60 | #define DS1337_STATUS_A1F (1<<0) |
loovee | 0:9d7c6f478d8c | 61 | |
loovee | 0:9d7c6f478d8c | 62 | /* Definitions for alarm repeat */ |
loovee | 0:9d7c6f478d8c | 63 | /* The private variable alarm_repeat holds the user's alarm repeat preference. However, the DS1337 encodes these in the topmost bit(s) of the 4 alarm registers. */ |
loovee | 0:9d7c6f478d8c | 64 | /* Splattering these bits across the alarm regs is handled in the writeAlarm() function. */ |
loovee | 0:9d7c6f478d8c | 65 | /* If DY/DT is set, the day field is interpreted as a DayOfWeek (1 ~ 7), else it is interpreted as a DayOfMonth.*/ |
loovee | 0:9d7c6f478d8c | 66 | |
loovee | 0:9d7c6f478d8c | 67 | /* user alarm_repeat bit mask: |
loovee | 0:9d7c6f478d8c | 68 | 7 6 5 4 3 2 1 0 |
loovee | 0:9d7c6f478d8c | 69 | [x x x A1M4 DY/DT A1M3 A1M2 A1M1] |
loovee | 0:9d7c6f478d8c | 70 | */ |
loovee | 0:9d7c6f478d8c | 71 | |
loovee | 0:9d7c6f478d8c | 72 | #define EVERY_SECOND B00010111 |
loovee | 0:9d7c6f478d8c | 73 | #define EVERY_MINUTE B00010110 |
loovee | 0:9d7c6f478d8c | 74 | #define EVERY_HOUR B00010100 |
loovee | 0:9d7c6f478d8c | 75 | #define EVERY_DAY B00010000 |
loovee | 0:9d7c6f478d8c | 76 | #define EVERY_WEEK B00001000 |
loovee | 0:9d7c6f478d8c | 77 | #define EVERY_MONTH B00000000 |
loovee | 0:9d7c6f478d8c | 78 | |
loovee | 0:9d7c6f478d8c | 79 | |
loovee | 0:9d7c6f478d8c | 80 | /* typedef struct { |
loovee | 0:9d7c6f478d8c | 81 | unsigned int year; |
loovee | 0:9d7c6f478d8c | 82 | unsigned char month; |
loovee | 0:9d7c6f478d8c | 83 | unsigned char day; |
loovee | 0:9d7c6f478d8c | 84 | unsigned char dayOfWeek; |
loovee | 0:9d7c6f478d8c | 85 | unsigned char hour; |
loovee | 0:9d7c6f478d8c | 86 | unsigned char minute; |
loovee | 0:9d7c6f478d8c | 87 | unsigned char second; |
loovee | 0:9d7c6f478d8c | 88 | } TIME; */ |
loovee | 0:9d7c6f478d8c | 89 | |
loovee | 0:9d7c6f478d8c | 90 | |
loovee | 0:9d7c6f478d8c | 91 | // library interface description |
loovee | 0:9d7c6f478d8c | 92 | class DS1337 { |
loovee | 0:9d7c6f478d8c | 93 | // user-accessible "public" interface |
loovee | 0:9d7c6f478d8c | 94 | public: |
loovee | 0:9d7c6f478d8c | 95 | DS1337( PinName sda, PinName slc); |
loovee | 0:9d7c6f478d8c | 96 | |
loovee | 0:9d7c6f478d8c | 97 | void readTime(void); |
loovee | 0:9d7c6f478d8c | 98 | unsigned char getSeconds(); |
loovee | 0:9d7c6f478d8c | 99 | unsigned char getMinutes(); |
loovee | 0:9d7c6f478d8c | 100 | unsigned char getHours(); |
loovee | 0:9d7c6f478d8c | 101 | unsigned char getDays(); |
loovee | 0:9d7c6f478d8c | 102 | unsigned char getDayOfWeek(); |
loovee | 0:9d7c6f478d8c | 103 | unsigned char getMonths(); |
loovee | 0:9d7c6f478d8c | 104 | unsigned int getYears(); |
loovee | 0:9d7c6f478d8c | 105 | |
loovee | 0:9d7c6f478d8c | 106 | void setSeconds(unsigned char); |
loovee | 0:9d7c6f478d8c | 107 | void setMinutes(unsigned char); |
loovee | 0:9d7c6f478d8c | 108 | void setHours(unsigned char); |
loovee | 0:9d7c6f478d8c | 109 | void setDays(unsigned char); |
loovee | 0:9d7c6f478d8c | 110 | void setDayOfWeek(unsigned char); |
loovee | 0:9d7c6f478d8c | 111 | void setMonths(unsigned char); |
loovee | 0:9d7c6f478d8c | 112 | void setYears(unsigned int); |
loovee | 0:9d7c6f478d8c | 113 | |
loovee | 0:9d7c6f478d8c | 114 | void setTime(); |
loovee | 0:9d7c6f478d8c | 115 | |
loovee | 0:9d7c6f478d8c | 116 | |
loovee | 0:9d7c6f478d8c | 117 | void start(void); |
loovee | 0:9d7c6f478d8c | 118 | void stop(void); |
loovee | 0:9d7c6f478d8c | 119 | unsigned char getRegister(unsigned char registerNumber); |
loovee | 0:9d7c6f478d8c | 120 | void setRegister(unsigned char registerNumber, unsigned char registerValue); |
loovee | 0:9d7c6f478d8c | 121 | //void unsetRegister(unsigned char registerNumber, unsigned char registerMask); |
loovee | 0:9d7c6f478d8c | 122 | |
loovee | 0:9d7c6f478d8c | 123 | // library-accessible "private" interface |
loovee | 0:9d7c6f478d8c | 124 | private: |
loovee | 0:9d7c6f478d8c | 125 | I2C i2c; |
loovee | 0:9d7c6f478d8c | 126 | byte time_set; |
loovee | 0:9d7c6f478d8c | 127 | byte alarm_repeat; |
loovee | 0:9d7c6f478d8c | 128 | byte rtc_bcd[7]; // used prior to read/set DS1337 registers; |
loovee | 0:9d7c6f478d8c | 129 | void read(void); |
loovee | 0:9d7c6f478d8c | 130 | void save(void); |
loovee | 0:9d7c6f478d8c | 131 | byte bcd2bin(byte); |
loovee | 0:9d7c6f478d8c | 132 | byte bin2bcd(byte); |
loovee | 0:9d7c6f478d8c | 133 | }; |
loovee | 0:9d7c6f478d8c | 134 | |
loovee | 0:9d7c6f478d8c | 135 | //extern DS1337 RTC; |
loovee | 0:9d7c6f478d8c | 136 | |
loovee | 0:9d7c6f478d8c | 137 | #endif |