X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=kokare.c;h=c475e80a1797a8617ef982e21372f6fc0a8077b4;hb=72ef9ac1add1aa2f1cdd1f2f6b3182f5b3c25a25;hp=81aab664d1add08dbe265619a4028d3efed41ff5;hpb=59d1e9856c190b1de5f750bd89e56f560014f364;p=kokare.git diff --git a/kokare.c b/kokare.c index 81aab66..c475e80 100644 --- a/kokare.c +++ b/kokare.c @@ -49,12 +49,14 @@ char tlock = 0; unsigned long tstart; unsigned long ttime; unsigned long ttimea = 10000; +char tavgok = 0; /* Zero-cross detector*/ char zok = 0; unsigned long ztime; /* Triac */ char trstate = 0; char tron = 0; +unsigned long trtime; unsigned short trdelay = 0; void init(void) @@ -69,7 +71,7 @@ void init(void) * B3..5 = ISP * B6..7 = CLK */ - DDRB = 0x30; + DDRB = 0x38; PORTB = 0x07; PCMSK0 = 0x07; PCICR = 0x01; @@ -187,6 +189,7 @@ void calcavg(void) tlock = 2; ttimea = ((ttimea * 15) + ttime) >> 4; tlock = 0; + tavgok = 1; } } @@ -197,25 +200,27 @@ void triaccycle(void) PORTD |= 1; zok = 0; trstate = 1; + trtime = mnow; } } else if(trstate == 1) { - PORTD &= ~1; - trstate = 0; + if(mnow > trtime + 500) { + PORTD &= ~1; + trstate = 0; + } } } int main(void) { - int cur; + int state, cur; + unsigned long utime; - cur = 0; + state = 0; + cur = 99; init(); sei(); display(0); - tron = 1; - trdelay = 5000; - while(1) { mnow = getticks(); ledcycle(); @@ -223,6 +228,49 @@ int main(void) calcavg(); triaccycle(); +#if 0 + /* + * User interface + */ + if(state == 0) { + /* Display temperature */ + if(tavgok) { + tavgok = 0; + if(ttimea < 20000) { + display((ttimea / 100) % 100); + dsp[0] |= SEGP; + if(ttimea >= 10000) + dsp[1] |= SEGP; + } else { + display(ttimea / 1000); + } + } + if(pval != 0) { + state = 1; + utime = mnow; + } + } else if(state == 1) { + /* Triac control */ + if(pval != 0) { + cur += pval; + pval = 0; + if(cur < 0) + cur = 0; + if(cur > 99) + cur = 99; + display(cur); + trdelay = 10000 - ((unsigned short)cur * 100); + utime = mnow; + } + if(mnow - utime > 1000000) { + state = 0; + } + } + if(sstate == 2) { + tron = !tron; + sstate = 0; + } +#endif /* dsp[0] = bindisp((ttimea & 0xff00) >> 8); dsp[1] = bindisp(ttimea & 0x00ff); @@ -230,7 +278,7 @@ int main(void) /* disphex((ttimea & 0xff000) >> 12); */ -#if 1 +#if 0 /* Temp display */ @@ -243,6 +291,36 @@ int main(void) display(ttimea / 1000); } #endif +#if 1 +#endif + /* + * ZVD debug + */ + if(zok) { + if(++cur > 99) + cur = 0; + display(cur); + zok = 0; + } +#if 0 + /* + Phony Triac control + */ + if(pval != 0) { + cur += pval; + if(cur < 0) + cur = 0; + if(cur > 99) + cur = 99; + display(cur); + trdelay = 10000 - ((unsigned short)cur * 100); + pval = 0; + } + if(sstate == 2) { + tron = !tron; + sstate = 0; + } +#endif #if 0 /* Pulse counter display