Răsfoiți Sursa

Fix output for 6 digits.

Vladimir N. Shilov 4 ani în urmă
părinte
comite
9c42c6aac1
6 a modificat fișierele cu 101 adăugiri și 31 ștergeri
  1. 6 0
      ReadMe.txt
  2. 2 1
      inc/event-system.h
  3. 1 1
      inc/list_event.h
  4. 2 0
      inc/main.h
  5. 5 14
      src/event-system.c
  6. 85 15
      src/main.c

+ 6 - 0
ReadMe.txt

@@ -11,3 +11,9 @@ PWR: MAX771
 2020.01.12
 Поправил под схему на 6 индикаторов.
 Идут 2 секунды и виснут...
+---
+2020.10.25
+
+Поправил вывод под 6 индикаторов.
+Сделал "тест" отображения.
+Нужно править установку даты.

+ 2 - 1
inc/event-system.h

@@ -31,9 +31,10 @@ void ES_Dispatch(es_event_t event);     /* вызов диспетчера */
  * ES function prototypes
  */
 void dotOnPersistent(void);
+void dotOn(void);
 void dotOff(void);
 void showTime(void);
-void showMMSS(void);
+void showWDM(void);
 void showWDay(void);
 void showMDay(void);
 void showMonth(void);

+ 1 - 1
inc/list_event.h

@@ -25,7 +25,7 @@ typedef enum {
 typedef enum {
   stNoChange = 0x00,
   stShowTime,
-  stShowMMSS,
+  stShowWDM,
   stShowWDay,
   stShowMDay,
   stShowMon,

+ 2 - 0
inc/main.h

@@ -23,6 +23,8 @@
 /**
  * Дефайны
  */
+#define LAMP_NUM          6
+
 /* Port B, puttons, input, pull-up */
 #define DHT_PIN            _BV(PB0)
 #define DHT_PIN_LOW        DDRB |= DHT_PIN

+ 5 - 14
src/event-system.c

@@ -32,11 +32,8 @@ typedef struct {
 const table_state_t stateTable[] PROGMEM = {
 /* STATE    EVENT   NEXT STATE  STATE_FUNC1 STATE_FUNC2 */
   /* show date, time */
-  {stShowTime, evBTN1Pressed, stShowMMSS, dotOnPersistent, showMMSS},
-  {stShowMMSS, evBTN1Pressed, stShowWDay, showWDay,        dotOff},
-  {stShowWDay, evBTN1Pressed, stShowMDay, showMDay,        dotOff},
-  {stShowMDay, evBTN1Pressed, stShowMon,  showMonth,       dotOff},
-  {stShowMon,  evBTN1Pressed, stShowYear, showYear,        dotOff},
+  {stShowTime, evBTN1Pressed, stShowWDM, showWDM,  dotOn},
+  {stShowWDM, evBTN1Pressed, stShowYear, showYear, dotOff},
 #ifdef USE_BRIGHT_CONTROL
   {stShowYear,   evBTN1Pressed, stShowBright, showBright, NULL},
   {stShowBright, evBTN1Pressed, stShowTime,   showTime,   NULL},
@@ -51,23 +48,17 @@ const table_state_t stateTable[] PROGMEM = {
   {stShowHumidity,    evBTN1Pressed, stShowTemperature,  dotOnPersistent, showTemperature},
 #endif // USE_DHT
   /* display wdt */
-  {stShowWDay,   evDisplayWDT, stShowTime, showTime, NULL},
-  {stShowMDay,   evDisplayWDT, stShowTime, showTime, NULL},
-  {stShowMon,    evDisplayWDT, stShowTime, showTime, NULL},
-  {stShowYear,   evDisplayWDT, stShowTime, showTime, NULL},
+  {stShowWDM,  evDisplayWDT, stShowTime, showTime, NULL},
+  {stShowYear, evDisplayWDT, stShowTime, showTime, NULL},
 #ifdef USE_BRIGHT_CONTROL
   {stShowBright, evDisplayWDT, stShowTime, showTime, NULL},
 #endif
   /* refresh output */
   {stShowTime, evNewSecond,  stNoChange, showTime,  NULL},
-  {stShowMMSS, evNewSecond,  stNoChange, showMMSS,  NULL},
-  {stShowWDay, evRefreshCal, stNoChange, showWDay,  NULL},
-  {stShowMDay, evRefreshCal, stNoChange, showMDay,  NULL},
-  {stShowMon,  evRefreshCal, stNoChange, showMonth, NULL},
+  {stShowWDM,  evRefreshCal, stNoChange, showWDM, NULL},
   {stShowYear, evRefreshCal, stNoChange, showYear,  NULL},
   /* set time */
   {stShowTime, evBTN1Holded,  stSetHH,    setTimeBegin, setHHBegin},
-  {stShowMMSS, evBTN1Holded,  stSetHH,    setTimeBegin, setMMBegin},
   {stSetHH,    evBTN1Pressed, stSetMM,    setMMBegin,   NULL},
   {stSetMM,    evBTN1Pressed, stSetHH,    setHHBegin,   NULL},
   {stSetHH,    evNewSecond,   stNoChange, setTimeShow,  NULL},

+ 85 - 15
src/main.c

@@ -62,7 +62,7 @@ static struct {
 
 
 /* Variables */
-static volatile uint8_t Digit[6] = {1, 2, 3, 4, 5, 6};
+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;
@@ -86,12 +86,12 @@ 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);
+static void lampTest(void);
 #ifdef USE_DHT
 static void dhtStart(void);
 static void dhtProcess(void);
@@ -131,7 +131,9 @@ void main(void) {
 
   /* Initialize Scheduler */
   RTOS_Init();
-  tdelay_ms(10000);
+  tdelay_ms(2000);
+  lampTest();
+  tdelay_ms(5000);
 
   /* Initialize I2C Bus and RTC */
   I2C_Init();
@@ -157,8 +159,9 @@ 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);
         }
@@ -287,6 +290,7 @@ static void setSummerWinterTime(void) {
       RTC.Hr = 4;
       RTC_WriteHHMM(&RTC);
       sunTime = 0;
+      eeprom_update_byte(&EEP_SummerTime, sunTime);
     }
   }
 
@@ -296,13 +300,13 @@ static void setSummerWinterTime(void) {
       RTC.Hr = 3;
       RTC_WriteHHMM(&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;
 }
 
@@ -475,11 +479,14 @@ 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 showWDM(void) {
+  DISP_WDT = DISP_WDT_TIME;
+  Digit[0] = RTC.WD & 0x0F;
+  Digit[1] = DIGIT_BLANK;
+  Digit[2] = RTC.Day >> 4;
+  Digit[3] = RTC.Day & 0x0F;
+  Digit[4] = RTC.Mon >> 4;
+  Digit[5] = RTC.Mon & 0x0F;
 }
 
 void showWDay(void) {
@@ -488,6 +495,8 @@ void showWDay(void) {
   Digit[1] = DIGIT_BLANK;
   Digit[2] = RTC.WD & 0x0F;
   Digit[3] = DIGIT_BLANK;
+  Digit[4] = DIGIT_BLANK;
+  Digit[5] = DIGIT_BLANK;
 }
 
 void showMDay(void) {
@@ -496,6 +505,8 @@ void showMDay(void) {
   Digit[1] = RTC.Day & 0x0F;
   Digit[2] = DIGIT_BLANK;
   Digit[3] = DIGIT_BLANK;
+  Digit[4] = DIGIT_BLANK;
+  Digit[5] = DIGIT_BLANK;
 }
 
 void showMonth(void) {
@@ -508,10 +519,12 @@ void showMonth(void) {
 
 void showYear(void) {
   DISP_WDT = DISP_WDT_TIME;
-  Digit[0] = 0x02;
-  Digit[1] = 0x00;
-  Digit[2] = RTC.Year >> 4;
-  Digit[3] = RTC.Year & 0x0F;
+  Digit[0] = DIGIT_BLANK;
+  Digit[1] = DIGIT_BLANK;
+  Digit[2] = 0x02;
+  Digit[3] = 0x00;
+  Digit[4] = RTC.Year >> 4;
+  Digit[5] = RTC.Year & 0x0F;
 }
 
 void incWDay(void) {
@@ -722,6 +735,63 @@ void usart_puts (const char *send) {
 }
 #endif // USE_UART
 
+/**
+ * Lamp Test
+ */
+static void lampValInc(uint8_t n)
+{
+  if (n < LAMP_NUM) {
+    if (Digit[n] != DIGIT_BLANK) {
+      Digit[n] ++;
+    } else {
+      Digit[n] = 1;
+    }
+    if (Digit[n] > 9) {
+      Digit[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[0] = i;
+    i ++;
+    if (i > 9) {
+      Digit[0] = 0;
+      dotOn();
+      lampValInc(1);
+    }
+    tdelay_ms(200);
+
+    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;
+    }
+
+  }
+}
+
 /**
  *  П р е р ы в а н и я
  */