ADC Temp error handling, rename temps

This commit is contained in:
2022-11-23 12:54:49 +01:00
parent 8a95e24982
commit 9830c36543
9 changed files with 71 additions and 71 deletions

View File

@ -7,7 +7,7 @@
}, },
"cortex-debug.armToolchainPath": "c:\\Users\\pique_n\\AppData\\Roaming\\Code\\User\\globalStorage\\bmd.stm32-for-vscode\\@xpack-dev-tools\\arm-none-eabi-gcc\\11.3.1-1.1.2\\.content\\bin", "cortex-debug.armToolchainPath": "c:\\Users\\pique_n\\AppData\\Roaming\\Code\\User\\globalStorage\\bmd.stm32-for-vscode\\@xpack-dev-tools\\arm-none-eabi-gcc\\11.3.1-1.1.2\\.content\\bin",
"cortex-debug.openocdPath": "C:\\USERS\\PIQUE_N\\APPDATA\\ROAMING\\CODE\\USER\\GLOBALSTORAGE\\BMD.STM32-FOR-VSCODE\\@XPACK-DEV-TOOLS\\OPENOCD\\0.11.0-5.1\\.CONTENT\\BIN\\OPENOCD.EXE", "cortex-debug.openocdPath": "C:\\USERS\\PIQUE_N\\APPDATA\\ROAMING\\CODE\\USER\\GLOBALSTORAGE\\BMD.STM32-FOR-VSCODE\\@XPACK-DEV-TOOLS\\OPENOCD\\0.11.0-5.1\\.CONTENT\\BIN\\OPENOCD.EXE",
"cortex-debug.variableUseNaturalFormat": true, "cortex-debug.variableUseNaturalFormat": false,
"stm32-for-vscode.openOCDPath": "C:\\USERS\\PIQUE_N\\APPDATA\\ROAMING\\CODE\\USER\\GLOBALSTORAGE\\BMD.STM32-FOR-VSCODE\\@XPACK-DEV-TOOLS\\OPENOCD\\0.11.0-5.1\\.CONTENT\\BIN\\OPENOCD.EXE", "stm32-for-vscode.openOCDPath": "C:\\USERS\\PIQUE_N\\APPDATA\\ROAMING\\CODE\\USER\\GLOBALSTORAGE\\BMD.STM32-FOR-VSCODE\\@XPACK-DEV-TOOLS\\OPENOCD\\0.11.0-5.1\\.CONTENT\\BIN\\OPENOCD.EXE",
"stm32-for-vscode.makePath": "C:\\USERS\\PIQUE_N\\APPDATA\\ROAMING\\CODE\\USER\\GLOBALSTORAGE\\BMD.STM32-FOR-VSCODE\\@XPACK-DEV-TOOLS\\WINDOWS-BUILD-TOOLS\\4.3.0-1.1\\.CONTENT\\BIN\\MAKE.EXE", "stm32-for-vscode.makePath": "C:\\USERS\\PIQUE_N\\APPDATA\\ROAMING\\CODE\\USER\\GLOBALSTORAGE\\BMD.STM32-FOR-VSCODE\\@XPACK-DEV-TOOLS\\WINDOWS-BUILD-TOOLS\\4.3.0-1.1\\.CONTENT\\BIN\\MAKE.EXE",
"stm32-for-vscode.armToolchainPath": "c:\\Users\\pique_n\\AppData\\Roaming\\Code\\User\\globalStorage\\bmd.stm32-for-vscode\\@xpack-dev-tools\\arm-none-eabi-gcc\\11.3.1-1.1.2\\.content\\bin" "stm32-for-vscode.armToolchainPath": "c:\\Users\\pique_n\\AppData\\Roaming\\Code\\User\\globalStorage\\bmd.stm32-for-vscode\\@xpack-dev-tools\\arm-none-eabi-gcc\\11.3.1-1.1.2\\.content\\bin"

View File

@ -232,7 +232,7 @@ VOID vTask( PVOID arg )
if ( VARH_u32GetVariableData( VARH_eMode ) == PECO_eConstTemp ) if ( VARH_u32GetVariableData( VARH_eMode ) == PECO_eConstTemp )
{ {
// TODO: check the measurements, everything ok? // TODO: check the measurements, everything ok?
/** @todo check power good pin */
// PID Regelung // PID Regelung
@ -242,7 +242,7 @@ VOID vTask( PVOID arg )
FLOAT max = VARH_flGetVariableData( VARH_ePID_Max ); FLOAT max = VARH_flGetVariableData( VARH_ePID_Max );
FLOAT min = VARH_flGetVariableData( VARH_ePID_Min ); FLOAT min = VARH_flGetVariableData( VARH_ePID_Min );
FLOAT Tnow = VARH_flGetVariableData( VARH_eTemp_C ); FLOAT Tnow = VARH_flGetVariableData( VARH_eTemp_Module );
FLOAT Tset = VARH_flGetVariableData( VARH_ePID_Temp ); FLOAT Tset = VARH_flGetVariableData( VARH_ePID_Temp );
// -error // -error

View File

@ -82,8 +82,8 @@ LOCAL CONST VARH_StVarInfo m_astVarInfo[VARH_eNumberOfVariables] =
{ VARH_FLAGINFO_FLASH | VARH_FLAGINFO_FLOAT, (VARH_UVariable)10.0f, (VARH_UVariable)0.0f, (VARH_UVariable)12.0f }, // VARH_ePID_Max { VARH_FLAGINFO_FLASH | VARH_FLAGINFO_FLOAT, (VARH_UVariable)10.0f, (VARH_UVariable)0.0f, (VARH_UVariable)12.0f }, // VARH_ePID_Max
{ VARH_FLAGINFO_FLASH | VARH_FLAGINFO_FLOAT, (VARH_UVariable)-2.0f, (VARH_UVariable)-2.0f, (VARH_UVariable)0.0f }, // VARH_ePID_Min { VARH_FLAGINFO_FLASH | VARH_FLAGINFO_FLOAT, (VARH_UVariable)-2.0f, (VARH_UVariable)-2.0f, (VARH_UVariable)0.0f }, // VARH_ePID_Min
{ VARH_FLAGINFO_READONLY | VARH_FLAGINFO_FLOAT, (VARH_UVariable)0.0f, (VARH_UVariable)-60.0f, (VARH_UVariable)100.0f }, // VARH_eTemp_H { VARH_FLAGINFO_READONLY | VARH_FLAGINFO_FLOAT, (VARH_UVariable)0.0f, (VARH_UVariable)-60.0f, (VARH_UVariable)100.0f }, // VARH_eTemp_Water
{ VARH_FLAGINFO_READONLY | VARH_FLAGINFO_FLOAT, (VARH_UVariable)0.0f, (VARH_UVariable)-60.0f, (VARH_UVariable)100.0f }, // VARH_eTemp_C { VARH_FLAGINFO_READONLY | VARH_FLAGINFO_FLOAT, (VARH_UVariable)0.0f, (VARH_UVariable)-60.0f, (VARH_UVariable)100.0f }, // VARH_eTemp_Module
{ VARH_FLAGINFO_READONLY | VARH_FLAGINFO_FLOAT, (VARH_UVariable)0.0f, (VARH_UVariable)-50.0f, (VARH_UVariable)70.0f }, // VARH_eTemp_Diff { VARH_FLAGINFO_READONLY | VARH_FLAGINFO_FLOAT, (VARH_UVariable)0.0f, (VARH_UVariable)-50.0f, (VARH_UVariable)70.0f }, // VARH_eTemp_Diff
{ VARH_FLAGINFO_READONLY | VARH_FLAGINFO_FLOAT, (VARH_UVariable)0.0f, (VARH_UVariable)-5.0f, (VARH_UVariable)14.0f }, // VARH_ePeltier_U { VARH_FLAGINFO_READONLY | VARH_FLAGINFO_FLOAT, (VARH_UVariable)0.0f, (VARH_UVariable)-5.0f, (VARH_UVariable)14.0f }, // VARH_ePeltier_U

View File

@ -76,8 +76,8 @@ typedef enum
VARH_ePID_Max, VARH_ePID_Max,
VARH_ePID_Min, VARH_ePID_Min,
VARH_eTemp_H, VARH_eTemp_Water,
VARH_eTemp_C, VARH_eTemp_Module,
VARH_eTemp_Diff, VARH_eTemp_Diff,
VARH_ePeltier_U, VARH_ePeltier_U,

View File

@ -35,7 +35,6 @@
// Drivers // Drivers
#include "SPID_SpiDriver.h" #include "SPID_SpiDriver.h"
#include "DIPO_DigitalPorts.h" #include "DIPO_DigitalPorts.h"
//#include "EXTI_ExtiHandler.h"
// Application // Application
//#include "../Application/ELOG_ErrorLogger.h" //#include "../Application/ELOG_ErrorLogger.h"
@ -80,13 +79,6 @@
#define CONFIG_FILT50HZ (1<<0) #define CONFIG_FILT50HZ (1<<0)
#define CONFIG_FILT60HZ (0<<0) #define CONFIG_FILT60HZ (0<<0)
#define FAULT_HIGHTHRESH 0x80
#define FAULT_LOWTHRESH 0x40
#define FAULT_REFINLOW 0x20
#define FAULT_REFINHIGH 0x10
#define FAULT_RTDINLOW 0x08
#define FAULT_OVUV 0x04
#define CONFIG (U8)(CONFIG_VBIAS_ON | CONFIG_MODE_OFF | CONFIG_24WIRE | CONFIG_FILT60HZ) // enable Vbias; autoconvert off; 4-wire; 60Hz; #define CONFIG (U8)(CONFIG_VBIAS_ON | CONFIG_MODE_OFF | CONFIG_24WIRE | CONFIG_FILT60HZ) // enable Vbias; autoconvert off; 4-wire; 60Hz;
#define EVENT_ENABLE ((U32)(1<<0)) #define EVENT_ENABLE ((U32)(1<<0))
@ -204,30 +196,14 @@ BOOL ADCD_boInitializeModule( VOID )
osMutexAcquire( m_pstMutexID, osWaitForever ); osMutexAcquire( m_pstMutexID, osWaitForever );
// Conifg ADC Cold // Conifg ADC Cold
DIPO_vSetOutput( DIPO_eCS_C ); DIPO_vSetOutput( DIPO_eCS_Module );
boOK &= boWriteReg( REG_CONFIG, (U16) CONFIG | CONFIG_FAULTSTATCLEAR, FALSE ); boOK &= boWriteReg( REG_CONFIG, (U16) CONFIG | CONFIG_FAULTSTATCLEAR, FALSE );
DIPO_vResetOutput( DIPO_eCS_C ); DIPO_vResetOutput( DIPO_eCS_Module );
DIPO_vSetOutput( DIPO_eCS_C );
boOK &= boWriteReg( REG_HIGH_FAULT_MSB, (U16)0x5b12 , TRUE );
DIPO_vResetOutput( DIPO_eCS_C );
DIPO_vSetOutput( DIPO_eCS_C );
boOK &= boWriteReg( REG_LOW_FAULT_MSB, (U16)0x2690 , TRUE );
DIPO_vResetOutput( DIPO_eCS_C );
// Config ADC Hot // Config ADC Hot
DIPO_vSetOutput( DIPO_eCS_H ); DIPO_vSetOutput( DIPO_eCS_Water );
boOK &= boWriteReg( REG_CONFIG, (U16) CONFIG | CONFIG_FAULTSTATCLEAR, FALSE ); boOK &= boWriteReg( REG_CONFIG, (U16) CONFIG | CONFIG_FAULTSTATCLEAR, FALSE );
DIPO_vResetOutput( DIPO_eCS_H ); DIPO_vResetOutput( DIPO_eCS_Water );
DIPO_vSetOutput( DIPO_eCS_H );
boOK &= boWriteReg( REG_HIGH_FAULT_MSB, (U16)0x5b12 , TRUE );
DIPO_vResetOutput( DIPO_eCS_H );
DIPO_vSetOutput( DIPO_eCS_H );
boOK &= boWriteReg( REG_LOW_FAULT_MSB, (U16)0x2690 , TRUE );
DIPO_vResetOutput( DIPO_eCS_H );
osMutexRelease( m_pstMutexID ); osMutexRelease( m_pstMutexID );
@ -246,10 +222,10 @@ BOOL ADCD_boReadData( ADCD_EnTemps eChannel, PU8 pu8Error, PU16 pu16Data )
*pu8Error = 0; // reset error state *pu8Error = 0; // reset error state
U16 u16Data = 0; U16 u16Data = 0;
DIPO_EnDigitalOutput CS = DIPO_eCS_H; DIPO_EnDigitalOutput CS = DIPO_eCS_Water;
if( eChannel == ADCD_eHot ) CS = DIPO_eCS_H; if( eChannel == ADCD_eWater ) CS = DIPO_eCS_Water;
else if ( eChannel == ADCD_eCold ) CS = DIPO_eCS_C; else if ( eChannel == ADCD_eModule ) CS = DIPO_eCS_Module;
osMutexAcquire( m_pstMutexID, osWaitForever ); osMutexAcquire( m_pstMutexID, osWaitForever );
DIPO_vSetOutput( CS ); DIPO_vSetOutput( CS );
@ -257,7 +233,7 @@ BOOL ADCD_boReadData( ADCD_EnTemps eChannel, PU8 pu8Error, PU16 pu16Data )
DIPO_vResetOutput( CS ); DIPO_vResetOutput( CS );
osMutexRelease( m_pstMutexID ); osMutexRelease( m_pstMutexID );
osDelay(55); osDelay(100);
osMutexAcquire( m_pstMutexID, osWaitForever ); osMutexAcquire( m_pstMutexID, osWaitForever );
DIPO_vSetOutput( CS ); DIPO_vSetOutput( CS );
@ -268,31 +244,27 @@ BOOL ADCD_boReadData( ADCD_EnTemps eChannel, PU8 pu8Error, PU16 pu16Data )
if( !boOK ) if( !boOK )
{ {
*pu8Error |= ADCD_SPI_FAILURE; *pu8Error |= ADCD_SPI_FAILURE;
return 0; return FALSE;
} }
if( ( u16Data & 0x00 ) == 0x01 ) if( ( u16Data & 0x0001 ) == 0x0001 )
{ {
*pu8Error |= ADCD_STATUS_DATA_ERROR;
osMutexAcquire( m_pstMutexID, osWaitForever ); osMutexAcquire( m_pstMutexID, osWaitForever );
DIPO_vSetOutput( CS ); DIPO_vSetOutput( CS );
boOK &= boReadReg( REG_FAULT_STATUS, &u16Data, FALSE ); boOK &= boReadReg( REG_FAULT_STATUS, (PU16)pu8Error, FALSE );
DIPO_vResetOutput( CS ); DIPO_vResetOutput( CS );
DIPO_vSetOutput( CS ); DIPO_vSetOutput( CS );
boOK &= boWriteReg( REG_CONFIG, (U16) CONFIG | CONFIG_FAULTSTATCLEAR, FALSE ); boOK &= boWriteReg( REG_CONFIG, (U16) CONFIG | CONFIG_FAULTSTATCLEAR, FALSE );
DIPO_vResetOutput( CS ); DIPO_vResetOutput( CS );
DIPO_vSetOutput( CS );
boOK &= boReadReg( REG_HIGH_FAULT_MSB, &u16Data, TRUE );
DIPO_vResetOutput( CS );
osMutexRelease( m_pstMutexID ); osMutexRelease( m_pstMutexID );
*pu8Error |= u16Data & 0xFC; *pu8Error |= ADCD_STATUS_DATA_ERROR;
return 0;
return FALSE;
} }
u16Data = u16Data >> 1; u16Data = u16Data >> 1;

View File

@ -38,10 +38,15 @@ extern "C" {
// Description: Definition of global constants (visible by all modules). // Description: Definition of global constants (visible by all modules).
//================================================================================================= //=================================================================================================
#define ADCD_STATUS_DATA_ERROR (1<<0) #define ADCD_STATUS_DATA_ERROR 0x01
#define ADCD_SPI_FAILURE (1<<1) #define ADCD_SPI_FAILURE 0x02
//typedef VOID (*ADCD_pfnCallback)( PVOID pvCallbackArgument ); #define ADCD_FAULT_HIGHTHRESH 0x80
#define ADCD_FAULT_LOWTHRESH 0x40
#define ADCD_FAULT_REFINLOW 0x20
#define ADCD_FAULT_REFINHIGH 0x10
#define ADCD_FAULT_RTDINLOW 0x08
#define ADCD_FAULT_OVUV 0x04
//================================================================================================= //=================================================================================================
// Section: MACROS // Section: MACROS
@ -55,8 +60,8 @@ extern "C" {
//================================================================================================= //=================================================================================================
typedef enum { typedef enum {
ADCD_eHot = 0, ADCD_eWater = 0,
ADCD_eCold = 1, ADCD_eModule = 1,
ADCD_eNumberOfTemps // Must be last ADCD_eNumberOfTemps // Must be last
}ADCD_EnTemps; }ADCD_EnTemps;
@ -85,7 +90,6 @@ typedef enum {
//================================================================================================= //=================================================================================================
BOOL ADCD_boInitializeModule( VOID ); BOOL ADCD_boInitializeModule( VOID );
//BOOL ADCD_boConfig( BOOL boFast, ADCD_pfnCallback pfnDataReadyCallback, PVOID pvCallbackArg );
BOOL ADCD_boReadData( ADCD_EnTemps eChannel, PU8 pu8Error, PU16 pu16Data ); BOOL ADCD_boReadData( ADCD_EnTemps eChannel, PU8 pu8Error, PU16 pu16Data );
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -109,8 +109,8 @@ LOCAL CONST StDigitalIO m_astInputs[DIPO_eInNumberOfInputs] =
LOCAL CONST StDigitalIO m_astOutputs[DIPO_eOutNumberOfOutputs] = LOCAL CONST StDigitalIO m_astOutputs[DIPO_eOutNumberOfOutputs] =
{ {
{ GPIOB, { GPIO_PIN_6, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, TRUE, FALSE }, // 00 DIPO_eCS_C { GPIOB, { GPIO_PIN_6, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, TRUE, FALSE }, // 00 DIPO_eCS_Module
{ GPIOB, { GPIO_PIN_5, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, TRUE, FALSE }, // 01 DIPO_eCS_H { GPIOB, { GPIO_PIN_5, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, TRUE, FALSE }, // 01 DIPO_eCS_Water
{ GPIOC, { GPIO_PIN_14, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, FALSE, TRUE }, // 02 DIPO_eLED { GPIOC, { GPIO_PIN_14, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, FALSE, TRUE }, // 02 DIPO_eLED
{ GPIOA, { GPIO_PIN_8, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, FALSE, TRUE }, // 03 DIPO_eEN { GPIOA, { GPIO_PIN_8, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, FALSE, TRUE }, // 03 DIPO_eEN

View File

@ -78,8 +78,8 @@ typedef enum
typedef enum typedef enum
{ {
DIPO_eCS_C = 0, // 00 Chip Select Cold DIPO_eCS_Module = 0, // 00 Chip Select Module
DIPO_eCS_H = 1, // 01 Chip Select Hot DIPO_eCS_Water = 1, // 01 Chip Select Water
DIPO_eLED = 2, // 02 Test LED DIPO_eLED = 2, // 02 Test LED
DIPO_eEN = 3, // 03 Enable DIPO_eEN = 3, // 03 Enable

View File

@ -146,29 +146,53 @@ PRIVATE VOID vTask( PVOID arg )
UNUSED( arg ); UNUSED( arg );
BOOL boOK = TRUE; BOOL boOK = TRUE;
U8 error; U8 u8error;
U16 u16ADC_data[ADCD_eNumberOfTemps]; U16 u16ADC_data;
FLOAT flTempData[ADCD_eNumberOfTemps]; FLOAT flTempData[ADCD_eNumberOfTemps];
osDelay(10); osDelay(10);
while( TRUE ) while( TRUE )
{ {
boOK &= ADCD_boReadData( ADCD_eHot, &error, &u16ADC_data[ADCD_eHot] ); boOK &= ADCD_boReadData( ADCD_eWater, &u8error, &u16ADC_data );
boOK &= ADCD_boReadData( ADCD_eCold, &error, &u16ADC_data[ADCD_eCold] );
/** @todo call errorhandler if value == 0 */
if( boOK ) if( boOK )
{ {
flTempData[ADCD_eHot] = flConvertADCData( u16ADC_data[ADCD_eHot] ); flTempData[ADCD_eWater] = flConvertADCData( u16ADC_data );
flTempData[ADCD_eCold] = flConvertADCData( u16ADC_data[ADCD_eCold] ); } else {
VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_H, flTempData[ADCD_eHot] ); if( (u8error & ADCD_STATUS_DATA_ERROR) == ADCD_STATUS_DATA_ERROR ){
VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_C, flTempData[ADCD_eCold] ); flTempData[ADCD_eWater] = -273.16f;
VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_Diff, flTempData[ADCD_eHot] - flTempData[ADCD_eCold] );
/** @todo call error handler temp data */
} else if( (u8error & ADCD_SPI_FAILURE) == ADCD_SPI_FAILURE ){
flTempData[ADCD_eWater] = -273.16f;
/** @todo call error handler onchip spi failure */
}
} }
boOK &= ADCD_boReadData( ADCD_eModule, &u8error, &u16ADC_data );
if( boOK )
{
flTempData[ADCD_eModule] = flConvertADCData( u16ADC_data );
} else {
if( (u8error & ADCD_STATUS_DATA_ERROR) == ADCD_STATUS_DATA_ERROR ){
flTempData[ADCD_eModule] = -273.16f;
/** @todo call error handler temp data */
} else if( (u8error & ADCD_SPI_FAILURE) == ADCD_SPI_FAILURE ){
flTempData[ADCD_eModule] = -273.16f;
/** @todo call error handler onchip spi failure */
}
}
VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_Water, flTempData[ADCD_eWater] );
VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_Module, flTempData[ADCD_eModule] );
VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_Diff, flTempData[ADCD_eWater] - flTempData[ADCD_eModule] );
boOK = TRUE;
osDelay(REFRESH_MS); osDelay(REFRESH_MS);
} }
} }