M41T62 is a serial real-time clock (RTC) made by STMicroelectronics.
Dependents: LPC1114_data_logger Check_external_RTC LPC1114_barometer_with_data_logging
Diff: m41t62_rtc.h
- Revision:
- 0:2919f8bd90f3
- Child:
- 1:9d7702a887d3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m41t62_rtc.h Sat Jun 21 04:37:56 2014 +0000 @@ -0,0 +1,84 @@ +/* + * mbed library program + * Control M41T62 RTC Module + * + * Copyright (c) 2014 Kenji Arai / JH1PJL + * http://www.page.sannet.ne.jp/kenjia/index.html + * http://mbed.org/users/kenjiArai/ + * Created: June 21st, 2014 + * Revised: June 21st, 2014 + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE + * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef M41T62_H +#define M41T62_H + +#include "mbed.h" + +// RTC STmicro M41T62 +// Address b7=1,b6=1,b5=0,b4=1,b3=0,b2=0,b1=0, b0=R/W +#define M41T62ADDR 0xd0 // No other choice + +#define RTC_Wk_Monday ((uint8_t)0x01) +#define RTC_Wk_Tuesday ((uint8_t)0x02) +#define RTC_Wk_Wednesday ((uint8_t)0x03) +#define RTC_Wk_Thursday ((uint8_t)0x04) +#define RTC_Wk_Friday ((uint8_t)0x05) +#define RTC_Wk_Saturday ((uint8_t)0x06) +#define RTC_Wk_Sunday ((uint8_t)0x07) + +#define RTC_SQW_NONE ((uint8_t)0x0) +#define RTC_SQW_32KHZ ((uint8_t)0x1) +#define RTC_SQW_8KHZ ((uint8_t)0x2) +#define RTC_SQW_4KHZ ((uint8_t)0x3) +#define RTC_SQW_2KHZ ((uint8_t)0x4) +#define RTC_SQW_1KHZ ((uint8_t)0x5) +#define RTC_SQW_512HZ ((uint8_t)0x6) +#define RTC_SQW_256HZ ((uint8_t)0x7) +#define RTC_SQW_128HZ ((uint8_t)0x8) +#define RTC_SQW_64HZ ((uint8_t)0x9) +#define RTC_SQW_32HZ ((uint8_t)0xa) +#define RTC_SQW_16HZ ((uint8_t)0xb) +#define RTC_SQW_8HZ ((uint8_t)0xc) +#define RTC_SQW_4HZ ((uint8_t)0xd) +#define RTC_SQW_2HZ ((uint8_t)0xe) +#define RTC_SQW_1HZ ((uint8_t)0xf) + +typedef struct { // BCD format + uint8_t rtc_seconds; + uint8_t rtc_minutes; + uint8_t rtc_hours; + uint8_t rtc_weekday; + uint8_t rtc_date; + uint8_t rtc_month; + uint16_t rtc_year; +}rtc_time; + +class M41T62 { +public: + M41T62(PinName p_sda, PinName p_scl); + M41T62(I2C& p_i2c); + + void read_rtc(rtc_time *); + void write_rtc(rtc_time *); + void set_sq_wave(uint8_t); + +protected: + void i2c_read_n_bytes(int, char*, int); + void i2c_write_n_bytes(int, char*, int); + uint8_t bin2bcd(uint8_t); + uint8_t bcd2bin(uint8_t); + + I2C i2c; + +private: + uint8_t M41T62_addr; + uint8_t rtc_buf[8 + 2]; // buffer for RTC +}; + +#endif // M41T62_H \ No newline at end of file