Reflow oven controller firmware
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

68 lines
1.3 KiB

/* therm.c */
#include "common.h"
#include "therm.h"
#include "spi.h"
uint8_t therm_cjth;
uint8_t therm_cjtl;
uint8_t therm_ltcbh;
uint8_t therm_ltcbm;
uint8_t therm_ltcbl;
uint8_t therm_sr;
void therm_init(void)
{
spi_init();
spi_start();
spi_txbyte(0x80);
spi_txbyte(0x91); /* Automatic conversion, open detection on, 50Hz */
spi_txbyte(0x03); /* No averaging, K-type */
spi_txbyte(0x00); /* No masking. ~FAULT asserted for most faults. */
spi_stop();
}
void therm_read(void)
{
spi_start();
spi_txbyte(0x0a);
therm_cjth = spi_rxbyte();
therm_cjtl = spi_rxbyte();
therm_ltcbh = spi_rxbyte();
therm_ltcbm = spi_rxbyte();
therm_ltcbl = spi_rxbyte();
therm_sr = spi_rxbyte();
spi_stop();
}
temp_t therm_reduce(int32_t temp)
{
temp = (temp * 10) / 4096;
temp += 2732;
if (temp < 0)
temp = 0;
if (temp > 65535)
temp = 65535;
return (temp_t) temp;
}
temp_t therm_coldtemp(void)
{
int16_t temp = (int16_t) (((int16_t)therm_cjth << 8) | therm_cjtl);
return therm_reduce((int32_t)temp * 16);
}
temp_t therm_temp(void)
{
int32_t temp = ((int32_t)therm_ltcbh << 16) | ((int32_t)therm_ltcbm << 8) | therm_ltcbl;
return therm_reduce(temp);
}
uint8_t therm_fault(void)
{
return therm_sr;
}