added GetDay() GetYear() GetWeek()

Dependencies:   mbed

Fork of rtc_class by Josef Kager

main.cpp

Committer:
bulmecisco
Date:
2015-04-05
Revision:
0:32ae5fd83722
Child:
1:554eb6675279

File content as of revision 0:32ae5fd83722:

/***********************************
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);
    }
}