FSST - Hardwarenahe Programmierung
RTC Methodendefinition
An dieser Stelle erfolgt das Kopieren der Funktionen aus der main-Datei, außer printTime() in main wird ersetzt durch den Code aus der Funktion printTime():
// // @ Project : RTC Date Time Clock // @ File Name : RTC8563.cpp // @ Date : 06.04.2015 // @ Author : Franz Pucher // @ Copyright : pe@bulme.at // #include "mbed.h" #include "const.h" #include "RTC8563.h" RTC8563::RTC8563() : i2c(p28, p27) // delete void and add call to base constructor { // Initialise I2C i2c.frequency(40000); char init1[2] = {0x6, 0x00}; char init2[2] = {0x7, 0xff}; i2c.write(0x40, init1, 2); i2c.write(0x40, init2, 2); } RTC8563::RTC8563(PinName sda, PinName scl) : i2c(sda, scl) { // Initialise I2C i2c.frequency(40000); char init1[2] = {0x6, 0x00}; char init2[2] = {0x7, 0xff}; i2c.write(0x40, init1, 2); i2c.write(0x40, init2, 2); } char RTC8563::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 RTC8563::rtc_write(char address, char value) { i2c.start(); i2c.write(RTC8563_ADR); i2c.write(address); i2c.write(value); i2c.stop(); } void RTC8563::rtc_init() { } void RTC8563::rtc_alarm() { }
Die Main-Funktion hat somit folgendes aussehen:
#include "mbed.h" #include "const.h" #include "RTC8563.h" #include "string" Serial pc(USBTX, USBRX); //I2C i2c(p28, p27); uint8_t year, month, day, week; uint8_t hour, minute, sec; char week_chr[7][4] = {"MON","TUE","WED","THU","FRI","SAT","SUN"}; int main() { RTC8563 rtc; // instanziieren des Objektes rtc pc.printf("Setting up RTC\n"); //rtc.rtc_init(); while(1) { //printTime(); year = rtc.rtc_read(YEARS); // Aufruf der Methode rtc_read der Instanz (Objekt) rtc month = rtc.rtc_read(MONTHS); day = rtc.rtc_read(DAYS); week = rtc.rtc_read(WEEKDAYS); hour = rtc.rtc_read(HOURS); minute = rtc.rtc_read(MINUTES); sec = rtc.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) ); wait(1); } }
Teste das Programm mit HIMBED M0 Board.