1 | //DS1307 Configuration
|
2 | #define DS1307 0x68 // Adresse des DS1307 ist 0x68
|
3 |
|
4 | #define SECOND 0b01011001 // Sekunden auf 59 einstellen
|
5 | #define MINUTE 0b00110101 // Minuten auf 33 einstellen
|
6 | #define HOUR 0b00000100 // BIT6=24h-Einstellung; BIT4,5 entsprechen Stunden Zehner,
|
7 | // BIT0-3 entsprechen Stunden Einer
|
8 | #define DAY 0b00000111 // WochenTag entspricht 7 (Festlegung noch treffen)
|
9 | #define DATE_DAY 0b00100100 // Datum Tag entspricht 24
|
10 | #define DATE_MONTH 0b00010001 // Monat entspricht 11, BIT7=Jahrhundert=0
|
11 | #define DATE_YEAR 0b00100010 // Jahr entspricht 22
|
12 |
|
13 | int main(void)
|
14 | {
|
15 |
|
16 | char seconds[3];
|
17 | char minutes[3];
|
18 | char hours[3];
|
19 |
|
20 | //Initialisiere I²C
|
21 | i2c_init();
|
22 |
|
23 | ret = i2c_start((DS1307<<1)+I2C_WRITE); // set device address and write mode
|
24 | _delay_ms(50); // sicherheitshalber warten
|
25 | if ( ret )
|
26 | {
|
27 | //wenn bei I2C ein Fehler auftritt: Meldung Error an LCD
|
28 | i2c_stop();
|
29 | lcd_string("I2C Error!");
|
30 |
|
31 | }
|
32 | else
|
33 | {
|
34 | // Zeit einstellen:
|
35 | i2c_start((DS1307<<1)+I2C_WRITE);
|
36 | i2c_write(0x00); // ab Adresse 0x00 schreiben
|
37 |
|
38 | i2c_write(SECOND); // Adresse 0x00 (Sekunden) beschreiben
|
39 |
|
40 | i2c_write(MINUTE); // Adresse 0x01 (Minuten) beschreiben
|
41 |
|
42 | i2c_write(HOUR); // Adresse 0x02 (Stunden) beschreiben
|
43 |
|
44 | i2c_write(DAY); // Adresse 0x03 (Wochentag) beschreiben
|
45 |
|
46 | i2c_write(DATE_DAY); // Adresse 0x04 (Datum Tag) beschreiben
|
47 |
|
48 | i2c_write(DATE_MONTH); // Adresse 0x05 (Monat) beschreiben
|
49 |
|
50 | i2c_write(DATE_YEAR); // Adresse 0x06 (Jahr) beschreiben
|
51 |
|
52 | i2c_stop(); // I2C Übertragung beenden, Bus freigeben
|
53 |
|
54 | while (1)
|
55 | {
|
56 |
|
57 | // Zeit komplett auslesen:
|
58 |
|
59 | i2c_start((DS1307<<1)+I2C_WRITE); // warte bis I2C frei ist und schreibe dann
|
60 |
|
61 | i2c_write(0x00); // bei Adresse 0x00 anfangen
|
62 |
|
63 |
|
64 | i2c_start((DS1307<<1)+I2C_READ);
|
65 |
|
66 | read_seconds = i2c_readAck(); // Adresse 0x00 (Sekunden) auslesen
|
67 |
|
68 | read_minutes = i2c_readAck(); // Adresse 0x01 (Minuten) auslesen
|
69 |
|
70 | read_hours = i2c_readAck(); // Adresse 0x02 (Stunden) auslesen
|
71 |
|
72 | read_day = i2c_readAck(); // Adresse 0x03 (Wochentag) auslesen
|
73 |
|
74 | read_date = i2c_readAck(); // Adresse 0x04 (Datum Tag) auslesen
|
75 |
|
76 | read_months = i2c_readAck(); // Adresse 0x05 (Monat) auslesen
|
77 |
|
78 | read_years = i2c_readNak(); // Adresse 0x06 (Jahr) auslesen
|
79 |
|
80 | i2c_stop(); // I2C Übertragung beenden, Bus freigeben
|
81 |
|
82 | lcd_setcursor(0,2);
|
83 | itoa(read_seconds,seconds,10);
|
84 | itoa(read_minutes,minutes,10);
|
85 | itoa(read_hours,hours,10);
|
86 |
|
87 | lcd_string(hours);
|
88 | lcd_string(":");
|
89 | lcd_string(minutes);
|
90 | lcd_string(":");
|
91 | lcd_string(seconds);
|
92 | }
|
93 | }
|