|
|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
#include <avr/io.h>
|
|
|
|
|
#include <util/delay.h>
|
|
|
|
|
#include <avr/interrupt.h>
|
|
|
|
|
#include <avr/pgmspace.h>
|
|
|
|
|
|
|
|
|
|
#define TEMP_PIN 0
|
|
|
|
|
#define IMPULS0_PIN 1
|
|
|
|
|
@ -91,7 +92,7 @@ inline uint16_t linearize_temp(uint16_t temp_in)
|
|
|
|
|
uint16_t temp_out = TARGET_TEMP_MAX; //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[] =
|
|
|
|
|
static const uint16_t coeffs[] PROGMEM =
|
|
|
|
|
{
|
|
|
|
|
// in, out
|
|
|
|
|
20250, 0, // -20 celsius
|
|
|
|
|
@ -117,9 +118,9 @@ inline uint16_t linearize_temp(uint16_t temp_in)
|
|
|
|
|
uint8_t i=2;
|
|
|
|
|
for (; i < (sizeof(coeffs)>>1)-2; i+=2)
|
|
|
|
|
{
|
|
|
|
|
if ( temp_in < coeffs[i] )
|
|
|
|
|
if ( temp_in < pgm_read_byte(&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]));
|
|
|
|
|
temp_out = (uint16_t) ( pgm_read_byte(&coeffs[i-1]) + (uint32_t) ( (uint32_t) (temp_in - pgm_read_byte(&coeffs[i-2])) * (pgm_read_byte(&coeffs[i+1])-pgm_read_byte(&coeffs[i-1])) ) / (pgm_read_byte(&coeffs[i])-pgm_read_byte(&coeffs[i-2])));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|