1
2
3
4
5using System.Reflection;
using System.Runtime.CompilerServices;
/*
* TemperatureSensor.h
*
* Created on: 15 ���� 2018
* Author: shlomo
*/
#ifndef DRIVERS_HEATER_TEMPERATURESENSOR_H_
#define DRIVERS_HEATER_TEMPERATURESENSOR_H_
#include "include.h"
#include "heater.h"
#define MINIMUM_HEATER_READ 9.0
#define MAXIMUM_HEATER_READ 283
typedef enum { //Reg Group in Tango_HW_SW.xlsx
TEMP_SENSE_ANALOG_MIXCHIP_TEMP, //ANALOG_MIXCHIP_TEMP SSR 11 used for head zone 6
TEMP_SENSE_ANALOG_DYEINGH_TEMP1, //ANALOG_DYEINGH_TEMP1_1 SSR8 Head-Zone 1
TEMP_SENSE_ANALOG_DYEINGH_TEMP2, //ANALOG_DYEINGH_TEMP2 SSR7 Head-Zone 2
TEMP_SENSE_ANALOG_DYEINGH_TEMP3, //ANALOG_DYEINGH_TEMP3 SSR6 Head-Zone 3
TEMP_SENSE_ANALOG_DYEINGH_TEMP4, //ANALOG_DYEINGH_TEMP4 SSR5 Head-Zone 4
TEMP_SENSE_ANALOG_DYEINGH_TEMP5, //ANALOG_DYEINGH_TEMP5 SSR10 Head-Zone 5
TEMP_SENSE_ANALOG_DRYER_TEMP1, //ANALOG_DRYER_TEMP1 SSR1
TEMP_SENSE_ANALOG_DRYER_TEMP2, //ANALOG_DRYER_TEMP2 SSR2
TEMP_SENSE_ANALOG_DRYER_TEMP3, //ANALOG_DRYER_TEMP3
TEMP_SENSE_AN_ENCLOSURETEMP1, //AN_ENCLOSURETEMP1_1
TEMP_SENSE_AN_ENCLOSURETEMP2, //AN_ENCLOSURETEMP2_1
TEMP_SENSE_AN_ENCLOSURETEMP3, //AN_ENCLOSURETEMP3_1 Mixer SSR4
//Head Card 16 channels for temperature measuring
//Select 0
HEAD_PT100_ZONE_1_0X80_0, //0
HEAD_PT100_ZONE_3_0X82_0, //2
HEAD_PT100_ZONE_5_0X84_0, //4
HEAD_PT100_ZONE_7_0X86_0, //6
HEAD_PT100_ZONE_9_0X88_0, //8
HEAD_PT100_ZONE_11_0X8A_0, //10
HEAD_PT100_AIR_HEATER_1_0X8C_0, //12 OUT!!!!!
HEAD_PT100_MIXER_0X8E_0, //14
//Select 1
HEAD_PT100_ZONE_2_0X80_1, //1
HEAD_PT100_ZONE_4_0X82_1, //3
HEAD_PT100_ZONE_6_0X84_1, //5
HEAD_PT100_ZONE_8_0X86_1, //7
HEAD_PT100_ZONE_10_0X88_1, //9
HEAD_PT100_ZONE_12_0X8A_1, //11
HEAD_PT100_AIR_HEATER_2_0X8C_1, //13 IN!!!!
HEAD_PT100_RESERVE_0X8E_1, //15
//WHS Card 4 channels for temperature measuring
WHS_PT100_1_0X80_0,
WHS_PT100_2_0X80_1,
WHS_PT100_3_0X82_0,
WHS_PT100_4_0X82_1,
} TEMPERATURE_SENSOR_ID_ENUM;
#define MAX_MAIN_CARD_TEMP_SENS_ID (TEMP_SENSE_AN_ENCLOSURETEMP3+1) // without the head card sensors
#define MAX_HEAD_CARD_TEMP_SENS_ID (HEAD_PT100_RESERVE_0X8E_1+1)
#define MAX_HEAD_CARD_TEMP_SENS_ID_0 (HEAD_PT100_MIXER_0X8E_0+1)
#define MAX_HEAD_CARD_TEMP_SENS_ID_1 (HEAD_PT100_RESERVE_0X8E_1+1)
#define MAX_WHS_CARD_TEMP_SENS_ID (WHS_PT100_4_0X82_1+1)
//#warning assuming that we won't use whs card without head card..
#define MAX_TANGO_TEMPERATURE_SENSOR_ID MAX_WHS_CARD_TEMP_SENS_ID // WHS + Head cards
typedef enum
{
SENSOR_CONFIG_REG0,
SENSOR_CONFIG_REG1,
SENSOR_CONFIG_REG2,
SENSOR_CONFIG_REG3,
SENSOR_CONFIG_RESTART_CONVERSIONS,
SENSOR_CONFIG_END
}SENSOR_CONFIG_STAGES_ENUM;
typedef struct
{
int32_t Temperature_C_mult_by_100;
int32_t PT100_ADC_Reading_Bits;
int32_t Calculated_Resistance;
bool Busy;
}TempSensorResponseStruct;
TempSensorResponseStruct TempSensorResponse[MAX_TANGO_TEMPERATURE_SENSOR_ID];
typedef union
{
struct
{
unsigned char PGA_BYPASS:1; //
unsigned char GAIN:3; //
unsigned char MUX:4; //
}bits;
unsigned char Byte;
}ADS1220_CONFIG_REGISTER_0;
typedef union
{
struct
{
unsigned char BCS:1; //
unsigned char TS:1; //
unsigned char CM:1; //
unsigned char MODE:2; //
unsigned char DR:3; //
}bits;
unsigned char Byte;
}ADS1220_CONFIG_REGISTER_1;
typedef union
{
struct
{
unsigned char IDAC:3; //
unsigned char PSW:1; //
unsigned char HZ50_60:2; //
unsigned char VREF:2; //
}bits;
unsigned char Byte;
}ADS1220_CONFIG_REGISTER_2;
typedef union
{
struct
{
unsigned char Always_write_0:1; //
unsigned char DRDYM:1; //
unsigned char I2MUX:3; //
unsigned char I1MUX:3; //
}bits;
unsigned char Byte;
}ADS1220_CONFIG_REGISTER_3;
typedef struct
{
ADS1220_CONFIG_REGISTER_0 Reg0; //
ADS1220_CONFIG_REGISTER_1 Reg1;//
ADS1220_CONFIG_REGISTER_2 Reg2;
ADS1220_CONFIG_REGISTER_3 Reg3;
}TempSensConfigStruc;
TempSensConfigStruc TempSensConfig[MAX_MAIN_CARD_TEMP_SENS_ID];
uint32_t TemperatureSensorsReset(void); // No need to use !!! (No need to reset)
void FPGA_SensorInitConfig();// set the registers
uint32_t TemperatureSensorSync(TEMPERATURE_SENSOR_ID_ENUM SensorId); // send read command
uint32_t TemperatureSensorReadFromFPGA_Res(TEMPERATURE_SENSOR_ID_ENUM SensorId);//get read respose
uint32_t CalculateTemperatures(TEMPERATURE_SENSOR_ID_ENUM SensorId, uint32_t Data);
int TemperatureSensorRead(TEMPERATURE_SENSOR_ID_ENUM SensorId); // read from buffer
int TemperatureListString(char* str);
//The temparature will be at:
//TempSensorResponse[TEMP_SENSE_ANALOG_DYEINGH_TEMP1].Temperature_C_mult_by_100
uint8_t FPGA_SensorInitConfigReg();
uint32_t FPGA_SensorConfig_callback(TEMPERATURE_SENSOR_ID_ENUM SensorId, uint32_t Stage);
uint32_t TemperatureSendSensorDummyClk(TEMPERATURE_SENSOR_ID_ENUM SensorId);
void Debug_Start_PT00(TEMPERATURE_SENSOR_ID_ENUM TEMP_SENSE_ANALOG);
uint32_t Test_ADS1220_Internal_Temperature_Sensor(TEMPERATURE_SENSOR_ID_ENUM SensorId);
#endif /* DRIVERS_HEATER_TEMPERATURESENSOR_H_ */
|