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