improved comments
This commit is contained in:
		@@ -2,7 +2,7 @@
 | 
			
		||||
 * \file dcftime.c
 | 
			
		||||
 * \brief Decoder for DCF-77 time signals
 | 
			
		||||
 * \author Ronald Schaten & Thomas Stegemann
 | 
			
		||||
 * \version $Id: dcftime.c,v 1.1 2007/01/02 21:30:40 rschaten Exp $
 | 
			
		||||
 * \version $Id: dcftime.c,v 1.2 2007/01/03 12:38:55 rschaten Exp $
 | 
			
		||||
 *
 | 
			
		||||
 * License: See documentation.
 | 
			
		||||
 */
 | 
			
		||||
@@ -78,7 +78,7 @@ static struct dcf_data_struct dcf_data; /**< full set of received dcf data */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Initialize a dcf_time value.
 | 
			
		||||
 * \param pTime: pointer to a dcf_time variable
 | 
			
		||||
 * \param pTime pointer to a dcf_time variable
 | 
			
		||||
 */
 | 
			
		||||
static void dcf_time_init(dcf_time * pTime) {
 | 
			
		||||
    pTime->second = 0;
 | 
			
		||||
@@ -89,7 +89,7 @@ static void dcf_time_init(dcf_time * pTime) {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Increment a time-value by one second.
 | 
			
		||||
 * \param pTime: pointer to a dcf_time variable
 | 
			
		||||
 * \param pTime pointer to a dcf_time variable
 | 
			
		||||
 * \return True if the date has to be incremented, too. Otherwise False.
 | 
			
		||||
 */
 | 
			
		||||
static boolean dcf_time_inc(dcf_time * pTime) {
 | 
			
		||||
@@ -111,7 +111,7 @@ static boolean dcf_time_inc(dcf_time * pTime) {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Check if a time-value makes sense.
 | 
			
		||||
 * \param pTime: pointer to a dcf_time variable
 | 
			
		||||
 * \param pTime pointer to a dcf_time variable
 | 
			
		||||
 * \return True if the time is logically correct. Otherwise False.
 | 
			
		||||
 */
 | 
			
		||||
static boolean dcf_time_is_valid(dcf_time * pTime) {
 | 
			
		||||
@@ -126,7 +126,7 @@ static boolean dcf_time_is_valid(dcf_time * pTime) {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Initialize a dcf_date value.
 | 
			
		||||
 * \param pDate: pointer to a dcf_date variable
 | 
			
		||||
 * \param pDate pointer to a dcf_date variable
 | 
			
		||||
 */
 | 
			
		||||
static void dcf_date_init(dcf_date * pDate) {
 | 
			
		||||
    pDate->dayofweek = dcf_sunday;
 | 
			
		||||
@@ -137,7 +137,7 @@ static void dcf_date_init(dcf_date * pDate) {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Calculate the number of days in a month.
 | 
			
		||||
 * \param pDate: pointer to a dcf_time variable
 | 
			
		||||
 * \param pDate pointer to a dcf_time variable
 | 
			
		||||
 * \return The number of days in the given month.
 | 
			
		||||
 */
 | 
			
		||||
static dcf_sizetype dcf_date_days_in_month(dcf_date * pDate) {
 | 
			
		||||
@@ -173,7 +173,7 @@ static dcf_sizetype dcf_date_days_in_month(dcf_date * pDate) {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Increment a date-value by one day.
 | 
			
		||||
 * \param pDate: pointer to a dcf_date variable
 | 
			
		||||
 * \param pDate pointer to a dcf_date variable
 | 
			
		||||
 */
 | 
			
		||||
static void dcf_date_inc(dcf_date * pDate) {
 | 
			
		||||
    ++(pDate->dayofweek);
 | 
			
		||||
@@ -197,7 +197,7 @@ static void dcf_date_inc(dcf_date * pDate) {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Check if a date-value makes sense.
 | 
			
		||||
 * \param pDate: pointer to a dcf_date variable
 | 
			
		||||
 * \param pDate pointer to a dcf_date variable
 | 
			
		||||
 * \return True if the date is logically correct. Otherwise False.
 | 
			
		||||
 */
 | 
			
		||||
static boolean dcf_date_is_valid(dcf_date * pDate) {
 | 
			
		||||
@@ -215,7 +215,7 @@ static boolean dcf_date_is_valid(dcf_date * pDate) {
 | 
			
		||||
*/
 | 
			
		||||
/**
 | 
			
		||||
 * Initialize a dcf_datetime value.
 | 
			
		||||
 * \param pDatetime: pointer to a dcf_datetime variable
 | 
			
		||||
 * \param pDatetime pointer to a dcf_datetime variable
 | 
			
		||||
 */
 | 
			
		||||
static void dcf_datetime_init(dcf_datetime * pDatetime) {
 | 
			
		||||
    pDatetime->is_valid = False;
 | 
			
		||||
@@ -226,7 +226,7 @@ static void dcf_datetime_init(dcf_datetime * pDatetime) {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Increment a datetime-value by one second.
 | 
			
		||||
 * \param pDatetime: pointer to a dcf_datetime variable
 | 
			
		||||
 * \param pDatetime pointer to a dcf_datetime variable
 | 
			
		||||
 */
 | 
			
		||||
static void dcf_datetime_inc(dcf_datetime * pDatetime) {
 | 
			
		||||
    if (dcf_time_inc(&(pDatetime->time))) {
 | 
			
		||||
@@ -240,7 +240,7 @@ static void dcf_datetime_inc(dcf_datetime * pDatetime) {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Initialize a dcf_receiving_data value.
 | 
			
		||||
 * \param pReceive: pointer to a dcf_receiving_data variable
 | 
			
		||||
 * \param pReceive pointer to a dcf_receiving_data variable
 | 
			
		||||
 */
 | 
			
		||||
static void dcf_receiving_data_init(dcf_receiving_data * pReceive) {
 | 
			
		||||
    pReceive->current_signal = dcf_signal_no;
 | 
			
		||||
@@ -254,7 +254,7 @@ static void dcf_receiving_data_init(dcf_receiving_data * pReceive) {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Calculate the time and date while the bits are received.
 | 
			
		||||
 * \param signal: True if the received bit is 200ms, False if the bit is 100ms.
 | 
			
		||||
 * \param signal True if the received bit is 200ms, False if the bit is 100ms.
 | 
			
		||||
 */
 | 
			
		||||
static void dcf_logic(boolean signal) {
 | 
			
		||||
    dcf_data.receiving_data.parity ^= signal;
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
 * \file dcftime.h
 | 
			
		||||
 * \brief Decoder for DCF-77 time signals
 | 
			
		||||
 * \author Ronald Schaten & Thomas Stegemann
 | 
			
		||||
 * \version $Id: dcftime.h,v 1.1 2007/01/02 21:30:40 rschaten Exp $
 | 
			
		||||
 * \version $Id: dcftime.h,v 1.2 2007/01/03 12:38:55 rschaten Exp $
 | 
			
		||||
 *
 | 
			
		||||
 * License: See documentation.
 | 
			
		||||
 */
 | 
			
		||||
@@ -100,7 +100,7 @@ void dcf_init(void);
 | 
			
		||||
 * the received bit is a long or a short one, and if it is usable at all. It
 | 
			
		||||
 * should be called regularly, the number of calls per second is defined in
 | 
			
		||||
 * DCF_RATE.
 | 
			
		||||
 * \param signal: True if the input signal is high, False if it is low.
 | 
			
		||||
 * \param signal True if the input signal is high, False if it is low.
 | 
			
		||||
 */
 | 
			
		||||
void dcf_signal(boolean signal);
 | 
			
		||||
 | 
			
		||||
@@ -112,14 +112,14 @@ dcf_datetime dcf_current_datetime(void);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get the name of the current weekday.
 | 
			
		||||
 * \param dow: Day of the current week. Monday = 1, tuesday = 2...
 | 
			
		||||
 * \param dow Day of the current week. Monday = 1, tuesday = 2...
 | 
			
		||||
 * \return Pointer to the name
 | 
			
		||||
 */
 | 
			
		||||
const char* dcf_dayofweek_name(dcf_dayofweek dow);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get the name of the current daylight saving time (summertime, wintertime).
 | 
			
		||||
 * \param dst: daylight saving time bit from the time signal
 | 
			
		||||
 * \param dst daylight saving time bit from the time signal
 | 
			
		||||
 * \return Pointer to the name
 | 
			
		||||
 */
 | 
			
		||||
const char* dcf_is_dst_name(dcf_is_dst dst);
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * \file main.c
 | 
			
		||||
 * \brief Firmware for the binary DCF-77 clock
 | 
			
		||||
 * \author Ronald Schaten
 | 
			
		||||
 * \version $Id: main.c,v 1.1 2007/01/02 21:30:40 rschaten Exp $
 | 
			
		||||
 * \version $Id: main.c,v 1.2 2007/01/03 12:38:55 rschaten Exp $
 | 
			
		||||
 *
 | 
			
		||||
 * License: See documentation.
 | 
			
		||||
 */
 | 
			
		||||
@@ -15,21 +15,24 @@
 | 
			
		||||
#include "saa1064.h"
 | 
			
		||||
#include "dcftime.h"
 | 
			
		||||
 | 
			
		||||
uint8_t byte[4] = { 2, 3, 1, 0 }; /** the order of the connected output-LED-rows */
 | 
			
		||||
uint8_t output[4], outputOld[4]; /** current and old content of the LEDs */
 | 
			
		||||
uint8_t byte[4] = { 2, 3, 1, 0 }; /**< the order of the connected output-LED-rows */
 | 
			
		||||
uint8_t output[4]; /**< current content of the LEDs */
 | 
			
		||||
uint8_t outputOld[4]; /**< old content of the LEDs */
 | 
			
		||||
 | 
			
		||||
/** the display-modes */
 | 
			
		||||
enum modes {
 | 
			
		||||
    timeasbinary,
 | 
			
		||||
    dateasbinary,
 | 
			
		||||
    timeasbcdhorizontal,
 | 
			
		||||
    dateasbcdhorizontal,
 | 
			
		||||
    timeasbcdvertical,
 | 
			
		||||
    dateasbcdvertical,
 | 
			
		||||
    timestamp
 | 
			
		||||
    timeasbinary, /**< display hours, minutes and seconds, one byte per row */
 | 
			
		||||
    dateasbinary, /**< display day of month, month, year and day of week, one byte per row */
 | 
			
		||||
    timeasbcdhorizontal, /**< display hours, minutes and seconds, two BCDs per row */
 | 
			
		||||
    dateasbcdhorizontal, /**< display day of month, month, year and day of week, two BCDs per row */
 | 
			
		||||
    timeasbcdvertical, /**< display hours, minutes and seconds, one BCD per column */
 | 
			
		||||
    dateasbcdvertical, /**< display day of month, month and year, one BCD per column */
 | 
			
		||||
    timestamp /**< display unix timestamp, one byte per row */
 | 
			
		||||
};
 | 
			
		||||
/** the current display-mode */
 | 
			
		||||
enum modes mode;
 | 
			
		||||
 | 
			
		||||
/** demo mode active */
 | 
			
		||||
uint8_t demomode = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -48,7 +51,7 @@ void setLeds(void) {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Takes the current time and converts it into different output-formats.
 | 
			
		||||
 * \param datetime: the current time
 | 
			
		||||
 * \param datetime the current time
 | 
			
		||||
 */
 | 
			
		||||
void setOutput(dcf_datetime datetime) {
 | 
			
		||||
    uint8_t bcdlow, bcdhigh; /* takes the low and high parts when converting to BCD */
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * \file saa1064.c
 | 
			
		||||
 * \brief I2C-connection to the SAA1064 LED-driver
 | 
			
		||||
 * \author Ronald Schaten
 | 
			
		||||
 * \version $Id: saa1064.c,v 1.1 2007/01/02 21:30:40 rschaten Exp $
 | 
			
		||||
 * \version $Id: saa1064.c,v 1.2 2007/01/03 12:38:55 rschaten Exp $
 | 
			
		||||
 *
 | 
			
		||||
 * License: See documentation.
 | 
			
		||||
 */
 | 
			
		||||
@@ -13,33 +13,30 @@
 | 
			
		||||
#include <util/delay.h>
 | 
			
		||||
#include "saa1064.h"
 | 
			
		||||
 | 
			
		||||
/* The Port used for the connection */
 | 
			
		||||
#define LEDPORT PORTC
 | 
			
		||||
#define LEDPIN PINC
 | 
			
		||||
#define LEDDDR DDRC
 | 
			
		||||
#define LEDPORT PORTC /**< the Port used for the connection */
 | 
			
		||||
#define LEDPIN PINC /**< the Port used for the connection */
 | 
			
		||||
#define LEDDDR DDRC /**< the Port used for the connection */
 | 
			
		||||
 | 
			
		||||
/* Which pins of the port */
 | 
			
		||||
#define SDAPIN PC4
 | 
			
		||||
#define SCLPIN PC5
 | 
			
		||||
#define SDAPIN PC4 /**< which pins of the port */
 | 
			
		||||
#define SCLPIN PC5 /**< which pins of the port */
 | 
			
		||||
 | 
			
		||||
/* the I2C addresses of the SAA 1064 LED drivers */
 | 
			
		||||
#define SAA_AD1 0x70 // or 0x76?
 | 
			
		||||
#define SAA_ADR 0x70 /**< the I2C addresses of the SAA 1064 LED drivers */
 | 
			
		||||
 | 
			
		||||
#define I2C_READ  0x01
 | 
			
		||||
#define I2C_WRITE 0x00
 | 
			
		||||
#define I2C_READ  0x01 /**< command used to read from I2C */
 | 
			
		||||
#define I2C_WRITE 0x00 /**< command used to write to I2C */
 | 
			
		||||
 | 
			
		||||
/* Should be at least 27 (80 / 3) at 8 MHz */
 | 
			
		||||
/* This was the conservative value used for testing. However, half as much should work as well. */
 | 
			
		||||
#define DELAYVAL 3
 | 
			
		||||
#define DELAYVAL 3 /**< pause between certain actions on the bus. Should be at least (10 * freq) / 3, so we set 3 at 1 MHz */
 | 
			
		||||
 | 
			
		||||
void led_init(void) {
 | 
			
		||||
    /* activate pullups */
 | 
			
		||||
    LEDPORT |= (1 << SCLPIN) | (1 << SDAPIN);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Send START, defined as high-to-low SDA with SCL high.
 | 
			
		||||
/**
 | 
			
		||||
 * Send START, defined as high-to-low SDA with SCL high.
 | 
			
		||||
 * Expects SCL and SDA to be high already!
 | 
			
		||||
 * Returns with SDA and SCL low. */
 | 
			
		||||
 * Returns with SDA and SCL low.
 | 
			
		||||
 */
 | 
			
		||||
static void I2C_start(void) {
 | 
			
		||||
    /* Change to output mode. */
 | 
			
		||||
    LEDDDR |= (1 << SDAPIN) | (1 << SCLPIN);
 | 
			
		||||
@@ -51,9 +48,11 @@ static void I2C_start(void) {
 | 
			
		||||
    _delay_loop_1(DELAYVAL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Send STOP, defined as low-to-high SDA with SCL high.
 | 
			
		||||
/**
 | 
			
		||||
 * Send STOP, defined as low-to-high SDA with SCL high.
 | 
			
		||||
 * Expects SCL and SDA to be low already!
 | 
			
		||||
 * Returns with SDA and SCL high. */
 | 
			
		||||
 * Returns with SDA and SCL high.
 | 
			
		||||
 */
 | 
			
		||||
static void I2C_stop(void) {
 | 
			
		||||
    /* Set SCL */
 | 
			
		||||
    LEDPORT |= (1 << SCLPIN);
 | 
			
		||||
@@ -65,10 +64,13 @@ static void I2C_stop(void) {
 | 
			
		||||
    LEDDDR &= ~((1 << SDAPIN) | (1 << SCLPIN));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Transmits the byte in what.
 | 
			
		||||
/**
 | 
			
		||||
 * Transmits the byte in parameter what.
 | 
			
		||||
 * Returns 1 if the byte was ACKed, 0 if not.
 | 
			
		||||
 * Expects SCL and SDA to be low already!
 | 
			
		||||
 * Returns with SDA and SCL low. */
 | 
			
		||||
 * Returns with SDA and SCL low.
 | 
			
		||||
 * \param what the byte to transmit
 | 
			
		||||
 */
 | 
			
		||||
static uint8_t I2C_transmit_byte(uint8_t what) {
 | 
			
		||||
    uint8_t i;
 | 
			
		||||
    for (i = 0; i < 8; i++) {
 | 
			
		||||
@@ -115,7 +117,7 @@ static uint8_t I2C_transmit_byte(uint8_t what) {
 | 
			
		||||
void set_led_digit(uint8_t digit, uint8_t val) {
 | 
			
		||||
    I2C_start();
 | 
			
		||||
    /* Address device */
 | 
			
		||||
    I2C_transmit_byte(SAA_AD1 | I2C_WRITE);
 | 
			
		||||
    I2C_transmit_byte(SAA_ADR | I2C_WRITE);
 | 
			
		||||
    I2C_transmit_byte((digit & 3) + 1); /* Address Digit Register on device */
 | 
			
		||||
    I2C_transmit_byte(val);     /* Send value for Digit */
 | 
			
		||||
    I2C_stop();
 | 
			
		||||
@@ -123,7 +125,7 @@ void set_led_digit(uint8_t digit, uint8_t val) {
 | 
			
		||||
 | 
			
		||||
void set_led_brightness(uint8_t led_brightness) {
 | 
			
		||||
    I2C_start();
 | 
			
		||||
    I2C_transmit_byte(SAA_AD1 | I2C_WRITE);     /* Address first driver */
 | 
			
		||||
    I2C_transmit_byte(SAA_ADR | I2C_WRITE);     /* Address first driver */
 | 
			
		||||
    I2C_transmit_byte(0);       /* Address Config Register on device */
 | 
			
		||||
    I2C_transmit_byte(((led_brightness & 0x07) << 4) | 0x07);   /* Send Settings */
 | 
			
		||||
    I2C_stop();
 | 
			
		||||
 
 | 
			
		||||
@@ -5,23 +5,30 @@
 | 
			
		||||
 * \file saa1064.h
 | 
			
		||||
 * \brief I2C-connection to the SAA1064 LED-driver
 | 
			
		||||
 * \author Ronald Schaten
 | 
			
		||||
 * \version $Id: saa1064.h,v 1.1 2007/01/02 21:30:40 rschaten Exp $
 | 
			
		||||
 * \version $Id: saa1064.h,v 1.2 2007/01/03 12:38:55 rschaten Exp $
 | 
			
		||||
 *
 | 
			
		||||
 * License: See documentation.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* based on http://www.mulder.franken.de/ntpdcfledclock/ */
 | 
			
		||||
 | 
			
		||||
/* This sets one digit on the LED module.
 | 
			
		||||
 * digit   is the number of the digit (0 - 7)
 | 
			
		||||
 * val     is a bitfield that contains the values to set. */
 | 
			
		||||
/**
 | 
			
		||||
 * This sets one digit on the LED module.
 | 
			
		||||
 * \param digit the number of the digit (0 - 3)
 | 
			
		||||
 * \param val a bitfield that contains the values to set
 | 
			
		||||
 */
 | 
			
		||||
void set_led_digit(uint8_t digit, uint8_t val);
 | 
			
		||||
 | 
			
		||||
/* Configures the brightness of the LED module, or rather: the current the driver allows through them.
 | 
			
		||||
 * The values 0 through 7 can be used, corresponding to 0 through 21 mA */
 | 
			
		||||
/**
 | 
			
		||||
 * Configures the brightness of the LEDs. Or rather: the current the driver allows through them.
 | 
			
		||||
 * \param led_brightness The values 0 through 7 can be used, corresponding to 0 through 21 mA
 | 
			
		||||
 */
 | 
			
		||||
void set_led_brightness(uint8_t led_brightness);
 | 
			
		||||
 | 
			
		||||
/* Initialize the LED module... This basically enables the pullups on the I2C Bus pins */
 | 
			
		||||
/**
 | 
			
		||||
 * Initialize the LED module. This basically enables the pullups on the I2C Bus
 | 
			
		||||
 * pins.
 | 
			
		||||
 */
 | 
			
		||||
void led_init(void);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user