RTC8563

Dependents:   rtc_func Projekt_Wecker_LCD Projekt_Wecker_LCD Projekt_Wecker_LCD

Committer:
wolpra98
Date:
Thu Apr 23 09:38:46 2015 +0000
Revision:
1:85010252766c
Parent:
0:9017c5d1bbb2
Rtc Library;

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 0:9017c5d1bbb2 8
wolpra98 0:9017c5d1bbb2 9 #include "mbed.h"
wolpra98 0:9017c5d1bbb2 10 #include "const.h"
wolpra98 0:9017c5d1bbb2 11
wolpra98 0:9017c5d1bbb2 12 #include "RTC8563.h"
wolpra98 0:9017c5d1bbb2 13
wolpra98 0:9017c5d1bbb2 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 0:9017c5d1bbb2 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 0:9017c5d1bbb2 23
wolpra98 0:9017c5d1bbb2 24 RTC8563::RTC8563(PinName sda, PinName scl) : i2c(sda, scl)
wolpra98 0:9017c5d1bbb2 25 {
wolpra98 0:9017c5d1bbb2 26 // Initialise I2C
wolpra98 0:9017c5d1bbb2 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 0:9017c5d1bbb2 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 0:9017c5d1bbb2 44
wolpra98 0:9017c5d1bbb2 45 return value;
wolpra98 0:9017c5d1bbb2 46 }
wolpra98 0:9017c5d1bbb2 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 0:9017c5d1bbb2 56
wolpra98 0:9017c5d1bbb2 57 void RTC8563::rtc_init()
wolpra98 0:9017c5d1bbb2 58 {
wolpra98 1:85010252766c 59 rtc_write(CONTROL1, 0x20); //stop
wolpra98 1:85010252766c 60 rtc_write(CONTROL2, 0x00);
wolpra98 1:85010252766c 61 rtc_write(HOURS, 0x06);
wolpra98 1:85010252766c 62 rtc_write(MINUTES, 0x59);
wolpra98 1:85010252766c 63 rtc_write(SECONDS, 0x00);
wolpra98 1:85010252766c 64 rtc_write(WEEKDAYS, 0x05);
wolpra98 1:85010252766c 65 rtc_write(CLOCKOUT_FREQ, 0x00); // 0x83 = TE on & 1Hz
wolpra98 1:85010252766c 66 rtc_write(TIMER_CINTROL, 0x00);
wolpra98 1:85010252766c 67 rtc_write(CONTROL1, 0x00); //start
wolpra98 0:9017c5d1bbb2 68 }
wolpra98 0:9017c5d1bbb2 69
wolpra98 0:9017c5d1bbb2 70 void RTC8563::rtc_alarm()
wolpra98 0:9017c5d1bbb2 71 {
wolpra98 1:85010252766c 72 rtc_write(CONTROL1, 0x20); //stop
wolpra98 1:85010252766c 73 rtc_write(CONTROL2, 0x02); // alarm AF alarm flag bit
wolpra98 1:85010252766c 74 rtc_write(DAY_ALARM, (0x80) );
wolpra98 1:85010252766c 75 rtc_write(HOUR_ALARM, (0x97));
wolpra98 1:85010252766c 76 rtc_write(MINUTE_ALARM, (0x02));
wolpra98 1:85010252766c 77 rtc_write(WEEKDAY_ALARM, (0x80));
wolpra98 1:85010252766c 78 rtc_write(CONTROL1, 0x00); //start
wolpra98 0:9017c5d1bbb2 79 }