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