Checked in eagle files.
[kokare.git] / kokare.c
index 81aab66..c475e80 100644 (file)
--- 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