diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/inc/tempsense.h b/inc/tempsense.h --- a/inc/tempsense.h +++ b/inc/tempsense.h @@ -7,6 +7,7 @@ void tempsense_init(void); -float tempsense_readtemp(void); +void tempsense_readtemp(void); +float tempsense_gettemp(void); #endif diff --git a/lib/max31856/max31856.c b/lib/max31856/max31856.c --- a/lib/max31856/max31856.c +++ b/lib/max31856/max31856.c @@ -10,7 +10,7 @@ static float temp_latest = 0.0; static float temp_avg = 0.0; -static SPI_HandleTypeDef* spiport; +SPI_HandleTypeDef* spiport; static GPIO_TypeDef* csport; static uint32_t cspin; @@ -48,7 +48,7 @@ void max31856_init(SPI_HandleTypeDef* sp // TODO: Enable open/short detection // Enables auto conv - __write_reg(MAX31856_CR0_REG, MAX31856_CR0_OCFAULT0 | MAX31856_CR0_AUTOCONVERT); + __write_reg(MAX31856_CR0_REG, MAX31856_CR0_AUTOCONVERT); // MAX31856_CR0_OCFAULT0 // Averaging set to 1 sample, TC type set to K __write_reg(MAX31856_CR1_REG, MAX31856_TCTYPE_K); @@ -58,9 +58,9 @@ void max31856_init(SPI_HandleTypeDef* sp // Pull reading from the MAX31856 IC -void max31856_process(void) +float max31856_process(void) { - uint8_t tempbuf[4]; + uint8_t tempbuf[3]; __read_reg(MAX31856_LTCBH_REG, tempbuf, 3); @@ -74,14 +74,15 @@ void max31856_process(void) float tempfloat = temp24; tempfloat *= 0.0078125; + temp_latest = tempfloat; return tempfloat; // Read temperature from the MAX31856 (approx 10hz optimally) - uint8_t data[] = {0,0,0,0}; - HAL_SPI_Transmit(spiport, data, 1, 100); +// uint8_t data[] = {0,0,0,0}; +// HAL_SPI_Transmit(spiport, data, 1, 100); } @@ -110,8 +111,12 @@ static void __write_reg(uint8_t reg, uin // Assert the bus __cs_assert(); + HAL_Delay(1); + // Write data - HAL_SPI_Transmit(spiport, outarr, 2, 100); + volatile HAL_StatusTypeDef res = HAL_SPI_Transmit(spiport, outarr, 2, 100); + + HAL_Delay(1); // Release the bus __cs_deassert(); @@ -122,18 +127,22 @@ static void __read_reg(uint8_t reg, uint // Transmit buffer only uses first item for reg addr uint8_t regarr[1] = {reg}; - + HAL_Delay(1); // Assert the bus __cs_assert(); + HAL_Delay(1); // Send address - HAL_SPI_Transmit(spiport, regarr, 1, 100); + volatile HAL_StatusTypeDef res = HAL_SPI_Transmit(spiport, regarr, 1, 100); + HAL_Delay(1); // Receive data - HAL_SPI_Receive(spiport, rxbuf, len, 100); + volatile HAL_StatusTypeDef res2 = HAL_SPI_Receive(spiport, rxbuf, len, 100); + HAL_Delay(1); // Release bus __cs_deassert(); + HAL_Delay(1); } diff --git a/lib/max31856/max31856.h b/lib/max31856/max31856.h --- a/lib/max31856/max31856.h +++ b/lib/max31856/max31856.h @@ -4,7 +4,7 @@ #include "stm32f3xx_hal.h" void max31856_init(SPI_HandleTypeDef* spi_port, GPIO_TypeDef* cs_port, uint32_t cs_pin, uint32_t sensor_type); -void max31856_process(void); +float max31856_process(void); float max31856_latest_temp(void); float max31856_avg_temp(void); diff --git a/lib/ssd1306/ssd1306.c b/lib/ssd1306/ssd1306.c --- a/lib/ssd1306/ssd1306.c +++ b/lib/ssd1306/ssd1306.c @@ -63,11 +63,11 @@ void ssd1306_init(void) hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; + hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64; //16; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi1.Init.TIMode = SPI_TIMODE_DISABLED; hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; - hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLED; + hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLED; HAL_SPI_Init(&hspi1); diff --git a/src/main.c b/src/main.c --- a/src/main.c +++ b/src/main.c @@ -65,7 +65,7 @@ int main(void) if(HAL_GetTick() - last_5hz > 200) { tempsense_readtemp(); -// runtime_status = tempsense_gettemp(); + runtime_status()->temp = tempsense_gettemp(); last_5hz = HAL_GetTick(); } diff --git a/src/system/flash.c b/src/system/flash.c --- a/src/system/flash.c +++ b/src/system/flash.c @@ -73,6 +73,7 @@ void flash_restoresettings(void) settings.val.k_i = 0; settings.val.k_d = 0; settings.val.windup_guard = 300; + settings.val.sensor_type = 1; //torestore.values.can_id = 22; } } diff --git a/src/tempsense.c b/src/tempsense.c --- a/src/tempsense.c +++ b/src/tempsense.c @@ -22,7 +22,7 @@ void tempsense_init(void) } // Returns the latest reading from the configured temperature sensor -float tempsense_readtemp(void) +void tempsense_readtemp(void) { switch(flash_getsettings()->val.sensor_type) @@ -35,6 +35,7 @@ float tempsense_readtemp(void) case SENSOR_TC_T: { // Read MAX31856 + max31856_process(); } break; case SENSOR_NTC: @@ -49,5 +50,8 @@ float tempsense_readtemp(void) // Need to gracefully handle the timeout... } +float tempsense_gettemp(void) +{ + return max31856_latest_temp(); +} -