|
|
|
|
@ -18,9 +18,11 @@ uint8_t setting_timeout = 0;
|
|
|
|
|
|
|
|
|
|
uint8_t adc_pos = 0;
|
|
|
|
|
uint16_t adc_sum = 0;
|
|
|
|
|
uint16_t temperature = 0;
|
|
|
|
|
uint16_t temperature_adc = 0;
|
|
|
|
|
uint16_t target = 0;
|
|
|
|
|
|
|
|
|
|
uint16_t temperature = 0;
|
|
|
|
|
|
|
|
|
|
uint8_t heat_pwm = 0;
|
|
|
|
|
uint8_t heat_on[2] = {0, 0};
|
|
|
|
|
uint8_t heat_off[2] = {0, 0};
|
|
|
|
|
@ -65,6 +67,51 @@ ISR(PCINT0_vect)
|
|
|
|
|
input_state = new_state;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Measure: 5V --- 10k --- --- PTY81-121 -- GND
|
|
|
|
|
// |
|
|
|
|
|
// uC ADC pin (with 1.11V reference)
|
|
|
|
|
uint16_t linearize_temp(uint16_t temp_in)
|
|
|
|
|
{
|
|
|
|
|
static const uint16_t one_point_one_volt = 65472; //2^16-2^6
|
|
|
|
|
uint16_t temp_out = ~0; //burning
|
|
|
|
|
// made from datasheet by:
|
|
|
|
|
// for i in 677 740 807 877 951 1029 1111 1196 1286 1378 1475 1575 1679 1786 1896 2003 2103 2189; do calc 5*$i/9860*65472/1.11; done
|
|
|
|
|
static const uint16_t coeffs[] =
|
|
|
|
|
{
|
|
|
|
|
// in, out
|
|
|
|
|
20250, 0, // -20 celsius
|
|
|
|
|
22134, 0, // -10 celsius
|
|
|
|
|
24138, 0, // 0 celsius
|
|
|
|
|
26232, 100, // 10 celsius
|
|
|
|
|
28445, 200,
|
|
|
|
|
30778, 300,
|
|
|
|
|
33231, 400, // 50 celsius
|
|
|
|
|
35773, 500, // ..
|
|
|
|
|
38465, 600,
|
|
|
|
|
41216, 700,
|
|
|
|
|
44118, 800,
|
|
|
|
|
47109, 900,
|
|
|
|
|
50220, 1000,
|
|
|
|
|
53420, 1100,
|
|
|
|
|
56711, 1200,
|
|
|
|
|
59911, 1300,
|
|
|
|
|
62902, 1400,
|
|
|
|
|
65474, 1500, // 150 celsius
|
|
|
|
|
65535, 1520, // made-up, not from datasheet
|
|
|
|
|
};
|
|
|
|
|
uint8_t i=2;
|
|
|
|
|
for (; i < (sizeof(coeffs)>>1)-2; i+=2)
|
|
|
|
|
{
|
|
|
|
|
if ( temp_in < coeffs[i] )
|
|
|
|
|
{
|
|
|
|
|
temp_out = (uint16_t) ( coeffs[i-1] + (uint32_t)
|
|
|
|
|
( (uint32_t) (temp_in-coeffs[i-2]) * (coeffs[i+1]-coeffs[i-1]) ) / (coeffs[i]-coeffs[i-2]));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return temp_out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void io_init(void)
|
|
|
|
|
{
|
|
|
|
|
PORTA = (1 << TAST_PIN) | (1 << IMPULS1_PIN) | (1 << IMPULS0_PIN);/* enable pullups on inputs */
|
|
|
|
|
@ -127,14 +174,15 @@ int main(void)
|
|
|
|
|
adc_sum += ADC;
|
|
|
|
|
if(++adc_pos == 64)
|
|
|
|
|
{
|
|
|
|
|
temperature = adc_sum;
|
|
|
|
|
temperature_adc = adc_sum;
|
|
|
|
|
adc_sum = 0;
|
|
|
|
|
adc_pos = 0;
|
|
|
|
|
temperature = linearize_temp(temperature_adc);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(setting_timeout) {led_set(target);}
|
|
|
|
|
else {led_set(temperature);}
|
|
|
|
|
else {led_set(temperature);}OB
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|