Dennis Smith / Mbed 2 deprecated NixieClock800Max

Dependencies:   PCF8583_rtc mbed

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?

UserRevisionLine numberNew 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