my programm rtc_class with functions in Date.cpp

Dependencies:   mbed

Fork of rtc_func by HIMBED_3AHELI

Committer:
bulmecisco
Date:
Wed Apr 15 07:15:25 2015 +0000
Revision:
1:554eb6675279
Parent:
0:32ae5fd83722
Child:
2:ce174a86d215
Alarm added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bulmecisco 0:32ae5fd83722 1 /***********************************
bulmecisco 0:32ae5fd83722 2 name: main.cpp Version: 0.1
bulmecisco 0:32ae5fd83722 3 author: PE HTL BULME
bulmecisco 0:32ae5fd83722 4 email: pe@bulme.at
bulmecisco 0:32ae5fd83722 5 description:
bulmecisco 0:32ae5fd83722 6 Real Time Clock (RTC8563)
bulmecisco 0:32ae5fd83722 7 on HIMBED M0 - LPC11U24
bulmecisco 0:32ae5fd83722 8 prints formatted time and date values to serial port
bulmecisco 0:32ae5fd83722 9 programed by Franz Wolf (wf@bulme.at)
bulmecisco 0:32ae5fd83722 10 ***********************************/
bulmecisco 0:32ae5fd83722 11 #include "mbed.h"
bulmecisco 0:32ae5fd83722 12
bulmecisco 0:32ae5fd83722 13 // Symbolic constants
bulmecisco 0:32ae5fd83722 14 #define RTC8563_ADR 0xA2
bulmecisco 0:32ae5fd83722 15 #define CONTROL1 0x00
bulmecisco 0:32ae5fd83722 16 #define CONTROL2 0x01
bulmecisco 0:32ae5fd83722 17 #define SECONDS 0x02
bulmecisco 0:32ae5fd83722 18 #define MINUTES 0x03
bulmecisco 0:32ae5fd83722 19 #define HOURS 0x04
bulmecisco 0:32ae5fd83722 20 #define DAYS 0x05
bulmecisco 0:32ae5fd83722 21 #define WEEKDAYS 0x06
bulmecisco 0:32ae5fd83722 22 #define MONTHS 0x07
bulmecisco 0:32ae5fd83722 23 #define YEARS 0x08
bulmecisco 0:32ae5fd83722 24 #define MINUTE_ALARM 0x09
bulmecisco 0:32ae5fd83722 25 #define HOUR_ALARM 0x0A
bulmecisco 0:32ae5fd83722 26 #define DAY_ALARM 0x0B
bulmecisco 0:32ae5fd83722 27 #define WEEKDAY_ALARM 0x0C
bulmecisco 0:32ae5fd83722 28 #define CLOCKOUT_FREQ 0x0D
bulmecisco 0:32ae5fd83722 29 #define TIMER_CINTROL 0x0E
bulmecisco 0:32ae5fd83722 30 #define TIMER 0x0F
bulmecisco 0:32ae5fd83722 31 #define _READ 0x01
bulmecisco 0:32ae5fd83722 32
bulmecisco 0:32ae5fd83722 33 // Wiring
bulmecisco 0:32ae5fd83722 34 Serial pc(USBTX, USBRX);
bulmecisco 0:32ae5fd83722 35 I2C i2c(p28, p27);
bulmecisco 0:32ae5fd83722 36
bulmecisco 1:554eb6675279 37 InterruptIn alarm(P1_28);
bulmecisco 1:554eb6675279 38
bulmecisco 1:554eb6675279 39 DigitalOut myled1(LED1);
bulmecisco 1:554eb6675279 40 DigitalOut myled2(LED2);
bulmecisco 1:554eb6675279 41
bulmecisco 0:32ae5fd83722 42 // Function prototyping
bulmecisco 0:32ae5fd83722 43 void printTime();
bulmecisco 0:32ae5fd83722 44 void rtc_init();
bulmecisco 0:32ae5fd83722 45 char rtc_read(char address);
bulmecisco 0:32ae5fd83722 46 void rtc_write(char address, char value);
bulmecisco 0:32ae5fd83722 47
bulmecisco 0:32ae5fd83722 48 // Global variables
bulmecisco 0:32ae5fd83722 49 char year, month, day, week;
bulmecisco 0:32ae5fd83722 50 char hour, minute, sec;
bulmecisco 0:32ae5fd83722 51
bulmecisco 0:32ae5fd83722 52 char week_val;
bulmecisco 0:32ae5fd83722 53 char week_chr[7][4] = {"MON","TUE","WED","THU","FRI","SAT","SUN"};
bulmecisco 0:32ae5fd83722 54
bulmecisco 0:32ae5fd83722 55 // Functiondefinitions
bulmecisco 0:32ae5fd83722 56 void printTime()
bulmecisco 0:32ae5fd83722 57 {
bulmecisco 0:32ae5fd83722 58 year = rtc_read(YEARS);
bulmecisco 0:32ae5fd83722 59 month = rtc_read(MONTHS);
bulmecisco 0:32ae5fd83722 60 day = rtc_read(DAYS);
bulmecisco 0:32ae5fd83722 61 week = rtc_read(WEEKDAYS);
bulmecisco 0:32ae5fd83722 62 hour = rtc_read(HOURS);
bulmecisco 0:32ae5fd83722 63 minute = rtc_read(MINUTES);
bulmecisco 0:32ae5fd83722 64 sec = rtc_read(SECONDS);
bulmecisco 0:32ae5fd83722 65
bulmecisco 0:32ae5fd83722 66 //Datum Ausgabe
bulmecisco 0:32ae5fd83722 67 pc.printf("20%x%x/%x%x/%x%x %s\n",
bulmecisco 0:32ae5fd83722 68 ((year >> 4) & 0x03) , (year & 0x0F) ,
bulmecisco 0:32ae5fd83722 69 ((month >> 4) & 0x01), (month & 0x0F) ,
bulmecisco 0:32ae5fd83722 70 ((day >> 4) & 0x03), (day & 0x0F) ,
bulmecisco 0:32ae5fd83722 71 week_chr[week & 0x07]);
bulmecisco 0:32ae5fd83722 72
bulmecisco 0:32ae5fd83722 73 //Zeit Ausgabe
bulmecisco 0:32ae5fd83722 74 pc.printf("%x%x:%x%x:%x%x\n",
bulmecisco 0:32ae5fd83722 75 ((hour >> 4) & 0x03), (hour & 0x0F),
bulmecisco 0:32ae5fd83722 76 (minute >> 4), (minute & 0x0F) ,
bulmecisco 0:32ae5fd83722 77 (sec >> 4), (sec & 0x0F) );
bulmecisco 0:32ae5fd83722 78 }
bulmecisco 0:32ae5fd83722 79
bulmecisco 0:32ae5fd83722 80 void rtc_init()
bulmecisco 0:32ae5fd83722 81 {
bulmecisco 0:32ae5fd83722 82 pc.printf("Setting up RTC\n");
bulmecisco 0:32ae5fd83722 83
bulmecisco 0:32ae5fd83722 84 // Formatierung
bulmecisco 0:32ae5fd83722 85 // 2015/01/24
bulmecisco 0:32ae5fd83722 86 // 10:32:00
bulmecisco 0:32ae5fd83722 87
bulmecisco 0:32ae5fd83722 88 week_val = 0x04; // SAT
bulmecisco 0:32ae5fd83722 89 rtc_write(CONTROL1, 0x20); //stop
bulmecisco 0:32ae5fd83722 90 rtc_write(CONTROL2, 0x00);
bulmecisco 0:32ae5fd83722 91 rtc_write(YEARS, (0x15));
bulmecisco 0:32ae5fd83722 92 rtc_write(MONTHS, (0x03));
bulmecisco 0:32ae5fd83722 93 rtc_write(DAYS, (0x13));
bulmecisco 0:32ae5fd83722 94 rtc_write(HOURS, (0x14));
bulmecisco 0:32ae5fd83722 95 rtc_write(MINUTES, (0x47));
bulmecisco 0:32ae5fd83722 96 rtc_write(SECONDS, (0x00));
bulmecisco 0:32ae5fd83722 97 rtc_write(WEEKDAYS, week_val);
bulmecisco 0:32ae5fd83722 98 rtc_write(CLOCKOUT_FREQ, 0x00); // 0x83 = TE on & 1Hz
bulmecisco 0:32ae5fd83722 99 rtc_write(TIMER_CINTROL, 0x00);
bulmecisco 0:32ae5fd83722 100 rtc_write(CONTROL1, 0x00); //start
bulmecisco 0:32ae5fd83722 101 }
bulmecisco 0:32ae5fd83722 102
bulmecisco 0:32ae5fd83722 103 char rtc_read(char address)
bulmecisco 0:32ae5fd83722 104 {
bulmecisco 0:32ae5fd83722 105 char value;
bulmecisco 0:32ae5fd83722 106 i2c.start();
bulmecisco 0:32ae5fd83722 107 i2c.write(RTC8563_ADR);
bulmecisco 0:32ae5fd83722 108 i2c.write(address);
bulmecisco 0:32ae5fd83722 109 i2c.start();
bulmecisco 0:32ae5fd83722 110 i2c.write(RTC8563_ADR | _READ);
bulmecisco 0:32ae5fd83722 111 value = i2c.read(0);
bulmecisco 0:32ae5fd83722 112 i2c.stop();
bulmecisco 0:32ae5fd83722 113
bulmecisco 0:32ae5fd83722 114 return value;
bulmecisco 0:32ae5fd83722 115 }
bulmecisco 0:32ae5fd83722 116 void rtc_write(char address, char value)
bulmecisco 0:32ae5fd83722 117 {
bulmecisco 0:32ae5fd83722 118 i2c.start();
bulmecisco 0:32ae5fd83722 119 i2c.write(RTC8563_ADR);
bulmecisco 0:32ae5fd83722 120 i2c.write(address);
bulmecisco 0:32ae5fd83722 121 i2c.write(value);
bulmecisco 0:32ae5fd83722 122 i2c.stop();
bulmecisco 0:32ae5fd83722 123 }
bulmecisco 0:32ae5fd83722 124
bulmecisco 1:554eb6675279 125 void rtc_alarm()
bulmecisco 1:554eb6675279 126 {
bulmecisco 1:554eb6675279 127 pc.printf("Setting up RTC\n");
bulmecisco 1:554eb6675279 128 // Formatierung
bulmecisco 1:554eb6675279 129 // 2015/01/24
bulmecisco 1:554eb6675279 130 // 17:02:00 MON
bulmecisco 1:554eb6675279 131
bulmecisco 1:554eb6675279 132 // week_val = 0x05; // SAT
bulmecisco 1:554eb6675279 133 rtc_write(CONTROL1, 0x20); //stop
bulmecisco 1:554eb6675279 134 rtc_write(CONTROL2, 0x02); // alarm AF alarm flag bit
bulmecisco 1:554eb6675279 135 rtc_write(DAY_ALARM, (0x80) );
bulmecisco 1:554eb6675279 136 rtc_write(HOUR_ALARM, (0x97));
bulmecisco 1:554eb6675279 137 rtc_write(MINUTE_ALARM, (0x02));
bulmecisco 1:554eb6675279 138 rtc_write(WEEKDAY_ALARM, (0x80));
bulmecisco 1:554eb6675279 139 rtc_write(CONTROL1, 0x00); //start
bulmecisco 1:554eb6675279 140 }
bulmecisco 1:554eb6675279 141 //************************************
bulmecisco 1:554eb6675279 142 void push1() // Interruptfunktion alarm
bulmecisco 1:554eb6675279 143 {
bulmecisco 1:554eb6675279 144 pc.printf("********\n" );
bulmecisco 1:554eb6675279 145 pc.printf("ALARM\n" );
bulmecisco 1:554eb6675279 146 pc.printf("********\n" );
bulmecisco 1:554eb6675279 147 myled1= 1;
bulmecisco 1:554eb6675279 148 }
bulmecisco 1:554eb6675279 149
bulmecisco 1:554eb6675279 150
bulmecisco 0:32ae5fd83722 151 // main program
bulmecisco 0:32ae5fd83722 152 int main()
bulmecisco 0:32ae5fd83722 153 {
bulmecisco 0:32ae5fd83722 154 rtc_init();
bulmecisco 1:554eb6675279 155 alarm.fall(&push1);
bulmecisco 1:554eb6675279 156 rtc_alarm();
bulmecisco 0:32ae5fd83722 157 while(1) {
bulmecisco 0:32ae5fd83722 158 printTime();
bulmecisco 0:32ae5fd83722 159 wait(1);
bulmecisco 0:32ae5fd83722 160 }
bulmecisco 0:32ae5fd83722 161 }