Files
@ db81b1787e6e
Branch filter:
Location: therm/max31855.c - annotation
db81b1787e6e
2.5 KiB
text/plain
Cleaned up pid code and several other todos
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
|