Ir ao conteúdo

Posts recomendados

Postado

Boa noite pessoal

 

Gostaria que alguém me explicasse a teoria sobre comunicação utilizando leds infravermelhos. Mas especificamente sobre controles remoto de tv.

O que eu li é que o sinal é transmitido a 38Khz.

 

Comprei um receptor de IR como o da foto abaixo, e com a ajuda de um osciloscópio consegui observar o sinal sendo transmitido. O que eu notei é que o osciloscópio não registra 

frequências nem perto de 38KHz, de fato para um controle remoto da Samsung a frequência medida é algo em torno de 570Hz.

 

Estou perguntando isso pois eu programei um microcontrolador para receber os sinais de um controle remoto, e então transmitir por USB a duração em micro segundos de cada um dos pulsos que compõe o sinal. Inseri os valores no excel e consegui gerar um gráfico exatamente igual ao observado na tela do osciloscópio. Agora de posse desses valores gostaria que o microcontrolador acionasse um led IR e reproduzisse o sinal que copiei.

 

O que tentei fazer foi ligar o PWM do microcontrolador em 38KHz e então ir ligando e desligando o PWM em uma duração igual a medi antes, mas não esta funcionando..

Também tentei o código abaixo para emitir um único pulso de 500us, nesse caso o osciloscópio mediu o pulso como 600us e sem muita precisão..

delay_us(500);
pwm1_Set_Duty(0);
delay_us(500);
pwm1_Set_Duty(255);
delay_us(500);
pwm1_Set_Duty(0);

 

Como eu deveria estar fazendo isso?

 

Agradeço qualquer ajuda!


 

 

 

 

 

 

 

 

 

ReceptorIR.jpg

Postado

Na verdade são 570Hz modulados em 38KHz. Tem um protocolo a seguir, uma espécie de código criado pelas empresas de eletrônica. É uma transmissão de dados serial, onde no primeiro pulso vem qual o padrão que está sendo transmitido e no segundo qual a tecla que foi apertada, daí em diante os pulsos se repetem em loop apenas para indicar que a tecla continua apertada.

Aqui nesse link, tem o exemplo do protocolo NEC que é um dos mais usados. Samsung e LG costumam usá-lo:

http://www.sbprojects.com/knowledge/ir/nec.php

Se procurar no site verá protocolos de outras marcas.

Aqui nesse site, tem uns códigos em C para acionar carcas com esses controles remotos:

http://blog.larios.tecnologia.ws/iBlog/?cat=129

Postado

Obrigado Mestre88 consegui resolver o problema.

 

Eu tinha lido bastante sobre os protocolos, e como não existe consenso entre os fabricantes resolvi criar uma solução que não dependesse de protocolo nenhum. Entretanto lendo o seu material sobre código NEC encontrei a informação que precisava, o fato é que o PWM em 38Khz funciona melhor com um duty de 25%, era isso que faltava!

 

A quem possa interessar o código abaixo aumenta o volume da tv samsung..

PWM1_Init(38000);  //PWM a 38Kzh
pwm1_Set_Duty(63); //protocolo NEC recomenda 1/4 do duty

while(true)
{
  	pwm1_start();
	delay_us(4500);
	pwm1_stop();
	delay_us(4500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(1500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(1500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(1500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(1500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(1500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(1500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(1500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(1500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(1500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(1500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(1500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(1500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(1500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	delay_us(1500);
	pwm1_start();
	delay_us(500);
	pwm1_stop();
	
  	delay_ms(20);
}

 

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!