From 690ca7817efdb5c28812dacc37034d9751108671 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Sun, 1 Nov 2020 18:48:39 +0100 Subject: [PATCH] significant progress on frontend --- cube/User/Src/frontend.c | 34 ++++++++++++++++++++++++++++++---- cube/User/Src/main2.c | 2 +- cube/User/Src/mbusComm.c | 26 ++++++++++++++++++++++---- 3 files changed, 53 insertions(+), 9 deletions(-) diff --git a/cube/User/Src/frontend.c b/cube/User/Src/frontend.c index 30d3449..dcb099f 100644 --- a/cube/User/Src/frontend.c +++ b/cube/User/Src/frontend.c @@ -10,7 +10,7 @@ -static volatile uint16_t frontendAdcThreshold = 0; +static volatile int32_t frontendAdcThreshold = 240; static volatile bool frontendEnabled = false; @@ -34,10 +34,36 @@ void frontendDisable() { } void frontendAdcCallback(ADC_HandleTypeDef* hadc) { + static int32_t holdValue = 0; + static uint32_t cnt = 0; + HAL_GPIO_TogglePin(Debug_Signal_1_GPIO_Port, Debug_Signal_1_Pin); - uint32_t rawValue = HAL_ADC_GetValue(hadc); - if (rawValue > frontendAdcThreshold) { - HAL_GPIO_TogglePin(Frontend_Out_GPIO_Port, Frontend_Out_Pin); + + if (frontendEnabled) { + int32_t currentValue = (int32_t) HAL_ADC_GetValue(hadc); + + if (holdValue == 0) { + holdValue = currentValue; + logMsg("frontend enabled, hold: %d", holdValue); + } + + if (currentValue - holdValue > frontendAdcThreshold) { + HAL_GPIO_WritePin(Frontend_Out_GPIO_Port, Frontend_Out_Pin, GPIO_PIN_SET); + cnt++; + if (cnt > 25) { + logMsg("frontend, high: %d, hold: %d, diff: %d", currentValue, holdValue, currentValue - holdValue); + cnt = 0; + } + } else { + HAL_GPIO_WritePin(Frontend_Out_GPIO_Port, Frontend_Out_Pin, GPIO_PIN_RESET); + cnt = 0; + } + } else { + if (holdValue != 0) { + holdValue = 0; + HAL_GPIO_WritePin(Frontend_Out_GPIO_Port, Frontend_Out_Pin, GPIO_PIN_SET); + logMsg("frontend disabled"); + } } } diff --git a/cube/User/Src/main2.c b/cube/User/Src/main2.c index 506c818..144478f 100644 --- a/cube/User/Src/main2.c +++ b/cube/User/Src/main2.c @@ -39,7 +39,7 @@ void my_setup_2() { frontendInit(); - schAdd(helloMeterbus, NULL, 0, 10000); + schAdd(helloMeterbus, NULL, 0, 1000); } void my_loop() { diff --git a/cube/User/Src/mbusComm.c b/cube/User/Src/mbusComm.c index 8f97b67..fce2cbb 100644 --- a/cube/User/Src/mbusComm.c +++ b/cube/User/Src/mbusComm.c @@ -5,13 +5,16 @@ #include #include #include +#include typedef enum { IDLE, SEND, SEND_CONT, - SENDING + SENDING, + ENABLE_FRONTEND, + DISABLE_FRONTEND } e_mbusCommState; typedef struct { @@ -56,19 +59,34 @@ static void handleRequestEngine(void *handle) { localMbusCommHandle->retryCnt = 0; HAL_UART_Transmit_IT(&mbusUart, localMbusCommHandle->sendBuf, 5); localMbusCommHandle->state = SENDING; - schAdd(handleRequestEngine, handle, 5, 0); // ask me again in 1ms in the next state ... + schAdd(handleRequestEngine, handle, 15, 0); // ask me again in 15ms in the next state ... } break; case SENDING: logMsg("hre state SENDING"); if (HAL_UART_GetState(&mbusUart) == HAL_UART_STATE_READY) { // ... whether I'm done - localMbusCommHandle->state = IDLE; + localMbusCommHandle->state = ENABLE_FRONTEND; + schAdd(handleRequestEngine, handle, 3, 0); } else { - schAdd(handleRequestEngine, handle, 5, 0); // not yet done, ask me again in 1ms + schAdd(handleRequestEngine, handle, 1, 0); // not yet done, ask me again in 1ms } break; + case ENABLE_FRONTEND: + logMsg("hre state ENABLE_FRONTEND"); + frontendEnable(); + localMbusCommHandle->state = DISABLE_FRONTEND; + schAdd(handleRequestEngine, handle, 20, 0); + break; + + case DISABLE_FRONTEND: + logMsg("hre state DISABLE_FRONTEND"); + frontendDisable(); + localMbusCommHandle->state = IDLE; + break; + + default: localMbusCommHandle->state = IDLE; break;