RTC Lib & Output

Dependencies:   LM75B RTC8563 mbed

Committer:
EmilMcDuck
Date:
Wed Apr 08 14:01:45 2015 +0000
Revision:
0:b2c29eef3ac4
Child:
1:9d545a2abf32
Publish

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EmilMcDuck 0:b2c29eef3ac4 1 #include "mbed.h"
EmilMcDuck 0:b2c29eef3ac4 2 #include "LM75B.h"
EmilMcDuck 0:b2c29eef3ac4 3
EmilMcDuck 0:b2c29eef3ac4 4 #define RTC8563_ADR 0xA2
EmilMcDuck 0:b2c29eef3ac4 5
EmilMcDuck 0:b2c29eef3ac4 6 #define CONTROL1 0x00
EmilMcDuck 0:b2c29eef3ac4 7 #define CONTROL2 0x01
EmilMcDuck 0:b2c29eef3ac4 8 #define SECONDS 0x02
EmilMcDuck 0:b2c29eef3ac4 9 #define MINUTES 0x03
EmilMcDuck 0:b2c29eef3ac4 10 #define HOURS 0x04
EmilMcDuck 0:b2c29eef3ac4 11 #define DAYS 0x05
EmilMcDuck 0:b2c29eef3ac4 12 #define WEEKDAYS 0x06
EmilMcDuck 0:b2c29eef3ac4 13 #define MONTHS 0x07
EmilMcDuck 0:b2c29eef3ac4 14 #define YEARS 0x08
EmilMcDuck 0:b2c29eef3ac4 15 #define MINUTE_ALARM 0x09
EmilMcDuck 0:b2c29eef3ac4 16 #define HOUR_ALARM 0x0A
EmilMcDuck 0:b2c29eef3ac4 17 #define DAY_ALARM 0x0B
EmilMcDuck 0:b2c29eef3ac4 18 #define WEEKDAY_ALARM 0x0C
EmilMcDuck 0:b2c29eef3ac4 19 #define CLOCKOUT_FREQ 0x0D
EmilMcDuck 0:b2c29eef3ac4 20 #define TIMER_CINTROL 0x0E
EmilMcDuck 0:b2c29eef3ac4 21 #define TIMER 0x0F
EmilMcDuck 0:b2c29eef3ac4 22 #define _READ 0x01
EmilMcDuck 0:b2c29eef3ac4 23
EmilMcDuck 0:b2c29eef3ac4 24 char year, month, day, week;
EmilMcDuck 0:b2c29eef3ac4 25 char hour, minute, sec;
EmilMcDuck 0:b2c29eef3ac4 26
EmilMcDuck 0:b2c29eef3ac4 27 char week_chr[7][4] = {"MON","TUE","WED","THU","FRI","SAT","SUN"};
EmilMcDuck 0:b2c29eef3ac4 28
EmilMcDuck 0:b2c29eef3ac4 29 BusOut myled(P1_13,P1_12,P1_7,P1_6,P1_4,P1_3,P1_1,P1_0,LED4,LED3,LED2,LED1);
EmilMcDuck 0:b2c29eef3ac4 30 AnalogIn LDR (p16);
EmilMcDuck 0:b2c29eef3ac4 31
EmilMcDuck 0:b2c29eef3ac4 32 InterruptIn sw1(P0_10);
EmilMcDuck 0:b2c29eef3ac4 33 InterruptIn sw2(P0_15);
EmilMcDuck 0:b2c29eef3ac4 34 InterruptIn sw3(P0_23);
EmilMcDuck 0:b2c29eef3ac4 35 InterruptIn sw4(P1_16);
EmilMcDuck 0:b2c29eef3ac4 36
EmilMcDuck 0:b2c29eef3ac4 37 Serial pc(USBTX, USBRX);
EmilMcDuck 0:b2c29eef3ac4 38 LM75B sensor(p28, p27);
EmilMcDuck 0:b2c29eef3ac4 39 I2C i2c(p28, p27);
EmilMcDuck 0:b2c29eef3ac4 40
EmilMcDuck 0:b2c29eef3ac4 41 typedef enum state_t {menue, date, ldr, temp} state_t;
EmilMcDuck 0:b2c29eef3ac4 42 state_t state = menue;
EmilMcDuck 0:b2c29eef3ac4 43
EmilMcDuck 0:b2c29eef3ac4 44 void getNextState();
EmilMcDuck 0:b2c29eef3ac4 45 void printTime();
EmilMcDuck 0:b2c29eef3ac4 46 void flashLDR();
EmilMcDuck 0:b2c29eef3ac4 47 void rtc_init();
EmilMcDuck 0:b2c29eef3ac4 48 char rtc_read(char address);
EmilMcDuck 0:b2c29eef3ac4 49 void rtc_write(char address, char value);
EmilMcDuck 0:b2c29eef3ac4 50
EmilMcDuck 0:b2c29eef3ac4 51 int main()
EmilMcDuck 0:b2c29eef3ac4 52 {
EmilMcDuck 0:b2c29eef3ac4 53 sensor.open();
EmilMcDuck 0:b2c29eef3ac4 54 rtc_init();
EmilMcDuck 0:b2c29eef3ac4 55
EmilMcDuck 0:b2c29eef3ac4 56 sw1.rise(&getNextState);
EmilMcDuck 0:b2c29eef3ac4 57 sw2.rise(&getNextState);
EmilMcDuck 0:b2c29eef3ac4 58 sw3.rise(&getNextState);
EmilMcDuck 0:b2c29eef3ac4 59 sw4.rise(&getNextState);
EmilMcDuck 0:b2c29eef3ac4 60
EmilMcDuck 0:b2c29eef3ac4 61 while(1) {
EmilMcDuck 0:b2c29eef3ac4 62 myled = 0x0000;
EmilMcDuck 0:b2c29eef3ac4 63 switch(state) {
EmilMcDuck 0:b2c29eef3ac4 64 case menue:
EmilMcDuck 0:b2c29eef3ac4 65 pc.printf("########### M E N U ###########");
EmilMcDuck 0:b2c29eef3ac4 66 pc.printf("1.Taste => Menue anzeigen\n\r");
EmilMcDuck 0:b2c29eef3ac4 67 pc.printf("2.Taste => Uhrzeit und Datum\n\r");
EmilMcDuck 0:b2c29eef3ac4 68 pc.printf("3.Taste => LDR-Wert und LED-Array\n\r");
EmilMcDuck 0:b2c29eef3ac4 69 pc.printf("4.Taste => Temperatur anzeigen\n\r");
EmilMcDuck 0:b2c29eef3ac4 70 break;
EmilMcDuck 0:b2c29eef3ac4 71 case date:
EmilMcDuck 0:b2c29eef3ac4 72 printTime();
EmilMcDuck 0:b2c29eef3ac4 73 break;
EmilMcDuck 0:b2c29eef3ac4 74 case ldr:
EmilMcDuck 0:b2c29eef3ac4 75 pc.printf("LDR: %f\n", LDR.read());
EmilMcDuck 0:b2c29eef3ac4 76 flashLDR();
EmilMcDuck 0:b2c29eef3ac4 77 break;
EmilMcDuck 0:b2c29eef3ac4 78 case temp:
EmilMcDuck 0:b2c29eef3ac4 79 pc.printf("Temperatur: %.1f\n\r", (float) sensor);
EmilMcDuck 0:b2c29eef3ac4 80 break;
EmilMcDuck 0:b2c29eef3ac4 81 }
EmilMcDuck 0:b2c29eef3ac4 82 pc.printf("##############################\n\r");
EmilMcDuck 0:b2c29eef3ac4 83 wait(0.2);
EmilMcDuck 0:b2c29eef3ac4 84 }
EmilMcDuck 0:b2c29eef3ac4 85 }
EmilMcDuck 0:b2c29eef3ac4 86
EmilMcDuck 0:b2c29eef3ac4 87 void flashLDR()
EmilMcDuck 0:b2c29eef3ac4 88 {
EmilMcDuck 0:b2c29eef3ac4 89 for(float w = 0; w < 0.6; w+=0.05)
EmilMcDuck 0:b2c29eef3ac4 90 if(LDR>=w)
EmilMcDuck 0:b2c29eef3ac4 91 myled = (myled << 1) + 1;
EmilMcDuck 0:b2c29eef3ac4 92 }
EmilMcDuck 0:b2c29eef3ac4 93
EmilMcDuck 0:b2c29eef3ac4 94 void getNextState()
EmilMcDuck 0:b2c29eef3ac4 95 {
EmilMcDuck 0:b2c29eef3ac4 96 if(sw1) state = menue;
EmilMcDuck 0:b2c29eef3ac4 97 else if(sw2) state = date;
EmilMcDuck 0:b2c29eef3ac4 98 else if(sw3) state = ldr;
EmilMcDuck 0:b2c29eef3ac4 99 else if (sw4) state = temp;
EmilMcDuck 0:b2c29eef3ac4 100 }
EmilMcDuck 0:b2c29eef3ac4 101
EmilMcDuck 0:b2c29eef3ac4 102 void printTime()
EmilMcDuck 0:b2c29eef3ac4 103 {
EmilMcDuck 0:b2c29eef3ac4 104 year = rtc_read(YEARS);
EmilMcDuck 0:b2c29eef3ac4 105 month = rtc_read(MONTHS);
EmilMcDuck 0:b2c29eef3ac4 106 day = rtc_read(DAYS);
EmilMcDuck 0:b2c29eef3ac4 107 week = rtc_read(WEEKDAYS);
EmilMcDuck 0:b2c29eef3ac4 108 hour = rtc_read(HOURS);
EmilMcDuck 0:b2c29eef3ac4 109 minute = rtc_read(MINUTES);
EmilMcDuck 0:b2c29eef3ac4 110 sec = rtc_read(SECONDS);
EmilMcDuck 0:b2c29eef3ac4 111
EmilMcDuck 0:b2c29eef3ac4 112 pc.printf("20%d/%02d/%02d %s\n", year, month, day, week_chr[week]); // Date
EmilMcDuck 0:b2c29eef3ac4 113 pc.printf("%02d:%02d:%02d\n", hour, minute, sec); // Time
EmilMcDuck 0:b2c29eef3ac4 114 }
EmilMcDuck 0:b2c29eef3ac4 115
EmilMcDuck 0:b2c29eef3ac4 116 void rtc_init()
EmilMcDuck 0:b2c29eef3ac4 117 {
EmilMcDuck 0:b2c29eef3ac4 118 pc.printf("RTC-Setup...");
EmilMcDuck 0:b2c29eef3ac4 119
EmilMcDuck 0:b2c29eef3ac4 120 rtc_write(CONTROL1, 0x20); //stop
EmilMcDuck 0:b2c29eef3ac4 121 rtc_write(CONTROL2, 0x00);
EmilMcDuck 0:b2c29eef3ac4 122 rtc_write(YEARS, 15);
EmilMcDuck 0:b2c29eef3ac4 123 rtc_write(MONTHS,3);
EmilMcDuck 0:b2c29eef3ac4 124 rtc_write(DAYS, 13);
EmilMcDuck 0:b2c29eef3ac4 125 rtc_write(HOURS, 21);
EmilMcDuck 0:b2c29eef3ac4 126 rtc_write(MINUTES, 7);
EmilMcDuck 0:b2c29eef3ac4 127 rtc_write(SECONDS, 0);
EmilMcDuck 0:b2c29eef3ac4 128 rtc_write(WEEKDAYS, 5);
EmilMcDuck 0:b2c29eef3ac4 129 rtc_write(CLOCKOUT_FREQ, 0x00); // 0x83 = TE on & 1Hz
EmilMcDuck 0:b2c29eef3ac4 130 rtc_write(TIMER_CINTROL, 0x00);
EmilMcDuck 0:b2c29eef3ac4 131 rtc_write(CONTROL1, 0x00); //start
EmilMcDuck 0:b2c29eef3ac4 132 }
EmilMcDuck 0:b2c29eef3ac4 133
EmilMcDuck 0:b2c29eef3ac4 134 char rtc_read(char address)
EmilMcDuck 0:b2c29eef3ac4 135 {
EmilMcDuck 0:b2c29eef3ac4 136 char value;
EmilMcDuck 0:b2c29eef3ac4 137 i2c.start();
EmilMcDuck 0:b2c29eef3ac4 138 i2c.write(RTC8563_ADR);
EmilMcDuck 0:b2c29eef3ac4 139 i2c.write(address);
EmilMcDuck 0:b2c29eef3ac4 140 i2c.start();
EmilMcDuck 0:b2c29eef3ac4 141 i2c.write(RTC8563_ADR | _READ);
EmilMcDuck 0:b2c29eef3ac4 142 value = i2c.read(0);
EmilMcDuck 0:b2c29eef3ac4 143 i2c.stop();
EmilMcDuck 0:b2c29eef3ac4 144
EmilMcDuck 0:b2c29eef3ac4 145 return value;
EmilMcDuck 0:b2c29eef3ac4 146 }
EmilMcDuck 0:b2c29eef3ac4 147 void rtc_write(char address, char value)
EmilMcDuck 0:b2c29eef3ac4 148 {
EmilMcDuck 0:b2c29eef3ac4 149 i2c.start();
EmilMcDuck 0:b2c29eef3ac4 150 i2c.write(RTC8563_ADR);
EmilMcDuck 0:b2c29eef3ac4 151 i2c.write(address);
EmilMcDuck 0:b2c29eef3ac4 152 i2c.write(value);
EmilMcDuck 0:b2c29eef3ac4 153 i2c.stop();
EmilMcDuck 0:b2c29eef3ac4 154 }