Functions and formatted printing of time and date for RTC8563
Dependencies: mbed
I2C RTC on HIMBED
Definition der benannten Konstanten für die Register des PCF8563 (Tabelle 4)
Praeprozessor-Direktiven #define werden durch benannte Konstante ersetzt
const.h
/*********************************** name: const.h Version: 0.1 author: PE HTL BULME email: pe@bulme.at description: Named constants definitions for registers PCF8563 RTC on HIMBED M0 - LPC11U24 ***********************************/ #ifndef CONST_H #define CONST_H // Address of RTC const int RTC8563_ADR = 0xA2; // Control and status const int CONTROL1 = 0x00; const int CONTROL2 = 0x01; // Time and date const int SECONDS = 0x02; const int MINUTES = 0x03; const int HOURS = 0x04; const int DAYS = 0x05; const int WEEKDAYS = 0x06; const int MONTHS = 0x07; const int YEARS = 0x08; // Alarm const int MINUTE_ALARM = 0x09; const int HOUR_ALARM = 0x0A; const int DAY_ALARM = 0x0B; const int WEEKDAY_ALARM = 0x0C; // Clock and timer const int CLOCKOUT_FREQ = 0x0D; const int TIMER_CINTROL = 0x0E; const int _READ = 0x01; #endif
Register organisation
Terminal program
Mit einem Terminal Programm (z.B. HTERM) können die Werte von der seriellen Schnittstelle (COM-Port) angezeigt werden:
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); } }