From 59d1e9856c190b1de5f750bd89e56f560014f364 Mon Sep 17 00:00:00 2001 From: Fredrik Tolf Date: Fri, 15 Jun 2007 00:43:59 +0000 Subject: [PATCH] Added ZVD and Triac control. --- kokare.c | 50 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/kokare.c b/kokare.c index 18379e9..81aab66 100644 --- a/kokare.c +++ b/kokare.c @@ -36,6 +36,7 @@ char ledc = 0; /* Timer */ char of = 0; int oticks = 0; +unsigned long mnow; /* Pulse counter */ char pstate = 0; char pval = 0; @@ -49,7 +50,12 @@ unsigned long tstart; unsigned long ttime; unsigned long ttimea = 10000; /* Zero-cross detector*/ +char zok = 0; +unsigned long ztime; /* Triac */ +char trstate = 0; +char tron = 0; +unsigned short trdelay = 0; void init(void) { @@ -63,7 +69,7 @@ void init(void) * B3..5 = ISP * B6..7 = CLK */ - DDRB = 0x00; + DDRB = 0x30; PORTB = 0x07; PCMSK0 = 0x07; PCICR = 0x01; @@ -160,20 +166,17 @@ void ledcycle(void) void tempcycle(void) { - unsigned long now; - - now = getticks(); if(tstate == 0) { if((PIND & 8) && (tlock == 0)) { PORTD |= 2; - tstart = now; + tstart = mnow; tstate = 1; } } else if(tstate == 1) { - if(now - tstart > 1000) { + if(mnow - tstart > 1000) { PORTD &= ~2; tstate = 0; - tstart = now; + tstart = mnow; } } } @@ -187,6 +190,20 @@ void calcavg(void) } } +void triaccycle(void) +{ + if(trstate == 0) { + if(tron && zok && (mnow > ztime + trdelay)) { + PORTD |= 1; + zok = 0; + trstate = 1; + } + } else if(trstate == 1) { + PORTD &= ~1; + trstate = 0; + } +} + int main(void) { int cur; @@ -195,10 +212,16 @@ int main(void) init(); sei(); display(0); + + tron = 1; + trdelay = 5000; + while(1) { + mnow = getticks(); ledcycle(); tempcycle(); calcavg(); + triaccycle(); /* dsp[0] = bindisp((ttimea & 0xff00) >> 8); @@ -207,6 +230,10 @@ int main(void) /* disphex((ttimea & 0xff000) >> 12); */ +#if 1 + /* + Temp display + */ if(ttimea < 20000) { display((ttimea / 100) % 100); dsp[0] |= SEGP; @@ -215,8 +242,11 @@ int main(void) } else { display(ttimea / 1000); } - +#endif +#if 0 /* + Pulse counter display + */ cur += pval; pval = 0; if(sstate == 2) { @@ -233,12 +263,14 @@ int main(void) } else { display(cur); } - */ +#endif } } ISR(SIG_INTERRUPT0) { + ztime = getticks(); + zok = 1; } ISR(SIG_INTERRUPT1) -- 2.11.0