RTC8563

Dependents:   rtc_func Projekt_Wecker_LCD Projekt_Wecker_LCD Projekt_Wecker_LCD

Committer:
wolpra98
Date:
Thu Apr 30 10:12:13 2015 +0000
Revision:
2:e84a6be5784c
Parent:
0:9017c5d1bbb2
Alarm Clock with Lcd-Display

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolpra98 0:9017c5d1bbb2 1 //
wolpra98 0:9017c5d1bbb2 2 // @ Project : RTC Date Time Clock
wolpra98 0:9017c5d1bbb2 3 // @ File Name : RTC8563.cpp
wolpra98 0:9017c5d1bbb2 4 // @ Date : 06.04.2015
wolpra98 0:9017c5d1bbb2 5 // @ Author : Franz Pucher
wolpra98 0:9017c5d1bbb2 6 // @ Copyright : pe@bulme.at
wolpra98 0:9017c5d1bbb2 7 //
wolpra98 2:e84a6be5784c 8
wolpra98 0:9017c5d1bbb2 9 #include "mbed.h"
wolpra98 0:9017c5d1bbb2 10 #include "const.h"
wolpra98 2:e84a6be5784c 11
wolpra98 0:9017c5d1bbb2 12 #include "RTC8563.h"
wolpra98 2:e84a6be5784c 13
wolpra98 2:e84a6be5784c 14 RTC8563::RTC8563() : i2c(p28, p27) // delete void and add call to base constructor
wolpra98 0:9017c5d1bbb2 15 {
wolpra98 0:9017c5d1bbb2 16 // Initialise I2C
wolpra98 2:e84a6be5784c 17 i2c.frequency(40000);
wolpra98 0:9017c5d1bbb2 18 char init1[2] = {0x6, 0x00};
wolpra98 0:9017c5d1bbb2 19 char init2[2] = {0x7, 0xff};
wolpra98 0:9017c5d1bbb2 20 i2c.write(0x40, init1, 2);
wolpra98 0:9017c5d1bbb2 21 i2c.write(0x40, init2, 2);
wolpra98 0:9017c5d1bbb2 22 }
wolpra98 2:e84a6be5784c 23
wolpra98 2:e84a6be5784c 24 RTC8563::RTC8563(PinName sda, PinName scl) : i2c(sda, scl)
wolpra98 0:9017c5d1bbb2 25 {
wolpra98 2:e84a6be5784c 26 // Initialise I2C
wolpra98 2:e84a6be5784c 27 i2c.frequency(40000);
wolpra98 0:9017c5d1bbb2 28 char init1[2] = {0x6, 0x00};
wolpra98 0:9017c5d1bbb2 29 char init2[2] = {0x7, 0xff};
wolpra98 0:9017c5d1bbb2 30 i2c.write(0x40, init1, 2);
wolpra98 0:9017c5d1bbb2 31 i2c.write(0x40, init2, 2);
wolpra98 0:9017c5d1bbb2 32 }
wolpra98 2:e84a6be5784c 33
wolpra98 0:9017c5d1bbb2 34 char RTC8563::rtc_read(char address)
wolpra98 0:9017c5d1bbb2 35 {
wolpra98 0:9017c5d1bbb2 36 char value;
wolpra98 0:9017c5d1bbb2 37 i2c.start();
wolpra98 0:9017c5d1bbb2 38 i2c.write(RTC8563_ADR);
wolpra98 0:9017c5d1bbb2 39 i2c.write(address);
wolpra98 0:9017c5d1bbb2 40 i2c.start();
wolpra98 0:9017c5d1bbb2 41 i2c.write(RTC8563_ADR | _READ);
wolpra98 0:9017c5d1bbb2 42 value = i2c.read(0);
wolpra98 0:9017c5d1bbb2 43 i2c.stop();
wolpra98 2:e84a6be5784c 44
wolpra98 0:9017c5d1bbb2 45 return value;
wolpra98 0:9017c5d1bbb2 46 }
wolpra98 2:e84a6be5784c 47
wolpra98 0:9017c5d1bbb2 48 void RTC8563::rtc_write(char address, char value)
wolpra98 0:9017c5d1bbb2 49 {
wolpra98 0:9017c5d1bbb2 50 i2c.start();
wolpra98 0:9017c5d1bbb2 51 i2c.write(RTC8563_ADR);
wolpra98 0:9017c5d1bbb2 52 i2c.write(address);
wolpra98 0:9017c5d1bbb2 53 i2c.write(value);
wolpra98 0:9017c5d1bbb2 54 i2c.stop();
wolpra98 0:9017c5d1bbb2 55 }
wolpra98 2:e84a6be5784c 56
wolpra98 0:9017c5d1bbb2 57 void RTC8563::rtc_init()
wolpra98 0:9017c5d1bbb2 58 {
wolpra98 2:e84a6be5784c 59 rtc_write(CONTROL1, 0x20); //stop
wolpra98 2:e84a6be5784c 60 rtc_write(CONTROL2, 0x00);
wolpra98 2:e84a6be5784c 61 rtc_write(HOURS, 0x06);
wolpra98 2:e84a6be5784c 62 rtc_write(MINUTES, 0x59);
wolpra98 2:e84a6be5784c 63 rtc_write(SECONDS, 0x00);
wolpra98 2:e84a6be5784c 64 rtc_write(WEEKDAYS, 0x05);
wolpra98 2:e84a6be5784c 65 rtc_write(CLOCKOUT_FREQ, 0x00); // 0x83 = TE on & 1Hz
wolpra98 2:e84a6be5784c 66 rtc_write(TIMER_CINTROL, 0x00);
wolpra98 2:e84a6be5784c 67 rtc_write(CONTROL1, 0x00); //start
wolpra98 0:9017c5d1bbb2 68 }
wolpra98 2:e84a6be5784c 69
wolpra98 0:9017c5d1bbb2 70 void RTC8563::rtc_alarm()
wolpra98 0:9017c5d1bbb2 71 {
wolpra98 2:e84a6be5784c 72 rtc_write(CONTROL1, 0x20); //stop
wolpra98 2:e84a6be5784c 73 rtc_write(CONTROL2, 0x02); // alarm AF alarm flag bit
wolpra98 2:e84a6be5784c 74 rtc_write(DAY_ALARM, (0x80) );
wolpra98 2:e84a6be5784c 75 rtc_write(HOUR_ALARM, (0x07));
wolpra98 2:e84a6be5784c 76 rtc_write(MINUTE_ALARM, (0x05));
wolpra98 2:e84a6be5784c 77 rtc_write(WEEKDAY_ALARM, (0x80));
wolpra98 2:e84a6be5784c 78 rtc_write(CONTROL1, 0x00); //start
wolpra98 2:e84a6be5784c 79 }
wolpra98 2:e84a6be5784c 80 void RTC8563::rtc_alarm(int hour, int min)
wolpra98 2:e84a6be5784c 81 {
wolpra98 2:e84a6be5784c 82 rtc_write(CONTROL1, 0x20); //stop
wolpra98 2:e84a6be5784c 83 rtc_write(CONTROL2, 0x02); // alarm AF alarm flag bit
wolpra98 2:e84a6be5784c 84 rtc_write(DAY_ALARM, (0x80) );
wolpra98 2:e84a6be5784c 85 rtc_write(HOUR_ALARM, (hour));
wolpra98 2:e84a6be5784c 86 rtc_write(MINUTE_ALARM, (min));
wolpra98 2:e84a6be5784c 87 rtc_write(WEEKDAY_ALARM, (0x80));
wolpra98 2:e84a6be5784c 88 rtc_write(CONTROL1, 0x00); //start
wolpra98 2:e84a6be5784c 89 }