/* Timer */
char of = 0;
int oticks = 0;
+unsigned long mnow;
/* Pulse counter */
char pstate = 0;
char pval = 0;
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)
{
* B3..5 = ISP
* B6..7 = CLK
*/
- DDRB = 0x00;
+ DDRB = 0x30;
PORTB = 0x07;
PCMSK0 = 0x07;
PCICR = 0x01;
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;
}
}
}
}
}
+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;
init();
sei();
display(0);
+
+ tron = 1;
+ trdelay = 5000;
+
while(1) {
+ mnow = getticks();
ledcycle();
tempcycle();
calcavg();
+ triaccycle();
/*
dsp[0] = bindisp((ttimea & 0xff00) >> 8);
/*
disphex((ttimea & 0xff000) >> 12);
*/
+#if 1
+ /*
+ Temp display
+ */
if(ttimea < 20000) {
display((ttimea / 100) % 100);
dsp[0] |= SEGP;
} else {
display(ttimea / 1000);
}
-
+#endif
+#if 0
/*
+ Pulse counter display
+ */
cur += pval;
pval = 0;
if(sstate == 2) {
} else {
display(cur);
}
- */
+#endif
}
}
ISR(SIG_INTERRUPT0)
{
+ ztime = getticks();
+ zok = 1;
}
ISR(SIG_INTERRUPT1)