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.
69 lines
1.3 KiB
69 lines
1.3 KiB
9 years ago
|
/* 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;
|
||
|
}
|