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

@ -35,7 +35,6 @@
// Drivers
#include "SPID_SpiDriver.h"
#include "DIPO_DigitalPorts.h"
//#include "EXTI_ExtiHandler.h"
// Application
//#include "../Application/ELOG_ErrorLogger.h"
@ -80,13 +79,6 @@
#define CONFIG_FILT50HZ (1<<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 EVENT_ENABLE ((U32)(1<<0))
@ -204,30 +196,14 @@ BOOL ADCD_boInitializeModule( VOID )
osMutexAcquire( m_pstMutexID, osWaitForever );
// Conifg ADC Cold
DIPO_vSetOutput( DIPO_eCS_C );
DIPO_vSetOutput( DIPO_eCS_Module );
boOK &= boWriteReg( REG_CONFIG, (U16) CONFIG | CONFIG_FAULTSTATCLEAR, FALSE );
DIPO_vResetOutput( DIPO_eCS_C );
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 );
DIPO_vResetOutput( DIPO_eCS_Module );
// Config ADC Hot
DIPO_vSetOutput( DIPO_eCS_H );
DIPO_vSetOutput( DIPO_eCS_Water );
boOK &= boWriteReg( REG_CONFIG, (U16) CONFIG | CONFIG_FAULTSTATCLEAR, FALSE );
DIPO_vResetOutput( DIPO_eCS_H );
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 );
DIPO_vResetOutput( DIPO_eCS_Water );
osMutexRelease( m_pstMutexID );
@ -246,10 +222,10 @@ BOOL ADCD_boReadData( ADCD_EnTemps eChannel, PU8 pu8Error, PU16 pu16Data )
*pu8Error = 0; // reset error state
U16 u16Data = 0;
DIPO_EnDigitalOutput CS = DIPO_eCS_H;
DIPO_EnDigitalOutput CS = DIPO_eCS_Water;
if( eChannel == ADCD_eHot ) CS = DIPO_eCS_H;
else if ( eChannel == ADCD_eCold ) CS = DIPO_eCS_C;
if( eChannel == ADCD_eWater ) CS = DIPO_eCS_Water;
else if ( eChannel == ADCD_eModule ) CS = DIPO_eCS_Module;
osMutexAcquire( m_pstMutexID, osWaitForever );
DIPO_vSetOutput( CS );
@ -257,7 +233,7 @@ BOOL ADCD_boReadData( ADCD_EnTemps eChannel, PU8 pu8Error, PU16 pu16Data )
DIPO_vResetOutput( CS );
osMutexRelease( m_pstMutexID );
osDelay(55);
osDelay(100);
osMutexAcquire( m_pstMutexID, osWaitForever );
DIPO_vSetOutput( CS );
@ -268,31 +244,27 @@ BOOL ADCD_boReadData( ADCD_EnTemps eChannel, PU8 pu8Error, PU16 pu16Data )
if( !boOK )
{
*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 );
DIPO_vSetOutput( CS );
boOK &= boReadReg( REG_FAULT_STATUS, &u16Data, FALSE );
boOK &= boReadReg( REG_FAULT_STATUS, (PU16)pu8Error, FALSE );
DIPO_vResetOutput( CS );
DIPO_vSetOutput( CS );
boOK &= boWriteReg( REG_CONFIG, (U16) CONFIG | CONFIG_FAULTSTATCLEAR, FALSE );
DIPO_vResetOutput( CS );
DIPO_vSetOutput( CS );
boOK &= boReadReg( REG_HIGH_FAULT_MSB, &u16Data, TRUE );
DIPO_vResetOutput( CS );
osMutexRelease( m_pstMutexID );
*pu8Error |= u16Data & 0xFC;
return 0;
*pu8Error |= ADCD_STATUS_DATA_ERROR;
return FALSE;
}
u16Data = u16Data >> 1;

View File

@ -38,10 +38,15 @@ extern "C" {
// Description: Definition of global constants (visible by all modules).
//=================================================================================================
#define ADCD_STATUS_DATA_ERROR (1<<0)
#define ADCD_SPI_FAILURE (1<<1)
#define ADCD_STATUS_DATA_ERROR 0x01
#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
@ -55,8 +60,8 @@ extern "C" {
//=================================================================================================
typedef enum {
ADCD_eHot = 0,
ADCD_eCold = 1,
ADCD_eWater = 0,
ADCD_eModule = 1,
ADCD_eNumberOfTemps // Must be last
}ADCD_EnTemps;
@ -85,7 +90,6 @@ typedef enum {
//=================================================================================================
BOOL ADCD_boInitializeModule( VOID );
//BOOL ADCD_boConfig( BOOL boFast, ADCD_pfnCallback pfnDataReadyCallback, PVOID pvCallbackArg );
BOOL ADCD_boReadData( ADCD_EnTemps eChannel, PU8 pu8Error, PU16 pu16Data );
#ifdef __cplusplus

View File

@ -109,8 +109,8 @@ LOCAL CONST StDigitalIO m_astInputs[DIPO_eInNumberOfInputs] =
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_5, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_MEDIUM, 0 }, TRUE, FALSE }, // 01 DIPO_eCS_H
{ 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_Water
{ 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

View File

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

View File

@ -146,29 +146,53 @@ PRIVATE VOID vTask( PVOID arg )
UNUSED( arg );
BOOL boOK = TRUE;
U8 error;
U16 u16ADC_data[ADCD_eNumberOfTemps];
U8 u8error;
U16 u16ADC_data;
FLOAT flTempData[ADCD_eNumberOfTemps];
osDelay(10);
while( TRUE )
{
boOK &= ADCD_boReadData( ADCD_eHot, &error, &u16ADC_data[ADCD_eHot] );
boOK &= ADCD_boReadData( ADCD_eCold, &error, &u16ADC_data[ADCD_eCold] );
/** @todo call errorhandler if value == 0 */
boOK &= ADCD_boReadData( ADCD_eWater, &u8error, &u16ADC_data );
if( boOK )
{
flTempData[ADCD_eHot] = flConvertADCData( u16ADC_data[ADCD_eHot] );
flTempData[ADCD_eCold] = flConvertADCData( u16ADC_data[ADCD_eCold] );
VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_H, flTempData[ADCD_eHot] );
VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_C, flTempData[ADCD_eCold] );
VARH_vSetVariableDataFromSystemFloat( VARH_eTemp_Diff, flTempData[ADCD_eHot] - flTempData[ADCD_eCold] );
flTempData[ADCD_eWater] = flConvertADCData( u16ADC_data );
} else {
if( (u8error & ADCD_STATUS_DATA_ERROR) == ADCD_STATUS_DATA_ERROR ){
flTempData[ADCD_eWater] = -273.16f;
/** @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);
}
}