Files
@ d87613e49192
Branch filter:
Location: therm/max31855.c - annotation
d87613e49192
2.5 KiB
text/plain
Added support for adjustable hysteresis in thermostatic mode. Also fixed missing logo rendering on initial powerup.
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
|