|
@@ -75,10 +75,13 @@ static const max7219_sym_t num[16] = {
|
|
};
|
|
};
|
|
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
/* Private variables ---------------------------------------------------------*/
|
|
-extern uint16_t Voltage;
|
|
|
|
-extern uint16_t Current;
|
|
|
|
-extern uint16_t RefVolt;
|
|
|
|
-//extern uint16_t Buffer[];
|
|
|
|
|
|
+uint16_t Voltage = 0;
|
|
|
|
+uint16_t Current = 0;
|
|
|
|
+uint16_t RefVolt = 0;
|
|
|
|
+
|
|
|
|
+extern uint16_t VoltageFastBuffer[];
|
|
|
|
+extern uint16_t CurrentFastBuffer[];
|
|
|
|
+extern uint16_t RefVoltFastBuffer[];
|
|
|
|
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
static void GPIO_Config(void);
|
|
static void GPIO_Config(void);
|
|
@@ -88,6 +91,7 @@ static void CLK_Config(void);
|
|
static void ShowTopLineV(void);
|
|
static void ShowTopLineV(void);
|
|
static void ShowTopLineC(void);
|
|
static void ShowTopLineC(void);
|
|
static void ShowBotLine(void);
|
|
static void ShowBotLine(void);
|
|
|
|
+static void ProcessFastBuffer(void);
|
|
|
|
|
|
/* Private functions ---------------------------------------------------------*/
|
|
/* Private functions ---------------------------------------------------------*/
|
|
|
|
|
|
@@ -114,8 +118,9 @@ void main(void)
|
|
MAX7219_Init();
|
|
MAX7219_Init();
|
|
|
|
|
|
/* ROTS tasks */
|
|
/* ROTS tasks */
|
|
- RTOS_SetTask(ShowTopLineV,100,4000);
|
|
|
|
- RTOS_SetTask(ShowTopLineC,2100,4000);
|
|
|
|
|
|
+ RTOS_SetTask(ProcessFastBuffer,0,100);
|
|
|
|
+ RTOS_SetTask(ShowTopLineV,101,4000);
|
|
|
|
+ RTOS_SetTask(ShowTopLineC,2101,4000);
|
|
RTOS_SetTask(ShowBotLine,101,100);
|
|
RTOS_SetTask(ShowBotLine,101,100);
|
|
|
|
|
|
/* Infinite loop */
|
|
/* Infinite loop */
|
|
@@ -126,6 +131,31 @@ void main(void)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Фильтрация и усреднение данных из быстрого буфера,
|
|
|
|
+ * вычесление значений, перенос в медленный буфер.
|
|
|
|
+ */
|
|
|
|
+static void ProcessFastBuffer(void){
|
|
|
|
+ uint16_t volt=0, curr=0, ref=0;
|
|
|
|
+
|
|
|
|
+ /* Summarize buffers values */
|
|
|
|
+ uint8_t i;
|
|
|
|
+ for(i=0;i<FAST_BUFFER_SIZE;i++){
|
|
|
|
+ volt += VoltageFastBuffer[i];
|
|
|
|
+ curr += CurrentFastBuffer[i];
|
|
|
|
+ ref += RefVoltFastBuffer[i];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* Calculate voltage value*/
|
|
|
|
+ Voltage = ((volt / FAST_BUFFER_SIZE) * ADC_VOLT_RATIO) / 1000;
|
|
|
|
+
|
|
|
|
+ /* Calculate current value*/
|
|
|
|
+ Current = ((curr / FAST_BUFFER_SIZE) * ADC_RATIO) / 1000;
|
|
|
|
+
|
|
|
|
+ /* Calculate reference voltage value*/
|
|
|
|
+ RefVolt = ((ref / FAST_BUFFER_SIZE) * ADC_RATIO) / 1000;
|
|
|
|
+}
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Output to top indicator line
|
|
* Output to top indicator line
|
|
*/
|
|
*/
|
|
@@ -144,7 +174,7 @@ static void ShowTopLineV(void){
|
|
/* Ones voltage value */
|
|
/* Ones voltage value */
|
|
voltage1 = (uint8_t)(Voltage % 10);
|
|
voltage1 = (uint8_t)(Voltage % 10);
|
|
|
|
|
|
- LED_GREEN_ON;
|
|
|
|
|
|
+ LED_RED_ON;
|
|
|
|
|
|
MAX7219_WriteData(dig[0], num[voltage1000]);
|
|
MAX7219_WriteData(dig[0], num[voltage1000]);
|
|
MAX7219_WriteData(dig[1], num[voltage100]);
|
|
MAX7219_WriteData(dig[1], num[voltage100]);
|
|
@@ -153,7 +183,7 @@ static void ShowTopLineV(void){
|
|
}
|
|
}
|
|
|
|
|
|
static void ShowTopLineC(void){
|
|
static void ShowTopLineC(void){
|
|
- LED_GREEN_OFF;
|
|
|
|
|
|
+ LED_RED_OFF;
|
|
uint8_t tmp = Current / 1000;
|
|
uint8_t tmp = Current / 1000;
|
|
MAX7219_WriteData(dig[0], num[tmp]);
|
|
MAX7219_WriteData(dig[0], num[tmp]);
|
|
tmp = (Current % 1000) / 100;
|
|
tmp = (Current % 1000) / 100;
|