Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of rtc_func by
main.cpp@1:554eb6675279, 2015-04-15 (annotated)
- 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?
User | Revision | Line number | New 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 | } |