Demo Clock with Nucleo-F303RE and Starter Shield

Dependencies:   DS1307 TM1636 mbed

Committer:
rogerzuber
Date:
Thu May 03 07:55:09 2018 +0000
Revision:
2:9e74d5f431ef
Parent:
1:dacca338a30b
M242 ClockBase

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rogerzuber 0:7dfbdbd8aa83 1 #include "mbed.h"
rogerzuber 0:7dfbdbd8aa83 2 #include "ds1307.h"
rogerzuber 0:7dfbdbd8aa83 3 #include "TM1636.h"
rogerzuber 0:7dfbdbd8aa83 4
rogerzuber 1:dacca338a30b 5 // New infos are ready
rogerzuber 1:dacca338a30b 6
rogerzuber 0:7dfbdbd8aa83 7 DigitalOut myled(D2);
rogerzuber 0:7dfbdbd8aa83 8 DigitalIn button_K1(D9);
rogerzuber 0:7dfbdbd8aa83 9
rogerzuber 0:7dfbdbd8aa83 10 Serial pc(USBTX, USBRX); // tx, rx for debug and usb pc comunications
rogerzuber 0:7dfbdbd8aa83 11
rogerzuber 0:7dfbdbd8aa83 12 DS1307 my1307(I2C_SDA, I2C_SCL); // DS1307 Objekt für Zugriff auf RTC auf Shield (Pins I2C)
rogerzuber 0:7dfbdbd8aa83 13 // Verbindung zwischen Shield und Nucleo A4-D14 und A5-D15 zwingend nötig
rogerzuber 0:7dfbdbd8aa83 14
rogerzuber 0:7dfbdbd8aa83 15 TM1636 tm1636(D7,D8); // Display driver for 7-Segment-Display
rogerzuber 0:7dfbdbd8aa83 16
rogerzuber 0:7dfbdbd8aa83 17 int sec = 0;
rogerzuber 0:7dfbdbd8aa83 18 int min = 0;
rogerzuber 0:7dfbdbd8aa83 19 int hours = 0;
rogerzuber 0:7dfbdbd8aa83 20 int day = 0;
rogerzuber 0:7dfbdbd8aa83 21 int date = 0;
rogerzuber 0:7dfbdbd8aa83 22 int month = 0;
rogerzuber 0:7dfbdbd8aa83 23 int year = 0;
rogerzuber 0:7dfbdbd8aa83 24
rogerzuber 0:7dfbdbd8aa83 25 int8_t temp[4];
rogerzuber 0:7dfbdbd8aa83 26
rogerzuber 0:7dfbdbd8aa83 27 void test_rw(int test) {
rogerzuber 0:7dfbdbd8aa83 28 if (test == 0) {
rogerzuber 0:7dfbdbd8aa83 29 // pc.printf("Last R/W operaion passed!\n\r");
rogerzuber 0:7dfbdbd8aa83 30 }
rogerzuber 0:7dfbdbd8aa83 31 else {
rogerzuber 0:7dfbdbd8aa83 32 pc.printf("Last R/W operation failed!\n\r");
rogerzuber 0:7dfbdbd8aa83 33 }
rogerzuber 0:7dfbdbd8aa83 34 }
rogerzuber 0:7dfbdbd8aa83 35
rogerzuber 0:7dfbdbd8aa83 36
rogerzuber 0:7dfbdbd8aa83 37 int main() {
rogerzuber 0:7dfbdbd8aa83 38
rogerzuber 0:7dfbdbd8aa83 39 button_K1.mode(PullUp);
rogerzuber 0:7dfbdbd8aa83 40 tm1636.init();
rogerzuber 0:7dfbdbd8aa83 41 int junk = 0;
rogerzuber 0:7dfbdbd8aa83 42
rogerzuber 0:7dfbdbd8aa83 43 while(1){
rogerzuber 0:7dfbdbd8aa83 44
rogerzuber 0:7dfbdbd8aa83 45 if (!button_K1)
rogerzuber 0:7dfbdbd8aa83 46 {
rogerzuber 2:9e74d5f431ef 47 test_rw(my1307.settime( 00, 35, 12, 3, 17, 5, 17));
rogerzuber 0:7dfbdbd8aa83 48 pc.printf("time is set to 12:00:00 - 17.05.2017\n\r");
rogerzuber 0:7dfbdbd8aa83 49
rogerzuber 0:7dfbdbd8aa83 50 junk = 0x39; // just a junk value do read and write test to DS1307 ram
rogerzuber 0:7dfbdbd8aa83 51 test_rw(my1307.write( 0x20, junk)); // this should write the value of junk to register 0x20 (a ram location) in the ds1307.
rogerzuber 0:7dfbdbd8aa83 52 pc.printf("Value written to register 0x20 %.2X \n\r",junk);
rogerzuber 0:7dfbdbd8aa83 53 }
rogerzuber 0:7dfbdbd8aa83 54 else
rogerzuber 0:7dfbdbd8aa83 55 {
rogerzuber 0:7dfbdbd8aa83 56 test_rw(my1307.gettime( &sec, &min, &hours, &day, &date, &month, &year));
rogerzuber 0:7dfbdbd8aa83 57 pc.printf("time is %.2D.%.2D.%.2D - %.2D-%.2D-20%.2D \r", hours, min, sec, date, month, year);
rogerzuber 0:7dfbdbd8aa83 58
rogerzuber 0:7dfbdbd8aa83 59 temp[0] = hours / 10;
rogerzuber 0:7dfbdbd8aa83 60 temp[1] = hours % 10;
rogerzuber 2:9e74d5f431ef 61 temp[2] = sec / 10;
rogerzuber 2:9e74d5f431ef 62 temp[3] = sec % 10;
rogerzuber 0:7dfbdbd8aa83 63 tm1636.display(temp);
rogerzuber 2:9e74d5f431ef 64
rogerzuber 0:7dfbdbd8aa83 65 //junk = 0; // clear junk to show that when the register is read from the correct value is obtained
rogerzuber 0:7dfbdbd8aa83 66 //test_rw(my1307.read( 0x20, &junk)); // this should read register 0x20
rogerzuber 0:7dfbdbd8aa83 67 //pc.printf("Value read from register 0x20 %.2X \n\r",junk);
rogerzuber 0:7dfbdbd8aa83 68 }
rogerzuber 2:9e74d5f431ef 69 if ((sec % 2 == 1))
rogerzuber 2:9e74d5f431ef 70 {
rogerzuber 2:9e74d5f431ef 71 //tm1636.point(POINT_ON);
rogerzuber 2:9e74d5f431ef 72 }
rogerzuber 2:9e74d5f431ef 73 else
rogerzuber 2:9e74d5f431ef 74 {
rogerzuber 2:9e74d5f431ef 75 //tm1636.point(POINT_OFF);
rogerzuber 2:9e74d5f431ef 76 }
rogerzuber 0:7dfbdbd8aa83 77 wait(1.0);
rogerzuber 0:7dfbdbd8aa83 78 myled = ! myled;
rogerzuber 0:7dfbdbd8aa83 79 }
rogerzuber 2:9e74d5f431ef 80 }