![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Original programm
Fork of rtc_class by
Diff: main.cpp
- Revision:
- 0:32ae5fd83722
- Child:
- 1:554eb6675279
diff -r 000000000000 -r 32ae5fd83722 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Apr 05 09:55:01 2015 +0000 @@ -0,0 +1,128 @@ +/*********************************** +name: main.cpp Version: 0.1 +author: PE HTL BULME +email: pe@bulme.at +description: + Real Time Clock (RTC8563) + on HIMBED M0 - LPC11U24 + prints formatted time and date values to serial port + programed by Franz Wolf (wf@bulme.at) +***********************************/ +#include "mbed.h" + +// Symbolic constants +#define RTC8563_ADR 0xA2 +#define CONTROL1 0x00 +#define CONTROL2 0x01 +#define SECONDS 0x02 +#define MINUTES 0x03 +#define HOURS 0x04 +#define DAYS 0x05 +#define WEEKDAYS 0x06 +#define MONTHS 0x07 +#define YEARS 0x08 +#define MINUTE_ALARM 0x09 +#define HOUR_ALARM 0x0A +#define DAY_ALARM 0x0B +#define WEEKDAY_ALARM 0x0C +#define CLOCKOUT_FREQ 0x0D +#define TIMER_CINTROL 0x0E +#define TIMER 0x0F +#define _READ 0x01 + +// Wiring +Serial pc(USBTX, USBRX); +I2C i2c(p28, p27); + +// Function prototyping +void printTime(); +void rtc_init(); +char rtc_read(char address); +void rtc_write(char address, char value); + +// Global variables +char year, month, day, week; +char hour, minute, sec; + +char week_val; +char week_chr[7][4] = {"MON","TUE","WED","THU","FRI","SAT","SUN"}; + +// Functiondefinitions +void printTime() +{ + year = rtc_read(YEARS); + month = rtc_read(MONTHS); + day = rtc_read(DAYS); + week = rtc_read(WEEKDAYS); + hour = rtc_read(HOURS); + minute = rtc_read(MINUTES); + sec = rtc_read(SECONDS); + + //Datum Ausgabe + pc.printf("20%x%x/%x%x/%x%x %s\n", + ((year >> 4) & 0x03) , (year & 0x0F) , + ((month >> 4) & 0x01), (month & 0x0F) , + ((day >> 4) & 0x03), (day & 0x0F) , + week_chr[week & 0x07]); + + //Zeit Ausgabe + pc.printf("%x%x:%x%x:%x%x\n", + ((hour >> 4) & 0x03), (hour & 0x0F), + (minute >> 4), (minute & 0x0F) , + (sec >> 4), (sec & 0x0F) ); +} + +void rtc_init() +{ + pc.printf("Setting up RTC\n"); + + // Formatierung + // 2015/01/24 + // 10:32:00 + + week_val = 0x04; // SAT + rtc_write(CONTROL1, 0x20); //stop + rtc_write(CONTROL2, 0x00); + rtc_write(YEARS, (0x15)); + rtc_write(MONTHS, (0x03)); + rtc_write(DAYS, (0x13)); + rtc_write(HOURS, (0x14)); + rtc_write(MINUTES, (0x47)); + rtc_write(SECONDS, (0x00)); + rtc_write(WEEKDAYS, week_val); + rtc_write(CLOCKOUT_FREQ, 0x00); // 0x83 = TE on & 1Hz + rtc_write(TIMER_CINTROL, 0x00); + rtc_write(CONTROL1, 0x00); //start +} + +char rtc_read(char address) +{ + char value; + i2c.start(); + i2c.write(RTC8563_ADR); + i2c.write(address); + i2c.start(); + i2c.write(RTC8563_ADR | _READ); + value = i2c.read(0); + i2c.stop(); + + return value; +} +void rtc_write(char address, char value) +{ + i2c.start(); + i2c.write(RTC8563_ADR); + i2c.write(address); + i2c.write(value); + i2c.stop(); +} + +// main program +int main() +{ + rtc_init(); + while(1) { + printTime(); + wait(1); + } +}