diff --git a/.gitignore b/.gitignore index bbb2094..fe54891 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ *.o *.bin *.hex +disasm diff --git a/firmware/cup.c b/firmware/cup.c index 412968f..f2c5412 100644 --- a/firmware/cup.c +++ b/firmware/cup.c @@ -1,6 +1,7 @@ #include #include #include +#include #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; } }