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