a copy of PCF8583_rtc lib with some modification
Fork of PCF8583_rtc by
PCF8583_rtc.h
- Committer:
- dennyem
- Date:
- 2014-02-14
- Revision:
- 0:7b654820260e
- Child:
- 1:eaba89d6e5d8
File content as of revision 0:7b654820260e:
#include <mbed.h> #define PCF8583_addr_1 0xA0 // PCF8583 Write address, #define PCF8583_addr_2 0xA2 // PCF8583 Write address, #define ON 1 #define OFF 0 //Configuration Alarm Control Register #define alarm_enable_bit 0x04 #define alarm_flag 0x02; #define timer_hundsek 0x01 #define timer_seconds 0x02 #define timer_minutes 0x03 #define timer_hours 0x04 #define timer_days 0x05 #define timer_int_enable 0x08 #define daily_alarm 0x10 #define weekday_alarm 0x20 #define dated_alarm 0x30 #define timer_alarm_enable 0x40 #define alarm_int_enable 0x80 #define timer_alarm_enable 0x40 #define alarm_int_enable 0x80 // Use the first 2 NVRAM addresses for the century and year bytes. #define CENTURY_REG 0x10 #define YEAR_REG 0x11 #define USER_REG 0x12 #define TIME 1 #define ALARM 9 struct Time_t { bool fmt_hours; bool am_pm_flag; char hours; char minutes; char seconds; char hundreds; }; struct Date_t { char day; char month; char year; char century; char weekday; }; struct DateTime_t { struct Date_t date; struct Time_t time; }; class PCF8583rtc { I2C *_i2c; public: /** * Set these public variables according to your locale, default is Australian English. Default in brackets. * char *ShortDateFormat; ("d,m,yy") * char *LongDateFormat; ("dddd dd mmmm yyyy") * char *ShortTimeFormat; ("d:m:yy") * char *LongTimeFormat; ("dd:nn:yyyy") * * char DateSeparator; ("\") * char TimeSeparator; (":") * * char *ShortDayNames[7]; ({"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}) * char *LongDayNames[7]; ({"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}) * char *ShortMonthNames[12]; ({"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}) * char *LongMonthNames[12]; ({"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}) * * Example: * @code * #include <mbed.h> * #include "PCF8583_rtc.h" * * I2C i2c(P0_10, P0_11); // sda, scl * PCF8583rtc rtc(&i2c, PCF8583_addr_2); * * struct DateTime_t dtl; * * //Set the time * dtl = rtc.read(TIME); * dtl.time.hours = rtc.bin2bcd(11); * dtl.time.minutes = rtc.bin2bcd(43); * rtc.write(TIME, dtl); * * //Read and display the time on the nixie display * dtl = rtc.read(TIME); * i2c.write(ADDR_8574_1, &dtl.time.hours, 1); * i2c.write(ADDR_8574_2, &dtl.time.minutes, 1); * * @endcode PCF8583rtc(I2C *i2c, char I2cAddress); DateTime_t read(const char address); void write(const char address, DateTime_t dti); void FormatDateTime(char *dest, char *format); bool WriteNVram(char address, char * value, char num); bool ReadNVram(char address, char * dest, char num); void SetDateTime(DateTime_t dti); struct DateTime_t GetDateTimeBCD(void); */ char *ShortDateFormat; char *LongDateFormat; char *ShortTimeFormat; char *LongTimeFormat; char DateSeparator; char TimeSeparator; char *ShortDayNames[7]; char *LongDayNames[7]; char *ShortMonthNames[12]; char *LongMonthNames[12]; PCF8583rtc(I2C *i2c, char I2cAddress); /** read the current Time or Alarm * * @param address "TIME" = read the time, "ALARM" = read the alarm * @returns * a DateTime_t structure */ DateTime_t read(const char address); /** write the current Time or Alarm * * @param address "TIME" = read the time, "ALARM" = read the alarm * @param dti a DateTime_t structure containing the time or alarm data */ void write(const char address, DateTime_t dti); void FormatDateTime(char *dest, char *format); bool WriteNVram(char address, char * value, char num); bool ReadNVram(char address, char * dest, char num); void SetDateTime(DateTime_t dti); char bin2bcd(char value); private: struct DateTime_t dt; char _I2cAddress; char Bcd2Char(char *d, char val, char WantLeadZero); void enableCounting(void); void pauseCounting(void); char readByte(char address); void writeByte(char address, char d); void configureAlarmReg(char alarm); void configureControlReg(char control); }; /** PCF8583_rtc class. * * Example: * @code * #include <mbed.h> * #include <PCF8583_rtc.h> * * I2C i2c(P0_10, P0_11); // sda, scl * PCF8583rtc rtc(&i2c); * * int main() { * * rtc.read(TIME); * i2c.write(ADDR_8574_1, &rtc.HoursBCD, 1); //write hours to display * i2c.write(ADDR_8574_2, &rtc.MinsBCD, 1); //write minutes to display * } * @endcode */ /** Create a PCF8583rtc object using a pointer to the given I2C object. * * @param i2c pointer to an I2C object to which the PCF8583 device is connected. */ //PCF8583rtc(I2C *i2c); /** the Read_DateTime function. * * @param address Determines whether to read the date/time or alarm registers * Values are retrieved from the internal datetime structure */ //void read(const char address); /** the Write_DateTime function. * * @param address Determines whether to set the date/time or alarm registers * Values are first set into the internal datetime structure prior to calling */ //void write(const char address); /** the FormatDateTime function. * * @param dest a pointer to a char array where formatted values are to be placed * @param format a pointer to a string describing how to format the values */ //void FormatDateTime(char *dest, char *format); /** the WriteNVram function. * * @param address address where value is to be placed * @param value pointer to char array containing the value(s) to be stored * @param num the number bytes to store */ //void WriteNVram(char address, char *value, char num); //#endif