![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Demo Clock with Nucleo-F303RE and Starter Shield
Dependencies: DS1307 TM1636 mbed
main.cpp@1:dacca338a30b, 2017-05-18 (annotated)
- 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?
User | Revision | Line number | New 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 | } |