aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Drivers/Heater/TemperatureSensor.h
blob: 2dc60b685132251484d3dc74d27f494c82f4c997 (plain)
1
2
3
4
5
using 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_ */