util.h File Reference

Utilities. More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define PORTDIGIT   PORTC
#define DDRDIGIT   DDRC
#define PORTBUTTON   PORTC
#define DDRBUTTON   DDRC
#define PORTSA234   PORTD
#define DDRSA234   DDRD
#define PORTSA1   PORTB
#define DDRSA1   DDRB
#define PORTDOT   PORTD
#define DDRDOT   DDRD
#define DOT   3
#define PORTHVPUMP   PORTB
#define DDRHVPUMP   DDRB
#define BV2(a, b)   (_BV(a)|_BV(b))
#define BV3(a, b, c)   (_BV(a)|_BV(b)|_BV(c))
#define BV4(a, b, c, d)   (_BV(a)|_BV(b)|_BV(c)|_BV(d))
#define BV5(a, b, c, d, e)   (_BV(a)|_BV(b)|_BV(c)|_BV(d)|_BV(e))
#define BV6(a, b, c, d, e, f)   (_BV(a)|_BV(b)|_BV(c)|_BV(d)|_BV(e)|_BV(f))
#define BV7(a, b, c, d, e, f, g)   (_BV(a)|_BV(b)|_BV(c)|_BV(d)|_BV(e)|_BV(f)|_BV(g))
#define maketime(hh, mm)   (((hh) << 8) + (mm))
 Make BCD time from 2 bytes.
#define _frombcd(x)   ((x & 017) + (((x) & 0160)>>4) * 10)

Enumerations

enum  _sa_values {
  SA1 = 0, SA2, SA3, SA4,
  SAX = 0377
}

Functions

uint8_t frombcd (uint8_t)
uint16_t tobcd16 (uint16_t)
uint8_t days_in_month_bcd (uint8_t year, uint8_t month)
uint8_t bcd_increment (uint8_t x)
 Increment BCD value by 1.
uint8_t day_of_week (uint8_t y, uint8_t m, uint8_t d)
 Get day of week, 0 = Sunday. Input parameters are binary (not BCD).
void blinkmode_set (uint8_t mode)
 Set blinkmode.
uint8_t blinkmode_get ()
 Get blinkmode.
void fade_set (uint8_t mode)
void fadeto (uint16_t t)
uint16_t get_display_value ()
 Return current BCD display value.
void mode_next ()
uint8_t mode_get ()
void savingmode_set (uint8_t s)
uint8_t savingmode_get ()
void savingmode_next ()
void dotmode_set (uint8_t mode)

Variables

void(* blinkhandler )(uint8_t)
 Called every blink, unless NULL.

Detailed Description

Utilities.

Bit settings. BCD conversions. Calendar.


Define Documentation

#define _frombcd (  )     ((x & 017) + (((x) & 0160)>>4) * 10)

Convert to binary from BCD representation

See also:
frombcd
#define BV2 ( a,
 )     (_BV(a)|_BV(b))
#define BV3 ( a,
b,
 )     (_BV(a)|_BV(b)|_BV(c))
#define BV4 ( a,
b,
c,
 )     (_BV(a)|_BV(b)|_BV(c)|_BV(d))
#define BV5 ( a,
b,
c,
d,
 )     (_BV(a)|_BV(b)|_BV(c)|_BV(d)|_BV(e))
#define BV6 ( a,
b,
c,
d,
e,
 )     (_BV(a)|_BV(b)|_BV(c)|_BV(d)|_BV(e)|_BV(f))
#define BV7 ( a,
b,
c,
d,
e,
f,
 )     (_BV(a)|_BV(b)|_BV(c)|_BV(d)|_BV(e)|_BV(f)|_BV(g))
#define DDRBUTTON   DDRC
#define DDRDIGIT   DDRC
#define DDRDOT   DDRD
#define DDRHVPUMP   DDRB
#define DDRSA1   DDRB
#define DDRSA234   DDRD
#define DOT   3
#define maketime ( hh,
mm   )     (((hh) << 8) + (mm))

Make BCD time from 2 bytes.

#define PORTBUTTON   PORTC
#define PORTDIGIT   PORTC
#define PORTDOT   PORTD
#define PORTHVPUMP   PORTB
#define PORTSA1   PORTB
#define PORTSA234   PORTD

Enumeration Type Documentation

enum _sa_values
Enumerator:
SA1 
SA2 
SA3 
SA4 
SAX 

00036                 {
00037     SA1 = 0,
00038     SA2, 
00039     SA3,
00040     SA4,
00041     SAX = 0377
00042 };


Function Documentation

uint8_t bcd_increment ( uint8_t  x  ) 

Increment BCD value by 1.

00023                                  {
00024     x++;
00025     if ((x & 0x0f) >= 0x0a)
00026         x += 0x10 - 0x0a;
00027     if (x >= 0xa0) 
00028        x = 0;
00029     return x;
00030 }

uint8_t blinkmode_get (  )  [inline]

Get blinkmode.

00081 { return blinkmode; }

void blinkmode_set ( uint8_t  mode  ) 

Set blinkmode.

00077                                  {
00078     blinkmode = mode;
00079 }

uint8_t day_of_week ( uint8_t  y,
uint8_t  m,
uint8_t  d 
)

Get day of week, 0 = Sunday. Input parameters are binary (not BCD).

00033                                                      {
00034     uint8_t leap = y%4 == 0;
00035     uint16_t centurydays = 6 + y * 365 + (y+3)/4; // year 2000 started on Saturday
00036     for (; --m >= 1; ) {
00037         centurydays += month_length(m,leap);
00038     }
00039     
00040     centurydays += d-1;
00041     
00042     return (centurydays % 7);
00043 }

Here is the call graph for this function:

uint8_t days_in_month_bcd ( uint8_t  year,
uint8_t  month 
)

Return BCD count of days in month for given BCD year and month. Valid only for years 2000-2099.

00013                                                        {
00014     uint8_t y = frombcd(year);//(year & 7) + ((year & 070)>>3) * 10;
00015     uint8_t m = frombcd(month);//(month & 7) + ((month & 070)>>3) * 10;
00016     uint8_t leap = y % 4 == 0; // non y2k1-compliant, but should be correct for the next 91 years or so :)
00017     
00018     uint8_t knuckle = m < 8 ? (m & 1) == 1 : (m & 1) == 0;
00019     return knuckle ? 0x31 : m != 2 ? 0x30 : leap ? 0x29 : 0x28;
00020 }

Here is the call graph for this function:

void dotmode_set ( uint8_t  mode  ) 

00041                                {
00042     dotmode = mode;
00043 }

void fade_set ( uint8_t  mode  ) 

Sets fading mode and speed

See also:
_fademode

00014                             {
00015     switch (mode) {
00016         case FADE_ON:
00017             fadetime_full = FADETIME;
00018             fadetime_quart = FADETIME/4;
00019             fademode = FADE_ON;
00020             break;
00021         case FADE_OFF:
00022             fademode = FADE_OFF;
00023             break;
00024         case FADE_SLOW:
00025             fadetime_full = FADETIME_S;
00026             fadetime_quart = FADETIME_S/4;
00027             fademode = FADE_ON;
00028             break;
00029     }
00030 }

void fadeto ( uint16_t  t  ) 

Start fading time to given value. Transition is performed in TIMER0_OVF_vect and takes FADETIME cycles.

00151                         { 
00152     uint16_t raw = getrawdigits_bcd(t); // takes time
00153     cli();
00154     timef = t; 
00155     rawfadeto = raw;
00156     fadetime = -1;
00157     sei();
00158 }

Here is the call graph for this function:

uint8_t frombcd ( uint8_t   ) 

Convert to binary from BCD representation as a function.

See also:
_frombcd

00004                            {
00005     return _frombcd(x);
00006 }

uint16_t get_display_value (  )  [inline]

Return current BCD display value.

00161                                     {
00162     return timef;
00163 }

uint8_t mode_get (  )  [inline]

get display mode

See also:
_displaymode

00068                    {
00069     return display_mode;
00070 }

void mode_next (  ) 

Cycle display modes

See also:
_displaymode

00053                  {
00054     display_mode = (display_mode + 1) % NDISPLAYMODES;
00055     switch (display_mode) {
00056         case HHMM:  fade_set(FADE_SLOW);
00057                     dotmode_set(DOT_BLINK);
00058                     break;
00059         case MMSS:  fade_set(FADE_ON);
00060                     dotmode_set(DOT_BLINK);
00061                     break;
00062         case VOLTAGE: fade_set(FADE_OFF);
00063                     dotmode_set(DOT_OFF);
00064                     break;
00065     }
00066 }

Here is the call graph for this function:

uint8_t savingmode_get (  )  [inline]

00095 { return savingmode; }

void savingmode_next (  ) 

00097                        {
00098     savingmode_set((savingmode_get() + 1) % 3);
00099 }

Here is the call graph for this function:

void savingmode_set ( uint8_t  s  ) 

00091                                {
00092     savingmode = s; 
00093 }

uint16_t tobcd16 ( uint16_t   ) 

00045                              {
00046     uint16_t y;
00047     
00048     y  = x % 10;        x /= 10;       
00049     y |= (x % 10)<<4;   x /= 10;
00050     y |= (x % 100)<<8;  x /= 10; 
00051     y |= 0xf000;
00052     
00053     return y;
00054 }


Variable Documentation

void(* blinkhandler)(uint8_t)

Called every blink, unless NULL.


Generated on Wed Jan 27 00:30:00 2010 for Patashnik by  doxygen 1.6.1