Amigos, consegui resolver o problema que eu queria.
Agora estou com outro problema, estou tentando passar código para o attiny85, mas devido os timers e interrupções serem diferentes e estar rodando em 8Mhz tive que fazer algumas modificações no sketch.
Como ainda não entendo muito bem a fundo a questão de timers poderiam me ajudar com o código abaixo e me auxiliar no que pode estar errado?
A Luz esta ficando acessa continuamente, sem fazer o dimmer,
// AC Control V1.1
#include <avr/io.h>
#include <avr/interrupt.h>
#define DETECT 0 //zero cross detect
#define GATE 2 //triac gate
#define PULSE 4 //trigger pulse width (counts)
int i=483;
void setup(){
// set up pins
pinMode(DETECT, INPUT); //zero cross detect
digitalWrite(DETECT, HIGH); //enable pull-up resistor
pinMode(GATE, OUTPUT); //triac gate control
// set up Timer0
OCR0A = 100; //initialize the comparator
TIMSK = 0x03; //enable comparator A and overflow interrupts
TCCR0A = 0x00; //timer control registers set for
TCCR0B = 0x00; //normal operation, timer disabled
// set up zero crossing interrupt
attachInterrupt(5,zeroCrossingInterrupt, RISING);
//IRQ0 is pin 5. Call zeroCrossingInterrupt
//on rising signal
}
//Interrupt Service Routines
void zeroCrossingInterrupt(){ //zero cross detect
TCCR0B=0x04; //start timer with divide by 256 input
TCNT0 = 0; //reset timer - count from zero
}
ISR(TIMER0_COMPA_vect){ //comparator match
digitalWrite(GATE,HIGH); //set triac gate to high
TCNT0 = 65536-PULSE; //trigger pulse width
}
ISR(TIMER0_OVF_vect){ //timer0 overflow
digitalWrite(GATE,LOW); //turn off triac gate
TCCR0B = 0x00; //disable timer stopd unintended triggers
}
void loop(){ // sample code to exercise the circuit
i--;
OCR0A = i; //set the compare register brightness desired.
if (i<65){i=483;}
delay(15);
}