Demo Clock with Nucleo-F303RE and Starter Shield

Dependencies:   DS1307 TM1636 mbed

Committer:
rogerzuber
Date:
Thu May 18 08:31:33 2017 +0000
Revision:
1:dacca338a30b
Parent:
0:7dfbdbd8aa83
Child:
2:9e74d5f431ef
New Infos

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 0:7dfbdbd8aa83 47 test_rw(my1307.settime( 00, 00, 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 0:7dfbdbd8aa83 61 temp[2] = min / 10;
rogerzuber 0:7dfbdbd8aa83 62 temp[3] = min % 10;
rogerzuber 0:7dfbdbd8aa83 63 tm1636.display(temp);
rogerzuber 0:7dfbdbd8aa83 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 0:7dfbdbd8aa83 69 // if ((sec % 2 == 1))
rogerzuber 0:7dfbdbd8aa83 70 // {
rogerzuber 0:7dfbdbd8aa83 71 // tm1636.point(true);
rogerzuber 0:7dfbdbd8aa83 72 // }
rogerzuber 0:7dfbdbd8aa83 73 // else
rogerzuber 0:7dfbdbd8aa83 74 // {
rogerzuber 0:7dfbdbd8aa83 75 // tm1636.point(false);
rogerzuber 0:7dfbdbd8aa83 76 // }
rogerzuber 0:7dfbdbd8aa83 77 wait(1.0);
rogerzuber 0:7dfbdbd8aa83 78 myled = ! myled;
rogerzuber 0:7dfbdbd8aa83 79 }
rogerzuber 0:7dfbdbd8aa83 80 }