X-Git-Url: http://dolda2000.com/gitweb/?p=kokare.git;a=blobdiff_plain;f=kokare.c;h=f7033d8d29b16e6067445fa70ca1436a5dce9089;hp=f3c65b6fb11042187fc62fb296ff30020ad5e706;hb=HEAD;hpb=1eabd7a93fe49a288464ebd686c3853cb838cfa9 diff --git a/kokare.c b/kokare.c index f3c65b6..f7033d8 100644 --- a/kokare.c +++ b/kokare.c @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -135,10 +136,10 @@ unsigned char bindisp(unsigned char num) return(ret); } -void display(char num) +void display(char num, char d0, char d1) { - dsp[0] = font[(num / 10) % 10]; - dsp[1] = font[num % 10]; + dsp[0] = font[(num / 10) % 10] | (d0?SEGP:0); + dsp[1] = font[num % 10] | (d1?SEGP:0); } void disphex(unsigned char num) @@ -227,16 +228,23 @@ void convcycle(void) * Theoretically: * t = RC * ln(2) => R = t / (C * ln(2)) * R = A * exp(B / T) => T = B / ln(R / A) - * T = B / ln(R / (A * C * ln(2))) - * In the following: + * T = B / ln(t / (A * C * ln(2))) + * Where: + * t = The measured time (s) + * R = The resistance of the thermistor (Ohm) + * C = The capacitance of the capacitor (F) + * T = The temperature (K) + * A, B are the thermistor-specific constants + * + * In the following code: * a = ttimea as float - * C = 1e6 / (A * C * ln(2)) + * C = 1e-6 / (A * C * ln(2)) * ra = a * C * l = ln(ra) * t = B / l * Note, temperature is in Kelvin */ -#define C 9.792934 +#define C 10.819112 /* A is 0.1333469 */ #define B 4020.0 if(state == 0) { if((mnow - last > 200000) && tavgok) { @@ -266,13 +274,21 @@ int main(void) int state, cur, run, rstate, delta; unsigned long utime; - state = 0; - cur = 100; + state = 1; + cur = eeprom_read_byte(0); + if(cur < 0) + cur = 0; + if(cur > 100) + cur = 100; run = 0; rstate = 0; + utime = getticks(); init(); sei(); - display(0); + if(cur < 100) + display(cur, 0, 0); + else + dsp[0] = dsp[1] = SEGG; while(1) { mnow = getticks(); @@ -289,9 +305,10 @@ int main(void) if(ktok) { ktok = 0; if((tempk >= 273) && (tempk <= 372)) { - display(tempk - 273); + display(tempk - 273, 0, run); } else { - dsp[0] = dsp[1] = SEGG; + dsp[0] = SEGG; + dsp[1] = SEGG | (run?SEGP:0); } } if(pval != 0) @@ -303,10 +320,6 @@ int main(void) else run = !run; } - if(run) - dsp[1] |= SEGP; - else - dsp[1] &= ~SEGP; } else if(state == 1) { /* Temp setting */ if(pval != 0) { @@ -316,27 +329,28 @@ int main(void) cur = 0; if(cur > 100) cur = 100; - if(cur < 100) - display(cur); - else - dsp[0] = dsp[1] = SEGG; utime = mnow; } - if(mnow - utime > 1000000) + if(mnow - utime > 2000000) { state = 0; + eeprom_write_byte(0, cur); + } if(sstate == 2) { run = !run; sstate = 0; } + if(cur < 100) { + display(cur, 0, run); + } else { + dsp[0] = SEGG; + dsp[1] = SEGG | (run?SEGP:0); + } } else if(state == 2) { /* Display raw temp time reading */ if(ttimea < 20000) { - display((ttimea / 100) % 100); - dsp[0] |= SEGP; - if(ttimea >= 10000) - dsp[1] |= SEGP; + display((ttimea / 100) % 100, 1, ttimea >= 10000); } else { - display(ttimea / 1000); + display(ttimea / 1000, 0, 0); } if(sstate == 2) { state = 0; @@ -357,7 +371,7 @@ int main(void) * ms. */ trdelay = 7; } else { - trdelay = 79 - (delta * 9); + trdelay = 75 - (delta * 5); } } else { tron = 0;