|
@@ -18,14 +18,19 @@
|
|
|
#include "ds3231.h"
|
|
|
#include "rtos.h"
|
|
|
#include "event-system.h"
|
|
|
-#include "common.h"
|
|
|
#include "main.h"
|
|
|
+#include "common.h"
|
|
|
|
|
|
/* Defines */
|
|
|
/* Timer2 settings */
|
|
|
-#define TIMER2_HZ 400
|
|
|
-#define TIMER2_PRESCALER 1024
|
|
|
-#define TIMER2_CS (1<<CS22 | 1<<CS21 | 1<<CS20)
|
|
|
+#define TIMER2_HZ 600
|
|
|
+#if F_CPU == 16000000
|
|
|
+ #define TIMER2_PRESCALER 256
|
|
|
+ #define TIMER2_CS (1<<CS22 | 0<<CS21 | 0<<CS20)
|
|
|
+#elif F_CPU == 8000000
|
|
|
+ #define TIMER2_PRESCALER 64
|
|
|
+ #define TIMER2_CS (0<<CS22 | 1<<CS21 | 1<<CS20)
|
|
|
+#endif // F_CPU
|
|
|
#define TIMER2_CNT (0x100 - (F_CPU / TIMER2_PRESCALER / TIMER2_HZ))
|
|
|
|
|
|
/* Display timeout, sec */
|
|
@@ -41,38 +46,34 @@
|
|
|
#endif // USE_UART
|
|
|
|
|
|
#ifdef USE_BRIGHT_CONTROL
|
|
|
+//static void startADC(void);
|
|
|
+//volatile uint8_t resultADC = 0;
|
|
|
/* Lamp brightness */
|
|
|
#define BRIGHT_IDX_MAX 4
|
|
|
+#define LIGHT_LEVEL 100
|
|
|
#define FULL_BRIGHT_ON 0x06
|
|
|
#define FULL_BRIGHT_OFF 0x22
|
|
|
static const uint8_t PROGMEM brightConv[BRIGHT_IDX_MAX+1] = {
|
|
|
- 218, 225, 230, 240, 255
|
|
|
+#if F_CPU == 16000000
|
|
|
+ 155, 164, 181, 211, 255
|
|
|
+#elif F_CPU == 8000000
|
|
|
+ 54, 71, 106, 165, 255
|
|
|
+#endif // F_CPU
|
|
|
};
|
|
|
#endif // USE_BRIGHT_CONTROL
|
|
|
|
|
|
-#ifdef USE_DHT
|
|
|
-// timeout in timer tiks, step 4 mks
|
|
|
-#define DHT_TIMEOUT 1500
|
|
|
-#define DHT_TOUT1 55
|
|
|
-static struct {
|
|
|
- uint8_t Humidity;
|
|
|
- uint16_t Temperature;
|
|
|
-} dhtData;
|
|
|
-#endif // USE_DHT
|
|
|
-
|
|
|
|
|
|
/* Variables */
|
|
|
-static volatile uint8_t Digit[6] = {7, 7, 7, 7, 7, 7};
|
|
|
+static volatile uint8_t Digit[LAMP_NUM] = {1, 2, 3, 4, 5, 6};
|
|
|
static rtc_t RTC, setRTC;
|
|
|
static volatile struct {
|
|
|
uint8_t RTC_Int: 1;
|
|
|
- uint8_t saveCal: 1;
|
|
|
uint8_t blinkC: 1; // флаг задающий ритм мигания
|
|
|
uint8_t blink0: 1; // мигать разрядами 1-2
|
|
|
uint8_t blink1: 1; // мигать разрядами 3-4
|
|
|
uint8_t blink2: 1; // мигать разрядами 5-6
|
|
|
- uint8_t rezerv: 1;
|
|
|
uint8_t saveEEP: 1;
|
|
|
+ uint8_t rezerv: 2;
|
|
|
} Flag;
|
|
|
static btn_t Button[BTN_NUM] = {
|
|
|
{0, evBTN1Pressed, evBTN1Holded, BUTTON1_PIN},
|
|
@@ -86,19 +87,14 @@ static EEMEM uint8_t EEP_SummerTime;
|
|
|
|
|
|
/* Function prototypes */
|
|
|
static void Board_Init(void);
|
|
|
-static void dotOn(void);
|
|
|
static void btnProcess(void);
|
|
|
static void valIncrease(uint8_t * val, uint8_t max);
|
|
|
static void valDecrease(uint8_t * val, uint8_t max);
|
|
|
static void blink(void);
|
|
|
static void setSummerWinterTime(void);
|
|
|
-#ifdef USE_DHT
|
|
|
-static void dhtStart(void);
|
|
|
-static void dhtProcess(void);
|
|
|
-static void dhtEnd(void);
|
|
|
-static void dhtTimeout(void);
|
|
|
-static void dhtNoAck(void);
|
|
|
-#endif // USE_DHT
|
|
|
+#ifdef LAMP_TEST
|
|
|
+static void lampTest(void);
|
|
|
+#endif // LAMP_TEST
|
|
|
#ifdef USE_UART
|
|
|
void usart_putc (char send);
|
|
|
void usart_puts (const char *send);
|
|
@@ -110,7 +106,6 @@ void main(void) {
|
|
|
*/
|
|
|
uint8_t event = 0;
|
|
|
Flag.RTC_Int = 0;
|
|
|
- Flag.saveCal = 0;
|
|
|
Flag.blink0 = 0;
|
|
|
Flag.blink1 = 0;
|
|
|
Flag.blink2 = 0;
|
|
@@ -131,6 +126,12 @@ void main(void) {
|
|
|
|
|
|
/* Initialize Scheduler */
|
|
|
RTOS_Init();
|
|
|
+ tdelay_ms(2000);
|
|
|
+
|
|
|
+#ifdef LAMP_TEST
|
|
|
+ lampTest();
|
|
|
+ tdelay_ms(5000);
|
|
|
+#endif // LAMP_TEST
|
|
|
|
|
|
/* Initialize I2C Bus and RTC */
|
|
|
I2C_Init();
|
|
@@ -140,28 +141,13 @@ void main(void) {
|
|
|
/* Initialize Event State Machine */
|
|
|
ES_Init(stShowTime);
|
|
|
|
|
|
+ RTOS_SetTask(btnProcess, 3, BTN_SCAN_PERIOD);
|
|
|
+#ifdef USE_BRIGHT_CONTROL
|
|
|
+// RTOS_SetTask(startADC, 10, 500);
|
|
|
+#endif // USE_BRIGHT_CONTROL
|
|
|
+
|
|
|
showTime();
|
|
|
|
|
|
- RTOS_SetTask(btnProcess, 3, BTN_SCAN_PERIOD);
|
|
|
-#ifdef USE_DHT
|
|
|
- RTOS_SetTask(dhtStart, 2000, 15000);
|
|
|
-#endif // USE_DHT
|
|
|
-
|
|
|
- uint8_t i;
|
|
|
- for (i=0;i<10;i++) {
|
|
|
- Digit[0] = i;
|
|
|
- tdelay_ms(50);
|
|
|
- Digit[1] = i;
|
|
|
- tdelay_ms(50);
|
|
|
- Digit[2] = i;
|
|
|
- tdelay_ms(50);
|
|
|
- Digit[3] = i;
|
|
|
- tdelay_ms(50);
|
|
|
- Digit[4] = i;
|
|
|
- tdelay_ms(50);
|
|
|
- Digit[5] = i;
|
|
|
- tdelay_ms(50);
|
|
|
- }
|
|
|
/** main loop */
|
|
|
do {
|
|
|
/* new second interrupt from RTC */
|
|
@@ -171,13 +157,15 @@ void main(void) {
|
|
|
|
|
|
RTC_ReadTime(&RTC);
|
|
|
if (RTC.Sec == 0 && RTC.Min == 0) {
|
|
|
- // begin of new hour
|
|
|
+ // begin of new hour
|
|
|
if (RTC.Hr == 0) {
|
|
|
+ // begin of new day
|
|
|
RTC_ReadCalendar(&RTC);
|
|
|
ES_PlaceEvent(evRefreshCal);
|
|
|
}
|
|
|
#ifdef USE_BRIGHT_CONTROL
|
|
|
if (RTC.Hr >= FULL_BRIGHT_ON && RTC.Hr < FULL_BRIGHT_OFF) {
|
|
|
+// if (resultADC < LIGHT_LEVEL) {
|
|
|
OCR2 = pgm_read_byte(&brightConv[BRIGHT_IDX_MAX]);
|
|
|
} else {
|
|
|
OCR2 = pgm_read_byte(&brightConv[brightIdx]);
|
|
@@ -192,35 +180,12 @@ void main(void) {
|
|
|
if (DISP_WDT == 0) {
|
|
|
ES_PlaceEvent(evDisplayWDT);
|
|
|
|
|
|
- if (Flag.saveCal != 0) {
|
|
|
- Flag.saveCal = 0;
|
|
|
- RTC_WriteCalendar(&RTC);
|
|
|
- }
|
|
|
-
|
|
|
if (Flag.saveEEP != 0) {
|
|
|
Flag.saveEEP = 0;
|
|
|
eeprom_update_byte(&EEP_BrightIdx, brightIdx);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-#ifdef USE_DHT
|
|
|
- switch(RTC.Sec) {
|
|
|
- case 0x20:
|
|
|
- case 0x50:
|
|
|
- ES_PlaceEvent(evShTemp);
|
|
|
- break;
|
|
|
-
|
|
|
- case 0x22:
|
|
|
- case 0x52:
|
|
|
- ES_PlaceEvent(evShHum);
|
|
|
- break;
|
|
|
-
|
|
|
- case 0x24:
|
|
|
- case 0x54:
|
|
|
- ES_PlaceEvent(evShTime);
|
|
|
- break;
|
|
|
- }
|
|
|
-#endif // USE_DHT
|
|
|
} // End of New Second
|
|
|
|
|
|
event = ES_GetEvent();
|
|
@@ -255,17 +220,16 @@ static void Board_Init(void) {
|
|
|
DDRC = DIGIT_PINS; // as output
|
|
|
DDRD = (DOT_PIN | ANODD_PINS); // as output
|
|
|
|
|
|
-#ifdef USE_DHT
|
|
|
- /* Timer1, IC negative edge, CTC mode, 64 prescaler, 4 mks one tick */
|
|
|
- TCCR1B = ((0<<ICES1) | (1<<CS11) | (1<<CS10));
|
|
|
-#endif // USE_DHT
|
|
|
-
|
|
|
/* Timer2 - refresh Nixie values */
|
|
|
TCCR2 = TIMER2_CS;
|
|
|
TCNT2 = TIMER2_CNT;
|
|
|
TIMSK = _BV(TOIE2);
|
|
|
|
|
|
#ifdef USE_BRIGHT_CONTROL
|
|
|
+ /* ADC init */
|
|
|
+// ADMUX = (1<<REFS0 | 1<<ADLAR | 1<<MUX2 | 1<<MUX1 | 1<<MUX0); // Vref = AVcc, channel ADC7, Left adjusted result
|
|
|
+// ADCSRA = (1<<ADEN | 1<<ADSC | 1<<ADIE | 1<<ADPS2 | 1<<ADPS1 | 1<<ADPS0); // enable ADC, prescaler = 128
|
|
|
+
|
|
|
OCR2 = pgm_read_byte(&brightConv[BRIGHT_IDX_MAX]);
|
|
|
TIMSK |= _BV(OCIE2);
|
|
|
#endif // USE_BRIGHT_CONTROL
|
|
@@ -299,8 +263,9 @@ static void setSummerWinterTime(void) {
|
|
|
if ((RTC.Mon == 3) && (RTC.WD == 7) && (RTC.Hr == 3) && (sunTime != 0)) {
|
|
|
if ((RTC.Day + 7) > 31) {
|
|
|
RTC.Hr = 4;
|
|
|
- RTC_WriteHHMM(&RTC);
|
|
|
+ RTC_WriteHH(&RTC);
|
|
|
sunTime = 0;
|
|
|
+ eeprom_update_byte(&EEP_SummerTime, sunTime);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -308,15 +273,15 @@ static void setSummerWinterTime(void) {
|
|
|
if ((RTC.Mon == 10) && (RTC.WD == 7) && (RTC.Hr == 4) && (sunTime == 0)) {
|
|
|
if ((RTC.Day + 7) > 31) {
|
|
|
RTC.Hr = 3;
|
|
|
- RTC_WriteHHMM(&RTC);
|
|
|
+ RTC_WriteHH(&RTC);
|
|
|
sunTime = 1;
|
|
|
+ eeprom_update_byte(&EEP_SummerTime, sunTime);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- eeprom_update_byte(&EEP_SummerTime, sunTime);
|
|
|
}
|
|
|
|
|
|
-static void dotOn(void) {
|
|
|
+void dotOn(void) {
|
|
|
PORTD |= DOT_PIN;
|
|
|
}
|
|
|
|
|
@@ -326,119 +291,9 @@ void dotOff(void) {
|
|
|
|
|
|
void dotOnPersistent(void) {
|
|
|
RTOS_DeleteTask(dotOff);
|
|
|
- PORTD |= DOT_PIN;
|
|
|
-}
|
|
|
-
|
|
|
-#ifdef USE_DHT
|
|
|
-static void dhtStart(void) {
|
|
|
- RTOS_SetTask(dhtProcess, 2, 0);
|
|
|
- DHT_PIN_LOW;
|
|
|
-}
|
|
|
-
|
|
|
-static void dhtProcess(void) {
|
|
|
- uint8_t cnt1, cnt2, buf;
|
|
|
- uint16_t tcnt_old, hmdt, tmprtr;
|
|
|
-
|
|
|
- DHT_PIN_INPUT;
|
|
|
- TCNT1 = 0;
|
|
|
-
|
|
|
- // ждём первого "0"
|
|
|
- while(bit_is_set(PINB, PB0) && TCNT1<DHT_TOUT1);
|
|
|
- if (TCNT1 >= DHT_TOUT1) {
|
|
|
- RTOS_SetTask(dhtNoAck, 0, 0);
|
|
|
- return;
|
|
|
- }
|
|
|
- // white for end of preamble
|
|
|
- while(bit_is_clear(PINB, PB0));
|
|
|
- while(bit_is_set(PINB, PB0) && TCNT1<DHT_TIMEOUT);
|
|
|
- if (TCNT1 >= DHT_TIMEOUT) {
|
|
|
- RTOS_SetTask(dhtTimeout, 0, 0);
|
|
|
- }
|
|
|
- hmdt = 0; tmprtr = 0;
|
|
|
- for (cnt1=0; cnt1<32; cnt1+=8) { // 0 8 16 24 32
|
|
|
- buf = 0;
|
|
|
- for (cnt2=0; cnt2<8; cnt2++) {
|
|
|
- buf <<= 1;
|
|
|
- // "0", начало периода
|
|
|
- while(bit_is_clear(PINB, PB0)); // ждём начало импульса
|
|
|
- tcnt_old = TCNT1; // начало импульса
|
|
|
- while(bit_is_set(PINB, PB0) && TCNT1<DHT_TIMEOUT); // ждём конец импульса
|
|
|
- if ((TCNT1 - tcnt_old) > 10) {
|
|
|
- buf |= 1;
|
|
|
- }
|
|
|
- }
|
|
|
- switch (cnt1) {
|
|
|
- case 0:
|
|
|
- hmdt = buf << 8;
|
|
|
- break;
|
|
|
- case 8:
|
|
|
- hmdt |= buf;
|
|
|
- break;
|
|
|
- case 16:
|
|
|
- tmprtr = buf << 8;
|
|
|
- break;
|
|
|
- case 24:
|
|
|
- tmprtr |= buf;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (TCNT1 >= DHT_TIMEOUT) {
|
|
|
- RTOS_SetTask(dhtTimeout, 0, 0);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- dhtData.Humidity = (uint8_t)((hmdt + 5) / 10);
|
|
|
- dhtData.Temperature = tmprtr;
|
|
|
-
|
|
|
- RTOS_SetTask(dhtEnd, 0, 0);
|
|
|
-}
|
|
|
-
|
|
|
-static void dhtEnd(void) {
|
|
|
-#ifdef USE_UART
|
|
|
- char buffer[6];
|
|
|
-
|
|
|
- usart_puts("Humidity: ");
|
|
|
- itoa(dhtData.Humidity, buffer, 10);
|
|
|
- usart_puts(buffer);
|
|
|
- usart_puts(" %\t\t");
|
|
|
-
|
|
|
- usart_puts("Temperature: ");
|
|
|
- itoa(dhtData.Temperature/10, buffer, 10);
|
|
|
- usart_puts(buffer);
|
|
|
- usart_putc('.');
|
|
|
- itoa(dhtData.Temperature%10, buffer, 10);
|
|
|
- usart_puts(buffer);
|
|
|
- usart_puts("oC\r\n");
|
|
|
-#endif // USE_UART
|
|
|
-}
|
|
|
-
|
|
|
-static void dhtNoAck(void) {
|
|
|
-#ifdef USE_UART
|
|
|
- usart_puts("DHT22 no ACK occurred.\r\n");
|
|
|
-#endif // USE_UART
|
|
|
-}
|
|
|
-
|
|
|
-static void dhtTimeout(void) {
|
|
|
-#ifdef USE_UART
|
|
|
- usart_puts("DHT22 Timeout occurred.\r\n");
|
|
|
-#endif // USE_UART
|
|
|
-}
|
|
|
-
|
|
|
-void showTemperature(void) {
|
|
|
- uint8_t a = dhtData.Temperature / 10;
|
|
|
- uint8_t b = dhtData.Temperature % 10;
|
|
|
- Digit[0] = a / 10;
|
|
|
- Digit[1] = a % 10;
|
|
|
- Digit[2] = b;
|
|
|
- Digit[3] = DIGIT_BLANK;
|
|
|
+ dotOn();
|
|
|
}
|
|
|
|
|
|
-void showHumidity(void) {
|
|
|
- Digit[0] = DIGIT_BLANK;
|
|
|
- Digit[1] = DIGIT_BLANK;
|
|
|
- Digit[2] = dhtData.Humidity / 10;
|
|
|
- Digit[3] = dhtData.Humidity % 10;}
|
|
|
-#endif // USE_DHT
|
|
|
|
|
|
/**
|
|
|
* @brief Обработка кнопок.
|
|
@@ -474,6 +329,14 @@ static void btnProcess(void) {
|
|
|
}
|
|
|
|
|
|
void showTime(void) {
|
|
|
+/*
|
|
|
+ Digit[0] = DIGIT_BLANK;
|
|
|
+ Digit[1] = DIGIT_BLANK;
|
|
|
+ Digit[2] = DIGIT_BLANK;
|
|
|
+ Digit[3] = resultADC / 100;
|
|
|
+ Digit[4] = (resultADC % 100) / 10;
|
|
|
+ Digit[5] = resultADC % 10;
|
|
|
+*/
|
|
|
dotOn();
|
|
|
RTOS_SetTask(dotOff, 500, 0);
|
|
|
|
|
@@ -489,106 +352,38 @@ void showTime(void) {
|
|
|
Digit[5] = RTC.Sec & 0x0F;
|
|
|
}
|
|
|
|
|
|
-void showMMSS(void) {
|
|
|
- Digit[0] = RTC.Min >> 4;
|
|
|
- Digit[1] = RTC.Min & 0x0F;
|
|
|
- Digit[2] = RTC.Sec >> 4;
|
|
|
- Digit[3] = RTC.Sec & 0x0F;
|
|
|
-}
|
|
|
-
|
|
|
-void showWDay(void) {
|
|
|
- DISP_WDT = DISP_WDT_TIME;
|
|
|
- Digit[0] = DIGIT_BLANK;
|
|
|
- Digit[1] = DIGIT_BLANK;
|
|
|
- Digit[2] = RTC.WD & 0x0F;
|
|
|
- Digit[3] = DIGIT_BLANK;
|
|
|
-}
|
|
|
-
|
|
|
-void showMDay(void) {
|
|
|
+void showWDM(void) {
|
|
|
DISP_WDT = DISP_WDT_TIME;
|
|
|
- Digit[0] = RTC.Day >> 4;
|
|
|
- Digit[1] = RTC.Day & 0x0F;
|
|
|
- Digit[2] = DIGIT_BLANK;
|
|
|
- Digit[3] = DIGIT_BLANK;
|
|
|
-}
|
|
|
|
|
|
-void showMonth(void) {
|
|
|
- DISP_WDT = DISP_WDT_TIME;
|
|
|
- Digit[0] = DIGIT_BLANK;
|
|
|
+ Digit[0] = RTC.WD & 0x0F;
|
|
|
Digit[1] = DIGIT_BLANK;
|
|
|
- Digit[2] = RTC.Mon >> 4;
|
|
|
- Digit[3] = RTC.Mon & 0x0F;
|
|
|
+ Digit[2] = RTC.Day >> 4;
|
|
|
+ Digit[3] = RTC.Day & 0x0F;
|
|
|
+ Digit[4] = RTC.Mon >> 4;
|
|
|
+ Digit[5] = RTC.Mon & 0x0F;
|
|
|
}
|
|
|
|
|
|
void showYear(void) {
|
|
|
DISP_WDT = DISP_WDT_TIME;
|
|
|
- Digit[0] = 0x02;
|
|
|
- Digit[1] = 0x00;
|
|
|
- Digit[2] = RTC.Year >> 4;
|
|
|
- Digit[3] = RTC.Year & 0x0F;
|
|
|
-}
|
|
|
-
|
|
|
-void incWDay(void) {
|
|
|
- if (RTC.WD < 7) {
|
|
|
- RTC.WD ++;
|
|
|
- } else {
|
|
|
- RTC.WD = 1;
|
|
|
- }
|
|
|
- Flag.saveCal = 1;
|
|
|
-}
|
|
|
-
|
|
|
-void decWDay(void) {
|
|
|
- if (RTC.WD > 1) {
|
|
|
- RTC.WD --;
|
|
|
- } else {
|
|
|
- RTC.WD = 7;
|
|
|
- }
|
|
|
- Flag.saveCal = 1;
|
|
|
-}
|
|
|
-
|
|
|
-void incMDay(void) {
|
|
|
- valIncrease(&RTC.Day, 31);
|
|
|
- Flag.saveCal = 1;
|
|
|
-}
|
|
|
-
|
|
|
-void decMDay(void) {
|
|
|
- valDecrease(&RTC.Day, 31);
|
|
|
- Flag.saveCal = 1;
|
|
|
-}
|
|
|
-
|
|
|
-void incMonth(void) {
|
|
|
- valIncrease(&RTC.Mon, 12);
|
|
|
- if (RTC.Mon == 0) {
|
|
|
- RTC.Mon = 1;
|
|
|
- }
|
|
|
- Flag.saveCal = 1;
|
|
|
-}
|
|
|
-
|
|
|
-void decMonth(void) {
|
|
|
- valDecrease(&RTC.Mon, 12);
|
|
|
- if (RTC.Mon == 0) {
|
|
|
- RTC.Mon = 0x12;
|
|
|
- }
|
|
|
- Flag.saveCal = 1;
|
|
|
-}
|
|
|
-
|
|
|
-void incYear(void) {
|
|
|
- valIncrease(&RTC.Year, 99);
|
|
|
- Flag.saveCal = 1;
|
|
|
-}
|
|
|
|
|
|
-void decYear(void) {
|
|
|
- valDecrease(&RTC.Year, 99);
|
|
|
- Flag.saveCal = 1;
|
|
|
+ Digit[0] = DIGIT_BLANK;
|
|
|
+ Digit[1] = DIGIT_BLANK;
|
|
|
+ Digit[2] = 0x02;
|
|
|
+ Digit[3] = 0x00;
|
|
|
+ Digit[4] = RTC.Year >> 4;
|
|
|
+ Digit[5] = RTC.Year & 0x0F;
|
|
|
}
|
|
|
|
|
|
#ifdef USE_BRIGHT_CONTROL
|
|
|
void showBright(void) {
|
|
|
DISP_WDT = DISP_WDT_TIME;
|
|
|
+
|
|
|
Digit[0] = DIGIT_BLANK;
|
|
|
Digit[1] = DIGIT_BLANK;
|
|
|
- Digit[2] = brightIdx;
|
|
|
- Digit[3] = DIGIT_BLANK;
|
|
|
+ Digit[2] = DIGIT_BLANK;
|
|
|
+ Digit[3] = brightIdx;
|
|
|
+ Digit[4] = DIGIT_BLANK;
|
|
|
+ Digit[5] = DIGIT_BLANK;
|
|
|
}
|
|
|
|
|
|
void incBright(void) {
|
|
@@ -606,6 +401,11 @@ void decBright(void) {
|
|
|
Flag.saveEEP = 1;
|
|
|
}
|
|
|
}
|
|
|
+/*
|
|
|
+static void startADC(void) {
|
|
|
+ // enable interrupt and start conversion
|
|
|
+ ADCSRA |= ((1<<ADSC) | (1<<ADIE));
|
|
|
+}*/
|
|
|
#endif // USE_BRIGHT_CONTROL
|
|
|
|
|
|
static void blink(void) {
|
|
@@ -629,13 +429,16 @@ static void blink(void) {
|
|
|
}
|
|
|
|
|
|
void setTimeShow(void) {
|
|
|
- dotOn();
|
|
|
+ DISP_WDT = DISP_WDT_TIME;
|
|
|
+ dotOnPersistent();
|
|
|
RTOS_SetTask(dotOff, 500, 0);
|
|
|
|
|
|
Digit[0] = setRTC.Hr >> 4;
|
|
|
Digit[1] = setRTC.Hr & 0x0F;
|
|
|
Digit[2] = setRTC.Min >> 4;
|
|
|
Digit[3] = setRTC.Min & 0x0F;
|
|
|
+ Digit[4] = 0x0;
|
|
|
+ Digit[5] = 0x0;
|
|
|
}
|
|
|
|
|
|
void setTimeBegin(void) {
|
|
@@ -690,6 +493,136 @@ void setTimeEnd(void) {
|
|
|
RTC_ReadTime(&RTC);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Setup Calendar functions
|
|
|
+ */
|
|
|
+void setDateBegin(void) {
|
|
|
+ RTC_ReadCalendar(&setRTC);
|
|
|
+ RTOS_SetTask(btnProcess, 500, BTN_SCAN_PERIOD);
|
|
|
+}
|
|
|
+
|
|
|
+void setDateEnd(void) {
|
|
|
+ RTOS_SetTask(btnProcess, 500, BTN_SCAN_PERIOD);
|
|
|
+
|
|
|
+ RTC_WriteCalendar(&setRTC);
|
|
|
+
|
|
|
+ Flag.blink0 = 0;
|
|
|
+ Flag.blink1 = 0;
|
|
|
+ Flag.blink2 = 0;
|
|
|
+ Flag.blinkC = 0;
|
|
|
+
|
|
|
+ RTC_ReadCalendar(&RTC);
|
|
|
+ dotOff();
|
|
|
+}
|
|
|
+
|
|
|
+void setWDMShow(void) {
|
|
|
+ DISP_WDT = DISP_WDT_TIME;
|
|
|
+ dotOnPersistent();
|
|
|
+
|
|
|
+ Digit[0] = setRTC.WD & 0x0F;
|
|
|
+ Digit[1] = DIGIT_BLANK;
|
|
|
+ Digit[2] = setRTC.Day >> 4;
|
|
|
+ Digit[3] = setRTC.Day & 0x0F;
|
|
|
+ Digit[4] = setRTC.Mon >> 4;
|
|
|
+ Digit[5] = setRTC.Mon & 0x0F;
|
|
|
+}
|
|
|
+
|
|
|
+void setYearShow(void) {
|
|
|
+ DISP_WDT = DISP_WDT_TIME;
|
|
|
+ dotOff();
|
|
|
+
|
|
|
+ Digit[0] = DIGIT_BLANK;
|
|
|
+ Digit[1] = DIGIT_BLANK;
|
|
|
+ Digit[2] = 0x02;
|
|
|
+ Digit[3] = 0x00;
|
|
|
+ Digit[4] = setRTC.Year >> 4;
|
|
|
+ Digit[5] = setRTC.Year & 0x0F;
|
|
|
+}
|
|
|
+
|
|
|
+void setWDayBegin(void) {
|
|
|
+ Flag.blink0 = 1;
|
|
|
+ Flag.blink1 = 0;
|
|
|
+ Flag.blink2 = 0;
|
|
|
+ RTOS_SetTask(blink, 0, 0);
|
|
|
+ setWDMShow();
|
|
|
+}
|
|
|
+
|
|
|
+void setMDayBegin(void) {
|
|
|
+ Flag.blink0 = 0;
|
|
|
+ Flag.blink1 = 1;
|
|
|
+ Flag.blink2 = 0;
|
|
|
+ RTOS_SetTask(blink, 0, 0);
|
|
|
+ setWDMShow();
|
|
|
+}
|
|
|
+
|
|
|
+void setMonthBegin(void) {
|
|
|
+ Flag.blink0 = 0;
|
|
|
+ Flag.blink1 = 0;
|
|
|
+ Flag.blink2 = 1;
|
|
|
+ RTOS_SetTask(blink, 0, 0);
|
|
|
+ setWDMShow();
|
|
|
+}
|
|
|
+
|
|
|
+void setYearBegin(void) {
|
|
|
+ Flag.blink0 = 0;
|
|
|
+ Flag.blink1 = 0;
|
|
|
+ Flag.blink2 = 1;
|
|
|
+ RTOS_SetTask(blink, 0, 0);
|
|
|
+ setYearShow();
|
|
|
+}
|
|
|
+
|
|
|
+void setIncWDay(void) {
|
|
|
+ if (setRTC.WD < 7) {
|
|
|
+ setRTC.WD ++;
|
|
|
+ } else {
|
|
|
+ setRTC.WD = 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void setDecWDay(void) {
|
|
|
+ if (setRTC.WD > 1) {
|
|
|
+ setRTC.WD --;
|
|
|
+ } else {
|
|
|
+ setRTC.WD = 7;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void setIncMDay(void) {
|
|
|
+ valIncrease(&setRTC.Day, 31);
|
|
|
+ if (setRTC.Day == 0) {
|
|
|
+ setRTC.Day = 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void setDecMDay(void) {
|
|
|
+ valDecrease(&setRTC.Day, 31);
|
|
|
+ if (setRTC.Day == 0) {
|
|
|
+ setRTC.Day = 0x31;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void setIncMonth(void) {
|
|
|
+ valIncrease(&setRTC.Mon, 12);
|
|
|
+ if (setRTC.Mon == 0) {
|
|
|
+ setRTC.Mon = 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void setDecMonth(void) {
|
|
|
+ valDecrease(&setRTC.Mon, 12);
|
|
|
+ if (setRTC.Mon == 0) {
|
|
|
+ setRTC.Mon = 0x12;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void setIncYear(void) {
|
|
|
+ valIncrease(&setRTC.Year, 99);
|
|
|
+}
|
|
|
+
|
|
|
+void setDecYear(void) {
|
|
|
+ valDecrease(&setRTC.Year, 99);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* @brief Increase BCD value.
|
|
|
* @param : val, max
|
|
@@ -736,6 +669,66 @@ void usart_puts (const char *send) {
|
|
|
}
|
|
|
#endif // USE_UART
|
|
|
|
|
|
+#ifdef LAMP_TEST
|
|
|
+/**
|
|
|
+ * Lamp Test
|
|
|
+ */
|
|
|
+static void lampValInc(uint8_t n)
|
|
|
+{
|
|
|
+ if (Digit[n] != DIGIT_BLANK) {
|
|
|
+ Digit[n] ++;
|
|
|
+ } else {
|
|
|
+ Digit[n] = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Digit[n] > 9) {
|
|
|
+ Digit[n] = 0;
|
|
|
+ if (n > 0) {
|
|
|
+ lampValInc(n-1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void lampTest(void)
|
|
|
+{
|
|
|
+ uint8_t i=0;
|
|
|
+ uint8_t k, x;
|
|
|
+
|
|
|
+ dotOn();
|
|
|
+ for (k = 0; k<LAMP_NUM; k++) {
|
|
|
+ Digit[k] = DIGIT_BLANK;
|
|
|
+ }
|
|
|
+
|
|
|
+ while (true) {
|
|
|
+
|
|
|
+ Digit[LAMP_NUM-1] = i;
|
|
|
+ i ++;
|
|
|
+ if (i > 9) {
|
|
|
+ dotOn();
|
|
|
+ i = 0;
|
|
|
+ lampValInc(LAMP_NUM-2);
|
|
|
+ }
|
|
|
+ tdelay_ms(10);
|
|
|
+
|
|
|
+ if (i == 5) {
|
|
|
+ dotOff();
|
|
|
+ }
|
|
|
+
|
|
|
+ x = 1;
|
|
|
+ for (k = 0; k<LAMP_NUM; k++) {
|
|
|
+ if (Digit[k] == 9) {
|
|
|
+ x ++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (x == LAMP_NUM) {
|
|
|
+ tdelay_ms(2000);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+#endif // LAMP_TEST
|
|
|
+
|
|
|
/**
|
|
|
* П р е р ы в а н и я
|
|
|
*/
|
|
@@ -851,6 +844,11 @@ ISR(TIMER2_COMP_vect) {
|
|
|
PORTD &= ~ANODD_PINS;
|
|
|
PORTC &= ~DIGIT_PINS;
|
|
|
}
|
|
|
+/*
|
|
|
+ISR(ADC_vect) {
|
|
|
+ resultADC = ADCH;
|
|
|
+ ADCSRA &= ~(1<<ADIE); // disable interrupt
|
|
|
+}*/
|
|
|
#endif // USE_BRIGHT_CONTROL
|
|
|
|
|
|
/**
|