Changeset - b77b97fa501d
[Not reviewed]
cortex-f0
0 1 0
Ethan Zonca - 9 years ago 2015-08-23 19:25:58
ez@ethanzonca.com
Add max31865 register defs
1 file changed with 36 insertions and 1 deletions:
0 comments (0 inline, 0 general)
max31865.c
Show inline comments
 
#include "stm32f0xx_hal.h"
 

	
 
#include "config.h"
 
#include "stringhelpers.h"
 
#include "states.h"
 
#include "gpio.h"
 

	
 

	
 
// Registers
 
#define MAX31855_REG_CONFIG 0x00
 
#define MAX31855_REG_RTD_MSB 0x01
 
#define MAX31855_REG_RTD_LSB 0x02
 
#define MAX31855_REG_HFAULT_THRESH_MSB 0x03
 
#define MAX31855_REG_HFAULT_THRESH_LSB 0x04
 
#define MAX31855_REG_LFAULT_THRESH_MSB 0x05
 
#define MAX31855_REG_LFAULT_THRESH_LSB 0x06
 
#define MAX31855_REG_FAULTSTATUS 0x07
 

	
 
#define MAX31855_REGWRITEMODIFIER 0x80
 

	
 
// Fields 
 
#define MAX31865_CONF_VBIAS (1<<7)
 
#define MAX31865_CONF_CONVMODE (1<<6)
 
#define MAX31865_CONF_1SHOT (1<<5)
 
#define MAX31865_CONF_3WIRE (1<<4)
 

	
 
#define MAX31865_CONF_FAULT_NOACTION    0b0000
 
#define MAX31865_CONF_FAULT_AUTODELAY   0b0100
 
#define MAX31865_CONF_FAULT_MANUALELAY1 0b1000
 
#define MAX31865_CONF_FAULT_MANUALELAY2 0b1100
 

	
 
#define MAX31865_CONF_FAULT_CLEAR (1<<1)
 
#define MAX31865_CONF_50_60HZ_FILTER (1<<0)
 

	
 

	
 
// Grab temperature reading from MAX31865
 
void max31865_readtemp(SPI_HandleTypeDef* hspi1, therm_settings_t* set, therm_status_t* status)
 
{
 
    // ** FIXME ** FIXME ** FIXME ** //
 
    ///////////////////////////////////
 
    // This is duplicated from MAX31855, update for MAX31865 registers/etc
 
    /////////////////////////////////// 
 

	
 
    // TODO: Set configuration register based on params in config.h (2-wire, 4-wire, etc RTD). This is register 0x00.
 
        // 2-wire RTC or 2-wire (duh) NTC thermistor will be the only options
 
        // Need option for resistance of RTD
 
        // These options should be stored in the set structure and should be menu-selectable
 
    // TODO: Read RTD msbs (0x01)
 
    // TODO: Read RTD LSBs (0x02)
 

	
 
    // 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 & 0b001 && !set->ignore_tc_error) {
 
        status->tc_errno = 1;
 
        HAL_Delay(400); // FIXME: remove?
 
        status->state_resume = status->state;
 
        status->state = STATE_TC_ERROR;
 
        status->temp = 0;
 
        status->temp_frac = 0;
 
    }
 
    else 
 
    {
 
        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->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->temp_offset;
 
        }
 

	
 
        // Use Celsius values
 
        else
 
        {
 
            status->temp = temp_pre * signint;
 
            status->temp += set->temp_offset;
 
        }
 
    }
 
}
 

	
 
// vim:softtabstop=4 shiftwidth=4 expandtab 
0 comments (0 inline, 0 general)