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)
* B3..5 = ISP
* B6..7 = CLK
*/
- DDRB = 0x30;
+ DDRB = 0x38;
PORTB = 0x07;
PCMSK0 = 0x07;
PCICR = 0x01;
tlock = 2;
ttimea = ((ttimea * 15) + ttime) >> 4;
tlock = 0;
+ tavgok = 1;
}
}
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();
calcavg();
triaccycle();
+#if 1
+ /*
+ * 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);
/*
disphex((ttimea & 0xff000) >> 12);
*/
-#if 1
+#if 0
/*
Temp display
*/
#endif
#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
*/
cur += pval;