aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Drivers/Heater/TemperatureSensor.h
blob: 2dc60b685132251484d3dc74d27f494c82f4c997 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/*
 * 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_ */