Added ZVD and Triac control.
authorFredrik Tolf <fredrik@dolda2000.com>
Fri, 15 Jun 2007 00:43:59 +0000 (00:43 +0000)
committerFredrik Tolf <fredrik@dolda2000.com>
Fri, 15 Jun 2007 00:43:59 +0000 (00:43 +0000)
kokare.c

index 18379e9..81aab66 100644 (file)
--- 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)