control function

master
Dennis Gnad 13 years ago
parent 2a8f8cd74e
commit 85e3c64671

@ -12,6 +12,8 @@
#define TIMEOUT 255 #define TIMEOUT 255
const uint16_t TARGET_TEMP_MAX = 1520;
uint8_t led_color = 0; uint8_t led_color = 0;
uint8_t setting_timeout = 0; uint8_t setting_timeout = 0;
@ -23,6 +25,8 @@ uint16_t target = 0;
uint16_t temperature = 0; uint16_t temperature = 0;
uint8_t heat_output = 0;
uint8_t heat_pwm = 0; uint8_t heat_pwm = 0;
uint8_t heat_on[2] = {0, 0}; uint8_t heat_on[2] = {0, 0};
uint8_t heat_off[2] = {0, 0}; uint8_t heat_off[2] = {0, 0};
@ -67,13 +71,23 @@ ISR(PCINT0_vect)
input_state = new_state; input_state = new_state;
} }
uint8_t control_output(uint16_t current_temp, uint16_t target_temp)
{
if (current_temp > target_temp)
{
return 0;
} else {
return (uint8_t)((uint16_t)((uint32_t)((uint32_t)255*target_temp)/current_temp)/TARGET_TEMP_MAX);
}
}
// Measure: 5V --- 10k --- --- PTY81-121 -- GND // Measure: 5V --- 10k --- --- PTY81-121 -- GND
// | // |
// uC ADC pin (with 1.11V reference) // uC ADC pin (with 1.11V reference)
uint16_t linearize_temp(uint16_t temp_in) uint16_t linearize_temp(uint16_t temp_in)
{ {
static const uint16_t one_point_one_volt = 65472; //2^16-2^6 static const uint16_t one_point_one_volt = 65472; //2^16-2^6
uint16_t temp_out = ~0; //burning uint16_t temp_out = TARGET_TEMP_MAX; //burning
// made from datasheet by: // 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 // 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[] = static const uint16_t coeffs[] =
@ -85,7 +99,7 @@ uint16_t linearize_temp(uint16_t temp_in)
26232, 100, // 10 celsius 26232, 100, // 10 celsius
28445, 200, 28445, 200,
30778, 300, 30778, 300,
33231, 400, // 50 celsius 33231, 400, // 40 celsius
35773, 500, // .. 35773, 500, // ..
38465, 600, 38465, 600,
41216, 700, 41216, 700,
@ -177,6 +191,7 @@ int main(void)
adc_sum = 0; adc_sum = 0;
adc_pos = 0; adc_pos = 0;
temperature = linearize_temp(temperature_adc); temperature = linearize_temp(temperature_adc);
heat_output = control_output(temperature, target);
} }
} }

Loading…
Cancel
Save