/* * 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_ */