ok

Dependencies:   RTC8563 mbed

Fork of rtc_class by HIMBED_3AHELI

Revision:
0:32ae5fd83722
Child:
1:554eb6675279
--- /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);
+    }
+}