Estou tentando fazer um dimmer para controle de um ventilador e estou tendo alguns problemas.
Como a interrupção do ponto 0 para controle de corrente AC utiliza interrupção e a biblioteca do IR Remote também utiliza as interrupções, estou com problema para fazer os dois funcionarem em conjunto.
Se desativo um ou outro os dois funcionam perfeitamente em separado, mas quando ligo tudo junto o sensor IR não recebe os sinais do controle.
Alguém tem alguma dica de como poderia fazer funcionar os dois juntos?
Obrigado.
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);
}