Olá galera!

Estou trabalhando no Dimmer Digital utilizando Arduino, mas para sincronizar o disparo de um TRIAC com a forma de onda da rede elétrica utilizamos um circuito detector de passagem por zero volts, onde a cada passagem da onda por zero volts é gerada uma interrupção (INT0) no ATMEGA, ou seja, temos uma interrupção a cada 8,33 ms do ciclo da senoide. E é aí que está o problema, pois como pretendo utilizar também um controle remoto (IR) para aumentar ou diminuir o brilho da lâmpada então estou tendo conflito com a biblioteca IRremote.h, que também utiliza de interrupção para atender o "apertar do botão" do controle remoto.

Bem, minha dúvida é a seguinte como fazer para usar o dimmer acionado por um controle remoto se ambos utilizam interrupções no Arduino? Já testei utilizar uma interrupção por hardware e outra por software, mas também não funcionou.

Espero que alguém aqui da comunidade possa me dar um luz sobre como solucionar esse problema.

Grato

Hugney M. Ferreira

(61) 9962-7070

 

 

Exibições: 5881

Anexos

Responder esta

Respostas a este tópico

Fabio Henrique segue abaixo algumas perguntas de leigo no uso de interrupções:

  1. O que é prescaler?
  2. Por que vc está usando esse índice divisor: 62.5e-9 x 8 ?
  3. O que significa as siglas:
    1. TCCR1B
    2. TIMSK1
    3. TOIE1
    4. ISR
    5. TIMER1_OVF_vect

Por fim estou entendendo que com esse seu programa eu não preciso mais utilizar o 4N25 do meu circuito em anexo, bastando ligar a pino 1 do meu MOC3021 no pino 13 do Arduino, correto?

Anexos

Voce não precisa desativar o triac somente na passagem por zero, pode na hora do pulso, somente fica high durante 500us e depois vir para low, lembre-se, uma vez disparado o triac so para de conduzir apos sua corrente de manutencao for nula, ou seja, quando chegar o ponto zero ele vai parar de conduzir sozinho, e um novo disparo deve ser efetuado novamente apos sair do zero, esse codigo que mandei abaixo para o hugnei pega a passagem por zero usando porta analogica, é um frequencimetro, pode testar que funciona 100%, o erro que o hugnei tem no software dele é devido a estar provavelmente usando o mesmo timer para o IRremote e o disparo do triac, lembrando que para o disparo do triac pode ser usado timer0 de 8bits.

E também se ele usar o PWM 9 e 10 referentes ao timer1 também vai dar conflito pois a cada chamada do analogWrite o core reconfigura timer...

e os pinos 11 e 3 do timer 2 também entram na jogada...  

Fabio

Poderia responder a dúvidas que postei por favor?

Grato

Amigo acho que voce confundiu a bola, nao uso analogWrite, e sim analogread() para pegar o ponto zero, o disparo do triac é feito por um pino digital, PWM com dimer nao tem fundamento ate pq se dispara uma unica vez dentro de um semi-ciclo.

hugnei, este aqui não é um dimmer, e sim o frequencimetro que fiz usando uma porta analogica, no caso eu pegava do trafo direto em AC, faca as tuas mudancas ai.

unsigned int tempo=0;
unsigned int microsegundos=0;
unsigned int tempo_start=0;
int frequencia=0;
boolean trava=false;
boolean start=false;
int pulso=3;

void setup()
{
Serial.begin(9600);
pinMode(pulso, OUTPUT);
}

void loop()
{
microsegundos=analogRead(1)*8+120;

if (millis()>(tempo+1000))
{
frequencia=frequencia/2;
Serial.println(frequencia);
Serial.println(microsegundos);
frequencia=0;
tempo=millis();
}

if ((analogRead(0)<5)&&(!trava))
{
digitalWrite(pulso,LOW);
frequencia=frequencia+1;
trava=true;
start=true;
tempo_start=micros();
}

if (analogRead(0)>5)
{
trava=false;
}
if ((start==true)&&(micros()>(tempo_start+microsegundos)))
{
digitalWrite(pulso,HIGH);
start=false;
}
}

Em último caso use PWM  para disparar o triac, porem ira precisar do TCA785. Fica mais caro e  mais seguro. Trabalhar com disparo de triac é complicado, ainda  mais pra quem esta começando e não tem domínio total do microcontrolador. O que pode ocorrer de seu sistema funcionar, mais quando ligar um chuveiro com dimmer, um PC numa rede fraca, ou seu sensor de IR ser bombardado por ruídos de lampadas fluorescente, começar a aparecer 'fantasmas'... trabalhar com tiristor não é fácil.

Amigo aonde voce aprendeu que usar PWM para disparar triac funciona? me diga uma coisa, voce sabe qual o tempo que demora para ser escrito um digitalWrite():, a 16Mhz menos de 2us, nao precisa usar pwm,ate pq uma vez disparado o triac nao para de conduzir ate que  a corrente de manutencao seja menor que a de base.

Alex, nesse link faz uma comparação entre a função digitalwrite e o acesso direto ao PORT, eu mesmo acabei de medir com um analizador logico, melhorou um pouquinho, digitalWrite(pin,HIGH) demora 5,9167µs e digitalWrite(pin,LOW) demora 5,75µs. Testei isso em um Arduino Mega, não sei se no Atmega328 houve melhora pois só tenho chips em branco, sem bootloader. Depois testo e te falo...

Amigo aonde voce aprendeu que usar PWM para disparar triac funciona? Sim, da certo, da uma estudada no datasheet do TCA785.

Disparar um tiristor de maneira adequada não é simplesmente setar um GPIO. Ainda mais onde ele tem um função com interrupção que leva uns 15ms pra ser executada. Da de fazer sim, sem problemas, mais precisa  escovar bits. Em auto nível dificilmente vai sair algo 100% estável. Ja vi gente experiente perder cabelos por causa de tiristores..

Amigo me diga o que é um PWM?

pulse+width+modulation = pulso+largura+modulação

traduzindo = modulação por largura de pulso, voce modula um sinal determinando o tempo on e o tempo off mudando assim a sua razão eficaz, geralmente se usa PWM com IGBT, MOSFET, tiristor não vejo necessidade neste caso do dimmer, por que? pq necessito efetuar o disparo uma unica vez apos o ponto zero, apos disparado o proprio ira parar de conduzir no proximo ponto zero, então pego este ponto zero novamente, aguardo o tempo que eu quero e disparo dinovo,  fabio henrique agradeço as informaçoes prestadas quando passasse o tempo de uma escrita no digitalWrite, outro dia um usuario do lab me falou que tinha colocado no osciloscopio e tinha dado menos de 2uS, lendo uma materia do PIC16f877A com tal de 8MHZ dizia que ele levava en torno de 4uS para uma escrita digital,entao acreditei no nosso colega pois achei que o avr trouxesse algumas evoluções encima do PIC, fabio e jucelei me add ai alex_sander_2011@hotmail.com.br para podermos trocar ideias, adoro trocar ideia com gente do gabarito de voces, abraço. 

não tenho msn, mas a gente pode conversar no chat do labdegaragem... vou estar online a manhã inteira, com relação ao digtalWrite, demora isso tudo porque a função tem que converter  a variavel numérica do pino, para PORT e bit , verificar se está como INPUT/OUTPUT, se é pino do ADC e se está ligado, se é pino de PWM e se o mesmo está ligado...

Usando o comando

PORTB |=(1PB5) //pino 13 do arduino.

usa só um ciclo 62,5ns.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço