|
@@ -22,6 +22,7 @@
|
|
|
#include "stm8l15x.h"
|
|
|
#include "rtos.h"
|
|
|
#include "max7219.h"
|
|
|
+#include "adc.h"
|
|
|
|
|
|
/** @addtogroup STM8L15x_StdPeriph_Template
|
|
|
* @{
|
|
@@ -74,14 +75,19 @@ static const max7219_sym_t num[16] = {
|
|
|
};
|
|
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
|
+extern uint16_t Voltage;
|
|
|
+extern uint16_t Current;
|
|
|
+extern uint16_t RefVolt;
|
|
|
+//extern uint16_t Buffer[];
|
|
|
+
|
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
|
static void GPIO_Config(void);
|
|
|
static void CLK_Config(void);
|
|
|
|
|
|
/* RTOS function prototypes -----------------------------------------------*/
|
|
|
-static void OutLed07(void);
|
|
|
-static void OutLed8f(void);
|
|
|
-static void ToggleLed(void);
|
|
|
+static void ShowTopLineV(void);
|
|
|
+static void ShowTopLineC(void);
|
|
|
+static void ShowBotLine(void);
|
|
|
|
|
|
/* Private functions ---------------------------------------------------------*/
|
|
|
|
|
@@ -101,13 +107,16 @@ void main(void)
|
|
|
/* RTOS Configuration */
|
|
|
RTOS_Init();
|
|
|
|
|
|
+ /* ADC Configuration and start */
|
|
|
+ Init_ADC();
|
|
|
+
|
|
|
/* MAX7219 Configuration */
|
|
|
MAX7219_Init();
|
|
|
|
|
|
/* ROTS tasks */
|
|
|
- RTOS_SetTask(OutLed8f,0,10000);
|
|
|
- RTOS_SetTask(OutLed07,5000,10000);
|
|
|
- RTOS_SetTask(ToggleLed,1000,1000);
|
|
|
+ RTOS_SetTask(ShowTopLineV,100,4000);
|
|
|
+ RTOS_SetTask(ShowTopLineC,2100,4000);
|
|
|
+ RTOS_SetTask(ShowBotLine,101,100);
|
|
|
|
|
|
/* Infinite loop */
|
|
|
while (1)
|
|
@@ -117,44 +126,66 @@ void main(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/* для теста */
|
|
|
-static void OutLed07(void){
|
|
|
- uint8_t i;
|
|
|
- for (i=0;i<8;i++) {
|
|
|
- MAX7219_WriteData(dig[i], num[i]);
|
|
|
- }
|
|
|
+/*
|
|
|
+ * Output to top indicator line
|
|
|
+ */
|
|
|
+static void ShowTopLineV(void){
|
|
|
+ uint8_t voltage1000 = 0;
|
|
|
+ uint8_t voltage100 = 0;
|
|
|
+ uint8_t voltage10 = 0;
|
|
|
+ uint8_t voltage1 = 0;
|
|
|
+
|
|
|
+ /* Thousands voltage value*/
|
|
|
+ voltage1000 = (uint8_t)(Voltage / 1000);
|
|
|
+ /* Hundreds voltage value */
|
|
|
+ voltage100 = (uint8_t)((Voltage % 1000) / 100);
|
|
|
+ /* Tens voltage value */
|
|
|
+ voltage10 = (uint8_t)((Voltage % 100 ) / 10);
|
|
|
+ /* Ones voltage value */
|
|
|
+ voltage1 = (uint8_t)(Voltage % 10);
|
|
|
+
|
|
|
+ LED_GREEN_ON;
|
|
|
+
|
|
|
+ MAX7219_WriteData(dig[0], num[voltage1000]);
|
|
|
+ MAX7219_WriteData(dig[1], num[voltage100]);
|
|
|
+ MAX7219_WriteData(dig[2], num[voltage10]);
|
|
|
+ MAX7219_WriteData(dig[3], num[voltage1]);
|
|
|
}
|
|
|
|
|
|
-static void OutLed8f(void){
|
|
|
- uint8_t i;
|
|
|
- for (i=15;i>7;i--) {
|
|
|
- MAX7219_WriteData(dig[i-8], num[i]);
|
|
|
- }
|
|
|
+static void ShowTopLineC(void){
|
|
|
+ LED_GREEN_OFF;
|
|
|
+ uint8_t tmp = Current / 1000;
|
|
|
+ MAX7219_WriteData(dig[0], num[tmp]);
|
|
|
+ tmp = (Current % 1000) / 100;
|
|
|
+ MAX7219_WriteData(dig[1], num[tmp]);
|
|
|
+ tmp = (Current % 100) / 10;
|
|
|
+ MAX7219_WriteData(dig[2], num[tmp]);
|
|
|
+ tmp = Current % 10;
|
|
|
+ MAX7219_WriteData(dig[3], num[tmp]);
|
|
|
}
|
|
|
|
|
|
-static void ToggleLed(void){
|
|
|
- static uint8_t state=0;
|
|
|
-
|
|
|
- switch(state){
|
|
|
- case 0:
|
|
|
- LED_RED_ON;
|
|
|
- state = 1;
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- LED_GREEN_ON;
|
|
|
- state = 2;
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- LED_RED_OFF;
|
|
|
- state = 3;
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- LED_GREEN_OFF;
|
|
|
- state = 0;
|
|
|
- break;
|
|
|
- default:
|
|
|
- state = 0;
|
|
|
- }
|
|
|
+/*
|
|
|
+ * Output to bottom indicator line
|
|
|
+ */
|
|
|
+static void ShowBotLine(void){
|
|
|
+ uint8_t voltage1000 = 0;
|
|
|
+ uint8_t voltage100 = 0;
|
|
|
+ uint8_t voltage10 = 0;
|
|
|
+ uint8_t voltage1 = 0;
|
|
|
+
|
|
|
+ /* Thousands voltage value*/
|
|
|
+ voltage1000 = (uint8_t)(RefVolt / 1000);
|
|
|
+ /* Hundreds voltage value */
|
|
|
+ voltage100 = (uint8_t)((RefVolt % 1000) / 100);
|
|
|
+ /* Tens voltage value */
|
|
|
+ voltage10 = (uint8_t)((RefVolt % 100 ) / 10);
|
|
|
+ /* Ones voltage value */
|
|
|
+ voltage1 = (uint8_t)(RefVolt % 10);
|
|
|
+
|
|
|
+ MAX7219_WriteData(dig[4], num[voltage1000]);
|
|
|
+ MAX7219_WriteData(dig[5], num[voltage100]);
|
|
|
+ MAX7219_WriteData(dig[6], num[voltage10]);
|
|
|
+ MAX7219_WriteData(dig[7], num[voltage1]);
|
|
|
}
|
|
|
|
|
|
|