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
| /* SPI TIMEOUT Value*/
#define TIMEOUT_VAL 60
/* Read Register Address */
#define REG_CONFIG 0x00
#define REG_RTD_MSB 0x01
#define REG_RTD_LSB 0x02
#define REG_HIGH_FAULT_THR_MSB 0x03
#define REG_HIGH_FAULT_THR_LSB 0x04
#define REG_LOW_FAULT_THR_MSB 0x05
#define REG_LOW_FAULT_THR_LSB 0x06
#define REG_FAULT_STATUS 0x07
#define WR(reg) ( (reg) | 0x80 )
SPI_HandleTypeDef hspi1;
struct __attribute__((packed)) var_max31865
{
uint16_t rtd_res_raw; // RTD IC raw resistance register
uint8_t status; // RTD status - full status code
uint8_t conf_reg; // Configuration register readout
uint16_t HFT_val; // High fault threshold register readout
uint16_t LFT_val; // Low fault threshold register readout
};
struct var_max31865 rtd_data;
uint8_t read_addr = 0x00; //Read address of Configuration register
double Temperature,RTD;
void MAX31865_full_read(void)
{
uint8_t read_data[8]; //variable to store the contents of the registers
uint8_t i = 0; //loop variable
CS_ENABLE
HAL_SPI_Transmit(&hspi1, &read_addr, 1, TIMEOUT_VAL);
for(i = 0; i < 8; i++)
{
HAL_SPI_Receive(&hspi1, &read_data[i], 1, TIMEOUT_VAL);
}
// HAL_Delay(10);
CS_DISABLE
rtd_data.conf_reg = read_data[0]; //Store config reg data
rtd_data.rtd_res_raw = ((read_data[1] << 8) | read_data[2]) >> 1;
rtd_data.HFT_val = ((read_data[3] << 8) | read_data[4]) >> 1;
rtd_data.LFT_val = (read_data[5] << 8) | read_data[6];
rtd_data.status = read_data[7]; //Store fault status reg data
}
int main(void)
{
uint8_t config_reg_write[] = {WR(REG_CONFIG), 0xC2}; //( 0x80 ,0xC2)
//char Rrtd[30]; //array to print RTD resistance
//char Trtd[30]; //array to print RTD temperature
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_SPI1_Init();
CS_ENABLE
HAL_Delay(10);
HAL_SPI_Transmit(&hspi1, &config_reg_write[0], 1, TIMEOUT_VAL);
HAL_SPI_Transmit(&hspi1, &config_reg_write[1], 1, TIMEOUT_VAL);
CS_DISABLE
HAL_Delay(100);
while (1)
{
HAL_Delay(500);
MAX31865_full_read();
RTD = ((double)rtd_data.rtd_res_raw * 4700) / 32768;
HAL_Delay(2000);
Temperature = ((double)rtd_data.rtd_res_raw / 32) - 256;
// sprintf(Trtd, "Trtd = %lf deg C\n", tmp);
// HAL_UART_Transmit(&huart2, (uint8_t *)Trtd, 30, TIMEOUT_VAL);
HAL_Delay(2000); }
} |