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.

63 lines
1.8 KiB

#include "MaxHandler.h"
void Max_Init(uint8_t ch,uint8_t initMode) {
sSPI_select(ch);
sSPI_write_byte(0x80);
if (initMode == AutoConversion)
sSPI_write_byte((1<<7)|(1<<5)|(1<<0)); //Auto conversion + OC 33ms detection + 50hz rejection
else if (initMode == OneShotConversion)
sSPI_write_byte((1<<6)|(1<<5)|(1<<0)); //OneShot conversion + OC 33ms detection + 50hz rejection
else
sSPI_write_byte((1<<5)|(1<<0)); //OC 33ms detection + 50hz rejection
sSPI_write_byte(0b0011|(0b0011<<4)); //TC type K + 8 samples
sSPI_free();
uint8_t i = 0;
if (ch < THERMO_CHN_COUNT) {
i = ch;
++ch;
}
for (; i < ch; i++) {
ThermoSensor[i].lastTick = System_GetSysTick();
ThermoSensor[i].state = 4; //Set NO_DATA error
ThermoSensor[i].captureFlags = initMode;
}
}
uint8_t IsMaxDRDYLow(uint8_t ch) {
if (ch > THERMO_CHN_COUNT-1) ch = THERMO_CHN_COUNT-1;
if ( ( RSLink_DipsRead() & (1<<(4+ch)) ) == 0) return 1;
return 0;
}
void Max_Handler(){
ThermoData *Selected = &ThermoSensor[MaxSelectedChannel];
//If conversion ready or 5s timeout
if ((IsMaxDRDYLow(MaxSelectedChannel) || (System_GetSysTickDifference(Selected->lastTick)>2000)) && Selected->captureFlags != 0) {
sSPI_select(MaxSelectedChannel);
Selected->lastTick = System_GetSysTick();
sSPI_write_byte(0x0A);
Selected->CJTemp = (uint16_t)sSPI_read_byte()<<8;
Selected->CJTemp |= sSPI_read_byte();
Selected->Temperature = (uint32_t)sSPI_read_byte()<<11;
Selected->Temperature |= (uint32_t)sSPI_read_byte()<<3;
Selected->Temperature |= (uint32_t)sSPI_read_byte()>>5;
Selected->state = sSPI_read_byte()&(~4);
sSPI_free();
if ((Selected->captureFlags & OneShotConversion) != 0){
Selected->captureFlags &= ~(OneShotConversion);
}
}
MaxSelectedChannel++;
if (MaxSelectedChannel == THERMO_CHN_COUNT) MaxSelectedChannel = 0;
}