a copy of PCF8583_rtc lib with some modification
Fork of PCF8583_rtc by
PCF8583_rtc.h@1:eaba89d6e5d8, 2014-02-23 (annotated)
- Committer:
- dennyem
- Date:
- Sun Feb 23 21:27:24 2014 +0000
- Revision:
- 1:eaba89d6e5d8
- Parent:
- 0:7b654820260e
- Child:
- 2:3291c1f0b986
First Commit 24feb2014
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dennyem | 0:7b654820260e | 1 | #include <mbed.h> |
dennyem | 0:7b654820260e | 2 | |
dennyem | 0:7b654820260e | 3 | #define PCF8583_addr_1 0xA0 // PCF8583 Write address, |
dennyem | 0:7b654820260e | 4 | #define PCF8583_addr_2 0xA2 // PCF8583 Write address, |
dennyem | 0:7b654820260e | 5 | #define ON 1 |
dennyem | 0:7b654820260e | 6 | #define OFF 0 |
dennyem | 0:7b654820260e | 7 | |
dennyem | 0:7b654820260e | 8 | //Configuration Alarm Control Register |
dennyem | 0:7b654820260e | 9 | #define alarm_enable_bit 0x04 |
dennyem | 0:7b654820260e | 10 | #define alarm_flag 0x02; |
dennyem | 0:7b654820260e | 11 | #define timer_hundsek 0x01 |
dennyem | 0:7b654820260e | 12 | #define timer_seconds 0x02 |
dennyem | 0:7b654820260e | 13 | #define timer_minutes 0x03 |
dennyem | 0:7b654820260e | 14 | #define timer_hours 0x04 |
dennyem | 0:7b654820260e | 15 | #define timer_days 0x05 |
dennyem | 0:7b654820260e | 16 | #define timer_int_enable 0x08 |
dennyem | 0:7b654820260e | 17 | #define daily_alarm 0x10 |
dennyem | 0:7b654820260e | 18 | #define weekday_alarm 0x20 |
dennyem | 0:7b654820260e | 19 | #define dated_alarm 0x30 |
dennyem | 0:7b654820260e | 20 | #define timer_alarm_enable 0x40 |
dennyem | 0:7b654820260e | 21 | #define alarm_int_enable 0x80 |
dennyem | 0:7b654820260e | 22 | #define timer_alarm_enable 0x40 |
dennyem | 0:7b654820260e | 23 | #define alarm_int_enable 0x80 |
dennyem | 0:7b654820260e | 24 | |
dennyem | 0:7b654820260e | 25 | // Use the first 2 NVRAM addresses for the century and year bytes. |
dennyem | 0:7b654820260e | 26 | #define CENTURY_REG 0x10 |
dennyem | 0:7b654820260e | 27 | #define YEAR_REG 0x11 |
dennyem | 0:7b654820260e | 28 | #define USER_REG 0x12 |
dennyem | 0:7b654820260e | 29 | |
dennyem | 0:7b654820260e | 30 | #define TIME 1 |
dennyem | 0:7b654820260e | 31 | #define ALARM 9 |
dennyem | 0:7b654820260e | 32 | |
dennyem | 1:eaba89d6e5d8 | 33 | /// Structures |
dennyem | 0:7b654820260e | 34 | struct Time_t { |
dennyem | 0:7b654820260e | 35 | bool fmt_hours; |
dennyem | 0:7b654820260e | 36 | bool am_pm_flag; |
dennyem | 0:7b654820260e | 37 | char hours; |
dennyem | 0:7b654820260e | 38 | char minutes; |
dennyem | 0:7b654820260e | 39 | char seconds; |
dennyem | 0:7b654820260e | 40 | char hundreds; |
dennyem | 0:7b654820260e | 41 | }; |
dennyem | 0:7b654820260e | 42 | |
dennyem | 0:7b654820260e | 43 | struct Date_t { |
dennyem | 0:7b654820260e | 44 | char day; |
dennyem | 0:7b654820260e | 45 | char month; |
dennyem | 0:7b654820260e | 46 | char year; |
dennyem | 0:7b654820260e | 47 | char century; |
dennyem | 0:7b654820260e | 48 | char weekday; |
dennyem | 0:7b654820260e | 49 | }; |
dennyem | 0:7b654820260e | 50 | |
dennyem | 0:7b654820260e | 51 | struct DateTime_t { |
dennyem | 0:7b654820260e | 52 | struct Date_t date; |
dennyem | 0:7b654820260e | 53 | struct Time_t time; |
dennyem | 0:7b654820260e | 54 | }; |
dennyem | 0:7b654820260e | 55 | |
dennyem | 0:7b654820260e | 56 | class PCF8583rtc { |
dennyem | 0:7b654820260e | 57 | I2C *_i2c; |
dennyem | 0:7b654820260e | 58 | |
dennyem | 0:7b654820260e | 59 | public: |
dennyem | 0:7b654820260e | 60 | |
dennyem | 0:7b654820260e | 61 | /** |
dennyem | 1:eaba89d6e5d8 | 62 | * Set these public variables according to your locale, default (in brackets) is Australian English. |
dennyem | 0:7b654820260e | 63 | * char *ShortDateFormat; ("d,m,yy") |
dennyem | 0:7b654820260e | 64 | * char *LongDateFormat; ("dddd dd mmmm yyyy") |
dennyem | 0:7b654820260e | 65 | * char *ShortTimeFormat; ("d:m:yy") |
dennyem | 0:7b654820260e | 66 | * char *LongTimeFormat; ("dd:nn:yyyy") |
dennyem | 0:7b654820260e | 67 | * |
dennyem | 0:7b654820260e | 68 | * char DateSeparator; ("\") |
dennyem | 0:7b654820260e | 69 | * char TimeSeparator; (":") |
dennyem | 0:7b654820260e | 70 | * |
dennyem | 0:7b654820260e | 71 | * char *ShortDayNames[7]; ({"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}) |
dennyem | 0:7b654820260e | 72 | * char *LongDayNames[7]; ({"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}) |
dennyem | 0:7b654820260e | 73 | * char *ShortMonthNames[12]; ({"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}) |
dennyem | 0:7b654820260e | 74 | * char *LongMonthNames[12]; ({"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}) |
dennyem | 0:7b654820260e | 75 | * |
dennyem | 0:7b654820260e | 76 | * Example: |
dennyem | 0:7b654820260e | 77 | * @code |
dennyem | 0:7b654820260e | 78 | * #include <mbed.h> |
dennyem | 0:7b654820260e | 79 | * #include "PCF8583_rtc.h" |
dennyem | 0:7b654820260e | 80 | * |
dennyem | 0:7b654820260e | 81 | * I2C i2c(P0_10, P0_11); // sda, scl |
dennyem | 0:7b654820260e | 82 | * PCF8583rtc rtc(&i2c, PCF8583_addr_2); |
dennyem | 0:7b654820260e | 83 | * |
dennyem | 0:7b654820260e | 84 | * struct DateTime_t dtl; |
dennyem | 0:7b654820260e | 85 | * |
dennyem | 0:7b654820260e | 86 | * //Set the time |
dennyem | 0:7b654820260e | 87 | * dtl = rtc.read(TIME); |
dennyem | 0:7b654820260e | 88 | * dtl.time.hours = rtc.bin2bcd(11); |
dennyem | 0:7b654820260e | 89 | * dtl.time.minutes = rtc.bin2bcd(43); |
dennyem | 0:7b654820260e | 90 | * rtc.write(TIME, dtl); |
dennyem | 0:7b654820260e | 91 | * |
dennyem | 0:7b654820260e | 92 | * //Read and display the time on the nixie display |
dennyem | 0:7b654820260e | 93 | * dtl = rtc.read(TIME); |
dennyem | 0:7b654820260e | 94 | * i2c.write(ADDR_8574_1, &dtl.time.hours, 1); |
dennyem | 0:7b654820260e | 95 | * i2c.write(ADDR_8574_2, &dtl.time.minutes, 1); |
dennyem | 0:7b654820260e | 96 | * |
dennyem | 0:7b654820260e | 97 | * @endcode |
dennyem | 0:7b654820260e | 98 | |
dennyem | 0:7b654820260e | 99 | PCF8583rtc(I2C *i2c, char I2cAddress); |
dennyem | 0:7b654820260e | 100 | |
dennyem | 0:7b654820260e | 101 | DateTime_t read(const char address); |
dennyem | 0:7b654820260e | 102 | void write(const char address, DateTime_t dti); |
dennyem | 0:7b654820260e | 103 | void FormatDateTime(char *dest, char *format); |
dennyem | 0:7b654820260e | 104 | bool WriteNVram(char address, char * value, char num); |
dennyem | 0:7b654820260e | 105 | bool ReadNVram(char address, char * dest, char num); |
dennyem | 0:7b654820260e | 106 | void SetDateTime(DateTime_t dti); |
dennyem | 0:7b654820260e | 107 | struct DateTime_t GetDateTimeBCD(void); |
dennyem | 0:7b654820260e | 108 | |
dennyem | 0:7b654820260e | 109 | */ |
dennyem | 0:7b654820260e | 110 | |
dennyem | 0:7b654820260e | 111 | char *ShortDateFormat; |
dennyem | 0:7b654820260e | 112 | char *LongDateFormat; |
dennyem | 0:7b654820260e | 113 | char *ShortTimeFormat; |
dennyem | 0:7b654820260e | 114 | char *LongTimeFormat; |
dennyem | 0:7b654820260e | 115 | |
dennyem | 0:7b654820260e | 116 | char DateSeparator; |
dennyem | 0:7b654820260e | 117 | char TimeSeparator; |
dennyem | 0:7b654820260e | 118 | |
dennyem | 0:7b654820260e | 119 | char *ShortDayNames[7]; |
dennyem | 0:7b654820260e | 120 | char *LongDayNames[7]; |
dennyem | 0:7b654820260e | 121 | char *ShortMonthNames[12]; |
dennyem | 0:7b654820260e | 122 | char *LongMonthNames[12]; |
dennyem | 0:7b654820260e | 123 | |
dennyem | 0:7b654820260e | 124 | PCF8583rtc(I2C *i2c, char I2cAddress); |
dennyem | 0:7b654820260e | 125 | |
dennyem | 0:7b654820260e | 126 | /** read the current Time or Alarm |
dennyem | 0:7b654820260e | 127 | * |
dennyem | 0:7b654820260e | 128 | * @param address "TIME" = read the time, "ALARM" = read the alarm |
dennyem | 0:7b654820260e | 129 | * @returns |
dennyem | 0:7b654820260e | 130 | * a DateTime_t structure |
dennyem | 0:7b654820260e | 131 | */ |
dennyem | 0:7b654820260e | 132 | DateTime_t read(const char address); |
dennyem | 0:7b654820260e | 133 | |
dennyem | 0:7b654820260e | 134 | /** write the current Time or Alarm |
dennyem | 0:7b654820260e | 135 | * |
dennyem | 0:7b654820260e | 136 | * @param address "TIME" = read the time, "ALARM" = read the alarm |
dennyem | 0:7b654820260e | 137 | * @param dti a DateTime_t structure containing the time or alarm data |
dennyem | 0:7b654820260e | 138 | */ |
dennyem | 0:7b654820260e | 139 | void write(const char address, DateTime_t dti); |
dennyem | 0:7b654820260e | 140 | |
dennyem | 0:7b654820260e | 141 | void FormatDateTime(char *dest, char *format); |
dennyem | 0:7b654820260e | 142 | |
dennyem | 0:7b654820260e | 143 | bool WriteNVram(char address, char * value, char num); |
dennyem | 0:7b654820260e | 144 | |
dennyem | 0:7b654820260e | 145 | bool ReadNVram(char address, char * dest, char num); |
dennyem | 0:7b654820260e | 146 | |
dennyem | 0:7b654820260e | 147 | void SetDateTime(DateTime_t dti); |
dennyem | 0:7b654820260e | 148 | |
dennyem | 0:7b654820260e | 149 | char bin2bcd(char value); |
dennyem | 0:7b654820260e | 150 | |
dennyem | 0:7b654820260e | 151 | private: |
dennyem | 0:7b654820260e | 152 | struct DateTime_t dt; |
dennyem | 0:7b654820260e | 153 | char _I2cAddress; |
dennyem | 0:7b654820260e | 154 | |
dennyem | 0:7b654820260e | 155 | char Bcd2Char(char *d, char val, char WantLeadZero); |
dennyem | 0:7b654820260e | 156 | void enableCounting(void); |
dennyem | 0:7b654820260e | 157 | void pauseCounting(void); |
dennyem | 0:7b654820260e | 158 | char readByte(char address); |
dennyem | 0:7b654820260e | 159 | void writeByte(char address, char d); |
dennyem | 0:7b654820260e | 160 | void configureAlarmReg(char alarm); |
dennyem | 0:7b654820260e | 161 | void configureControlReg(char control); |
dennyem | 0:7b654820260e | 162 | }; |
dennyem | 0:7b654820260e | 163 | |
dennyem | 0:7b654820260e | 164 | /** PCF8583_rtc class. |
dennyem | 0:7b654820260e | 165 | * |
dennyem | 0:7b654820260e | 166 | * Example: |
dennyem | 0:7b654820260e | 167 | * @code |
dennyem | 0:7b654820260e | 168 | * #include <mbed.h> |
dennyem | 0:7b654820260e | 169 | * #include <PCF8583_rtc.h> |
dennyem | 0:7b654820260e | 170 | * |
dennyem | 0:7b654820260e | 171 | * I2C i2c(P0_10, P0_11); // sda, scl |
dennyem | 0:7b654820260e | 172 | * PCF8583rtc rtc(&i2c); |
dennyem | 0:7b654820260e | 173 | * |
dennyem | 0:7b654820260e | 174 | * int main() { |
dennyem | 0:7b654820260e | 175 | * |
dennyem | 0:7b654820260e | 176 | * rtc.read(TIME); |
dennyem | 0:7b654820260e | 177 | * i2c.write(ADDR_8574_1, &rtc.HoursBCD, 1); //write hours to display |
dennyem | 0:7b654820260e | 178 | * i2c.write(ADDR_8574_2, &rtc.MinsBCD, 1); //write minutes to display |
dennyem | 0:7b654820260e | 179 | * } |
dennyem | 0:7b654820260e | 180 | * @endcode |
dennyem | 0:7b654820260e | 181 | */ |
dennyem | 0:7b654820260e | 182 | |
dennyem | 0:7b654820260e | 183 | /** Create a PCF8583rtc object using a pointer to the given I2C object. |
dennyem | 0:7b654820260e | 184 | * |
dennyem | 0:7b654820260e | 185 | * @param i2c pointer to an I2C object to which the PCF8583 device is connected. |
dennyem | 0:7b654820260e | 186 | */ |
dennyem | 0:7b654820260e | 187 | //PCF8583rtc(I2C *i2c); |
dennyem | 0:7b654820260e | 188 | |
dennyem | 0:7b654820260e | 189 | /** the Read_DateTime function. |
dennyem | 0:7b654820260e | 190 | * |
dennyem | 0:7b654820260e | 191 | * @param address Determines whether to read the date/time or alarm registers |
dennyem | 0:7b654820260e | 192 | * Values are retrieved from the internal datetime structure |
dennyem | 0:7b654820260e | 193 | */ |
dennyem | 0:7b654820260e | 194 | //void read(const char address); |
dennyem | 0:7b654820260e | 195 | |
dennyem | 0:7b654820260e | 196 | /** the Write_DateTime function. |
dennyem | 0:7b654820260e | 197 | * |
dennyem | 0:7b654820260e | 198 | * @param address Determines whether to set the date/time or alarm registers |
dennyem | 0:7b654820260e | 199 | * Values are first set into the internal datetime structure prior to calling |
dennyem | 0:7b654820260e | 200 | */ |
dennyem | 0:7b654820260e | 201 | //void write(const char address); |
dennyem | 0:7b654820260e | 202 | |
dennyem | 0:7b654820260e | 203 | /** the FormatDateTime function. |
dennyem | 0:7b654820260e | 204 | * |
dennyem | 0:7b654820260e | 205 | * @param dest a pointer to a char array where formatted values are to be placed |
dennyem | 0:7b654820260e | 206 | * @param format a pointer to a string describing how to format the values |
dennyem | 0:7b654820260e | 207 | */ |
dennyem | 0:7b654820260e | 208 | //void FormatDateTime(char *dest, char *format); |
dennyem | 0:7b654820260e | 209 | |
dennyem | 0:7b654820260e | 210 | /** the WriteNVram function. |
dennyem | 0:7b654820260e | 211 | * |
dennyem | 0:7b654820260e | 212 | * @param address address where value is to be placed |
dennyem | 0:7b654820260e | 213 | * @param value pointer to char array containing the value(s) to be stored |
dennyem | 0:7b654820260e | 214 | * @param num the number bytes to store |
dennyem | 0:7b654820260e | 215 | */ |
dennyem | 0:7b654820260e | 216 | //void WriteNVram(char address, char *value, char num); |
dennyem | 0:7b654820260e | 217 | |
dennyem | 0:7b654820260e | 218 | //#endif |