From c3646d61419acdd3dabb3ffcd764c53ed6be6afc Mon Sep 17 00:00:00 2001
From: Philipp Claves <pclaves@web.de>
Date: Sun, 6 Nov 2011 00:37:19 +0100
Subject: [PATCH] Control: Add ds1307 RTC support module

---
 Control/ds1307.c | 38 ++++++++++++++++++++++++++++++++++++++
 Control/ds1307.h | 29 +++++++++++++++++++++++++++++
 2 files changed, 67 insertions(+)
 create mode 100644 Control/ds1307.c
 create mode 100644 Control/ds1307.h

diff --git a/Control/ds1307.c b/Control/ds1307.c
new file mode 100644
index 0000000..d29b768
--- /dev/null
+++ b/Control/ds1307.c
@@ -0,0 +1,38 @@
+#include "../common/i2c_master.h"
+#include "ds1307.h"
+#include <stdio.h>
+#include <avr/pgmspace.h>
+
+extern void rtc_tick_handler(void);
+
+void ds1307_init(void){
+	i2c_master_init();
+}
+
+uint8_t ds1307_get_date(date_t* date){
+	i2c_master_set_speed(I2C_BITRATE_REG_100K);
+	return i2c_master_read(DS1307_I2C_ADDRESS, DS1307_REG_DATE, sizeof(uint8_t), (uint8_t*)date, sizeof(date_t)) == I2C_SUCCESS;
+}
+
+uint8_t ds1307_set_date(date_t* date){
+	i2c_master_set_speed(I2C_BITRATE_REG_100K);
+	return i2c_master_write(DS1307_I2C_ADDRESS, DS1307_REG_DATE, sizeof(uint8_t), (uint8_t*)date, sizeof(date_t)) == I2C_SUCCESS;
+}
+uint8_t ds1307_set_time(time_t* time){
+	i2c_master_set_speed(I2C_BITRATE_REG_100K);
+	return i2c_master_write(DS1307_I2C_ADDRESS, DS1307_REG_DATE, sizeof(uint8_t), (uint8_t*)time, sizeof(time_t)) == I2C_SUCCESS;	
+}
+
+void ds1307_write_date(date_t* date){
+// 	char* wd[7] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
+	printf_P(PSTR("%02x-%02x-20%02x %02x:%02x:%02x"), date->day, date->month, date->year, date->hour, date->minute, date->second);
+}
+void ds1307_write_current_date(void){
+	date_t date;
+	uint8_t ret = i2c_master_read(DS1307_I2C_ADDRESS, DS1307_REG_DATE, sizeof(uint8_t), (uint8_t*)&date, sizeof(date_t));
+	if (ret == I2C_SUCCESS){
+		ds1307_write_date(&date);
+	} else {
+		printf_P(PSTR("I2C Err %02x"), ret);
+	}
+}
\ No newline at end of file
diff --git a/Control/ds1307.h b/Control/ds1307.h
new file mode 100644
index 0000000..d582e3a
--- /dev/null
+++ b/Control/ds1307.h
@@ -0,0 +1,29 @@
+#pragma once
+
+#define DS1307_I2C_ADDRESS 0xD0
+
+#define DS1307_REG_DATE 0x00
+#define DS1307_REG_CONTROL 0x07
+
+struct date_t{
+	uint8_t second;
+	uint8_t minute;
+	uint8_t hour;
+	uint8_t weekday;
+	uint8_t day;
+	uint8_t month;
+	uint8_t year;
+} typedef date_t;
+
+struct time_t{
+	uint8_t second;
+	uint8_t minute;
+	uint8_t hour;
+} typedef time_t;
+
+void ds1307_init(void);
+uint8_t ds1307_get_date(date_t* date);
+uint8_t ds1307_set_date(date_t* date);
+uint8_t ds1307_set_time(time_t* time);
+void ds1307_write_date(date_t* date);
+void ds1307_write_current_date(void);
\ No newline at end of file
-- 
GitLab