Files
@ 6d43230d5986
Branch filter:
Location: therm/max31855.c - annotation
6d43230d5986
2.5 KiB
text/plain
Untested changes for RTDs
860001bb7681 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 860001bb7681 860001bb7681 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 235f584ead39 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 235f584ead39 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 512edacc3586 235f584ead39 512edacc3586 512edacc3586 512edacc3586 512edacc3586 49485c1fefae | #include "max31865.h"
// Grab temperature reading from MAX31855
void max31855_readtemp(SPI_HandleTypeDef* hspi1, therm_settings_t* set, therm_status_t* status)
{
// Assert CS
HAL_GPIO_WritePin(MAX_CS, 0);
uint8_t rxdatah[1] = {0x00};
uint8_t rxdatal[1] = {0x00};
HAL_SPI_Receive(hspi1, rxdatah, 1, 100);
HAL_SPI_Receive(hspi1, rxdatal, 1, 100);
// Release CS
HAL_GPIO_WritePin(MAX_CS, 1);
// Assemble data array into one var
uint16_t temp_pre = rxdatal[0] | (rxdatah[0]<<8);
/*
if(temp_pre & 0b010) {
ssd1306_clearscreen();
HAL_Delay(400); // FIXME: remove?
status.tc_errno = 4;
status.state = STATE_TC_ERROR;
status.temp = 0;
status.temp_frac = 0;
} */
if(temp_pre & 0b001 && !set->val.ignore_error) {
status->error_code = 1;
HAL_Delay(400); // FIXME: remove?
status->state_resume = status->state;
status->state = STATE_TC_ERROR;
status->temp = 0;
status->temp_frac = 0;
}/*
else if(temp_pre & 0b100 && !set.ignore_tc_error) {
status.tc_errno = 8;
HAL_Delay(400); // FIXME: remove?
status.state_resume = status.state;
status.state = STATE_TC_ERROR;
status.temp = 0;
status.temp_frac = 0;
}*/
else
{
//if(status.state == STATE_TC_ERROR)
//{
// status.state = status.state_resume;
// ssd1306_clearscreen();
//}
uint8_t sign = status->temp >> 15;// top bit is sign
temp_pre = temp_pre >> 2; // Drop 2 lowest bits
status->temp_frac = temp_pre & 0b11; // get fractional part
status->temp_frac *= 25; // each bit is .25 a degree, up to fixed point
temp_pre = temp_pre >> 2; // Drop 2 fractional bits
int8_t signint;
if(sign) {
signint = -1;
}
else {
signint = 1;
}
// Convert to Fahrenheit
if(set->val.temp_units == TEMP_UNITS_FAHRENHEIT)
{
status->temp = signint * ((temp_pre*100) + status->temp_frac);
status->temp = status->temp * 1.8;
status->temp += 3200;
status->temp_frac = status->temp % 100;
status->temp /= 100;
status->temp += set->val.temp_offset;
}
// Use Celsius values
else
{
status->temp = temp_pre * signint;
status->temp += set->val.temp_offset;
}
}
}
// vim:softtabstop=4 shiftwidth=4 expandtab
|