Browse Source

Reorgonize tbe control.

Vladimir N. Shilov 3 years ago
parent
commit
7f878c5f4f
3 changed files with 106 additions and 53 deletions
  1. 3 1
      Inc/board.h
  2. 62 11
      Src/board.c
  3. 41 41
      Src/clock.c

+ 3 - 1
Inc/board.h

@@ -153,7 +153,7 @@ typedef union {
     uint8_t tD;  /* element specifier for accessing Tube_D(3) */
     uint8_t tB;  /* element specifier for accessing Tube_B(2) */
     uint8_t tA;  /* element specifier for accessing Tube_A(1) */
-  } s32;         /* element spec. for acc. struct with tubes  */
+  } s8;         /* element spec. for acc. struct with tubes  */
 } tube4_t;
 
 /* Exported funcions */
@@ -163,5 +163,7 @@ void Blink_Start(void);
 void Blink_Stop(void);
 void showDigits(tube4_t dig);
 void HSV2LED(const uint8_t hue, const uint8_t sat, const uint8_t val);
+void tube_PowerOn(tube_pos_t tube);
+void tube_PowerOff(tube_pos_t tube);
 
 #endif /* _BPARD_H */

+ 62 - 11
Src/board.c

@@ -122,7 +122,7 @@ void showDigits(tube4_t dig)
         // old tube value
         st = 0;
         _show_digits((tube4_t)old_dig);
-        tdelay_ms(20 - ov);
+        tdelay_ms(10 - ov);
       }
     } // End of while
     old_dig = dig.u32;
@@ -153,36 +153,45 @@ static void _show_digits(tube4_t dig)
   Flag.SPI_TX_End = 0;
 
   /* Feel buffer */
-  tubesBuffer[0] = (uint8_t)(nixieCathodeMap[Tube_E][dig.s32.tE] >> 8);
-  tubesBuffer[1] = (uint8_t)((nixieCathodeMap[Tube_E][dig.s32.tE]) | (nixieCathodeMap[Tube_D][dig.s32.tD] >> 8));
-  tubesBuffer[2] = (uint8_t)((nixieCathodeMap[Tube_D][dig.s32.tD]) | (nixieCathodeMap[Tube_B][dig.s32.tB] >> 8));
-  tubesBuffer[3] = (uint8_t)((nixieCathodeMap[Tube_B][dig.s32.tB]) | (nixieCathodeMap[Tube_A][dig.s32.tA] >> 8));
-  tubesBuffer[4] = (uint8_t)(nixieCathodeMap[Tube_A][dig.s32.tA]);
+  tubesBuffer[0] = (uint8_t)(nixieCathodeMap[Tube_E][dig.s8.tE] >> 8);
+  tubesBuffer[1] = (uint8_t)((nixieCathodeMap[Tube_E][dig.s8.tE]) | (nixieCathodeMap[Tube_D][dig.s8.tD] >> 8));
+  tubesBuffer[2] = (uint8_t)((nixieCathodeMap[Tube_D][dig.s8.tD]) | (nixieCathodeMap[Tube_B][dig.s8.tB] >> 8));
+  tubesBuffer[3] = (uint8_t)((nixieCathodeMap[Tube_B][dig.s8.tB]) | (nixieCathodeMap[Tube_A][dig.s8.tA] >> 8));
+  tubesBuffer[4] = (uint8_t)(nixieCathodeMap[Tube_A][dig.s8.tA]);
 
   /* Start DMA transfer to SPI */
   DMA1_Channel1->CCR |= DMA_CCR_EN;
 
   /* On/Off tube power */
-  if (dig.s32.tA == 0xf) {
+  for (i=0; i<4; i++) {
+    if (dig.ar[i] == 0xf) {
+      tube_PowerOff((tube_pos_t)i);
+    } else {
+      tube_PowerOn((tube_pos_t)i);
+    }
+  }
+/*
+  if (dig.s8.tA == 0xf) {
     TUBE_A_OFF;
   } else {
     TUBE_A_ON;
   }
-  if (dig.s32.tB == 0xf) {
+  if (dig.s8.tB == 0xf) {
     TUBE_B_OFF;
   } else {
     TUBE_B_ON;
   }
-  if (dig.s32.tD == 0xf) {
+  if (dig.s8.tD == 0xf) {
     TUBE_D_OFF;
-  } else {
+    } else {
     TUBE_D_ON;
   }
-  if (dig.s32.tE == 0xf) {
+  if (dig.s8.tE == 0xf) {
     TUBE_E_OFF;
   } else {
     TUBE_E_ON;
   }
+*/
 }
 
 /**
@@ -241,6 +250,48 @@ void HSV2LED(const uint8_t hue, const uint8_t sat, const uint8_t val) {
   COLOR_B(b);
 }
 
+void tube_PowerOn(tube_pos_t tube)
+{
+  switch (tube) {
+  case Tube_A:
+    TUBE_A_ON;
+    break;
+  case Tube_B:
+    TUBE_B_ON;
+    break;
+  case Tube_D:
+    TUBE_D_ON;
+    break;
+  case Tube_E:
+    TUBE_E_ON;
+    break;
+  
+  default:
+    break;
+  }
+}
+
+void tube_PowerOff(tube_pos_t tube)
+{
+  switch (tube) {
+  case Tube_A:
+    TUBE_A_OFF;
+    break;
+  case Tube_B:
+    TUBE_B_OFF;
+    break;
+  case Tube_D:
+    TUBE_D_OFF;
+    break;
+  case Tube_E:
+    TUBE_E_OFF;
+    break;
+  
+  default:
+    break;
+  }
+}
+
 /**
   * @brief System Clock Configuration
   * @retval None

+ 41 - 41
Src/clock.c

@@ -158,20 +158,20 @@ void showTime(void) {
   MinusFadeIn();
   RTOS_SetTask(MinusFadeOut, 500, 0);
 
-  uint8_t hue = bcd2bin(Clock.Sec);// * 6;
+  uint8_t hue = bcd2bin(Clock.Sec);
   HSV2LED(hue, 255, 63);
 
   tube4_t buf;
 /*
-  buf.s32.tA = Clock.Hr >> 4;
-  buf.s32.tB = Clock.Hr & 0xf;
-  buf.s32.tD = Clock.Min >> 4;
-  buf.s32.tE = Clock.Min & 0xf;
+  buf.s8.tA = Clock.Hr >> 4;
+  buf.s8.tB = Clock.Hr & 0xf;
+  buf.s8.tD = Clock.Min >> 4;
+  buf.s8.tE = Clock.Min & 0xf;
 */
-  buf.s32.tA = Clock.Min >> 4;
-  buf.s32.tB = Clock.Min & 0xf;
-  buf.s32.tD = Clock.Sec >> 4;
-  buf.s32.tE = Clock.Sec & 0xf;
+  buf.s8.tA = Clock.Min >> 4;
+  buf.s8.tB = Clock.Min & 0xf;
+  buf.s8.tD = Clock.Sec >> 4;
+  buf.s8.tE = Clock.Sec & 0xf;
   showDigits(buf);
 }
 
@@ -180,10 +180,10 @@ void showWD(void) {
   IN15_OFF;
 
   tube4_t buf;
-  buf.s32.tA = 0xf;
-  buf.s32.tB = Clock.WD & 0xf;
-  buf.s32.tD = 0xf;
-  buf.s32.tE = 0xf;
+  buf.s8.tA = 0xf;
+  buf.s8.tB = Clock.WD & 0xf;
+  buf.s8.tD = 0xf;
+  buf.s8.tE = 0xf;
   showDigits(buf);
 }
 
@@ -192,10 +192,10 @@ void showDay(void) {
   IN15_OFF;
 
   tube4_t buf;
-  buf.s32.tA = Clock.Day >> 4;
-  buf.s32.tB = Clock.Day & 0xf;
-  buf.s32.tD = 0xf;
-  buf.s32.tE = 0xf;
+  buf.s8.tA = Clock.Day >> 4;
+  buf.s8.tB = Clock.Day & 0xf;
+  buf.s8.tD = 0xf;
+  buf.s8.tE = 0xf;
   showDigits(buf);
 }
 
@@ -204,10 +204,10 @@ void showMonth(void) {
   IN15_OFF;
 
   tube4_t buf;
-  buf.s32.tA = 0xf;
-  buf.s32.tB = 0xf;
-  buf.s32.tD = Clock.Mon >> 4;
-  buf.s32.tE = Clock.Mon & 0xf;
+  buf.s8.tA = 0xf;
+  buf.s8.tB = 0xf;
+  buf.s8.tD = Clock.Mon >> 4;
+  buf.s8.tE = Clock.Mon & 0xf;
   showDigits(buf);
 }
 
@@ -216,10 +216,10 @@ void showDayMon(void) {
   IN15_OFF;
 
   tube4_t buf;
-  buf.s32.tA = Clock.Day >> 4;
-  buf.s32.tB = Clock.Day & 0xf;
-  buf.s32.tD = Clock.Mon >> 4;
-  buf.s32.tE = Clock.Mon & 0xf;
+  buf.s8.tA = Clock.Day >> 4;
+  buf.s8.tB = Clock.Day & 0xf;
+  buf.s8.tD = Clock.Mon >> 4;
+  buf.s8.tE = Clock.Mon & 0xf;
   showDigits(buf);
 }
 
@@ -228,10 +228,10 @@ void showYear(void) {
   IN15_OFF;
 
   tube4_t buf;
-  buf.s32.tA = 2;
-  buf.s32.tB = 0;
-  buf.s32.tD = Clock.Year >> 4;
-  buf.s32.tE = Clock.Year & 0xf;
+  buf.s8.tA = 2;
+  buf.s8.tB = 0;
+  buf.s8.tD = Clock.Year >> 4;
+  buf.s8.tE = Clock.Year & 0xf;
   showDigits(buf);
 }
 
@@ -240,10 +240,10 @@ void showHumidity(void) {
   in15Percent();
 
   tube4_t buf;
-  buf.s32.tA = Humidity / 10;
-  buf.s32.tB = Humidity % 10;
-  buf.s32.tD = 0xf;
-  buf.s32.tE = 0xf;
+  buf.s8.tA = Humidity / 10;
+  buf.s8.tB = Humidity % 10;
+  buf.s8.tD = 0xf;
+  buf.s8.tE = 0xf;
   showDigits(buf);
 }
 
@@ -252,10 +252,10 @@ void showTemperature(void) {
   in15Plus();
 
   tube4_t buf;
-  buf.s32.tA = 0xf;
-  buf.s32.tB = 0xf;
-  buf.s32.tD = Temperature / 10;
-  buf.s32.tE = Temperature % 10;
+  buf.s8.tA = 0xf;
+  buf.s8.tB = 0xf;
+  buf.s8.tD = Temperature / 10;
+  buf.s8.tE = Temperature % 10;
   showDigits(buf);
 }
 
@@ -265,11 +265,11 @@ void showPressure(void) {
 
   tube4_t buf;
   int tmp;
-  buf.s32.tA = 0xf;
-  buf.s32.tB = Pressure / 100;
+  buf.s8.tA = 0xf;
+  buf.s8.tB = Pressure / 100;
   tmp = Pressure % 100;
-  buf.s32.tD = tmp / 10;
-  buf.s32.tE = tmp % 10;
+  buf.s8.tD = tmp / 10;
+  buf.s8.tE = tmp % 10;
   showDigits(buf);
 }