Projeto usando Controle Remoto Universal - Fase inicial
Autor: Tico | Publicado: 2010-02-02T12:48:00-08:00


<!--
 /* Font Definitions */
 @font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:1;
	mso-generic-font-family:roman;
	mso-font-format:other;
	mso-font-pitch:variable;
	mso-font-signature:0 0 0 0 0 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520092929 1073786111 9 0 415 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:10.0pt;
	margin-left:0cm;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;
	mso-fareast-language:EN-US;}
p.MsoNoSpacing, li.MsoNoSpacing, div.MsoNoSpacing
	{mso-style-priority:1;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;
	mso-fareast-language:EN-US;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;
	mso-fareast-language:EN-US;}
.MsoPapDefault
	{mso-style-type:export-only;
	margin-bottom:10.0pt;
	line-height:115%;}
@page Section1
	{size:595.3pt 841.9pt;
	margin:70.85pt 3.0cm 70.85pt 3.0cm;
	mso-header-margin:35.4pt;
	mso-footer-margin:35.4pt;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
-->
  
Ola a novamente a todos os leitores do Eletrônica-OOB.Estou de volta com mais um super projeto... Infelizmente o projeto não esta totalmente completo acredito que ate o fim-de-semana o projeto mesmo estara pronto!!!Ele ta bem legal e muito util com integracao com a super fechadura....No momento o codigo e layout ja estao prontos agora soh falta fazer a placa, soldar os componentes e torcer para dar certo!!Essa foi apenas a primeira parte que eu fiz para conseguir chegar no projeto final mas ja deixo ai o gostinho do projeto para vcs... junto com o codigo, explicacao da teoria, e explicacao do codigo...
Mas chega de baboseira e vamos ao que interessa... Com vocês eu apresento o uso de microcontroladores (PIC 16F628A) junto com o famoso Infra-Vermelho (controle remoto)...O que eu fiz foi pegar o controle universal de meu quarto, que a principio era apenas para a TV e para a Sky e adicionar algumas funcionalidades extra... A idéia final desse projeto é que ele possa realizar todo o controle de meu quarto (luzes, fechadura digital, entre outros) Infelizmente ainda não esta aplicado as luzes do meu quarto mas uma vez que consegui acender alguns led’s da maneira que eu queria o resto é detalhe....Abaixo deixo o vídeo para vcs verem o circuito funcionando...E logo após isso falarei um pouco sobre o protocolo de comunicação de controle remoto e a lógica que utilizai para a leitura dos dados...



http://www.youtube.com/watch?v=HFKq6Pms2scExistem alguns tipos de protocolo de comunicação de controles infra-vermelho... eu vi alguns protocolos e o que eu achei mais interessante e fácil de se trabalhar é o protocolo da Sony, chamada SIRC (Sony Infra Red Communication)...Como utilizei esse protocolo, me concentrarei em explicar apenas ele, se alguém tiver alguma duvida sobre algum outro protocolo eu posso ajudar...No protocolo SIRC a informação é passada da seguinte maneira:

Primeiro é enviado um sinal com largura de pulso igual a 2,4ms, esse sinal é um valor que o controle manda para informar que esse é o inicio do código a se ser enviado, e que logo&nbsp; após isso será mandado uma seqüência de zeros ou uns, seguindo a seguinte estrutura:ts&nbsp; xxxxxxx&nbsp; xxxxx ts = a 2,4ms (bit que informa inicio do código)xxxxxxx = seqüência de 7 bits sendo 0 ou 1 informando qual tecla foi apertado (tecla de ligar, botão 5 ou 6 ou 7..., menu, TV-video, aumente volume, etc...)xxxxx = seqüência de 5 bits sendo 0 ou 1 informando para qual aparelho esse código é (TV,vídeo cassete, DVD, home theater,etc)
Ou seja toda vez que vc aperta uma tecla em seu controle remoto, o mesmo fica enviado uma bit de controle, seguido de 12 bits &nbsp;na qual informa qual foi a tecla apertada e quem deve executar a tarefa... uma vez que ao aperta uma tecla todos os seus aparelhos vão receber a informação, a diferença é que o aparelho vai ver os 5 bits que representam a qual aparelho esta sendo enviado e se não estiver escrito que é para ele, o aparelho vai simplesmente descartar essa “mensagem recebida”...(consultar no final do post a tabela que criei informando qual tecla envia qual comando)Bom mas ai caímos na questão como ele representa 0 e como ele representa 1?No primeiro gráfico abaixo da para ver bem como ele faz isso:


Depois de enviar o bit de inicio (TS) ele põe em nível lógico baixo durante 0,6ms e começa a enviar a informação com um intervalo entre cada bit (independente de ter sido 0 ou 1) de 0,6 ms... Ou seja, ZERO é enviado um pulso de largura igual 0,6ms em alta e 0,6 ms em baixa.Já o UM é enviado um Pulso de 1,2ms em alta e 0,6ms em baixa. Ufaaa acho que deu para entender né?E o que são todos esses outros gráficos malucos?Calma tudo vai ser explicado no seu devido tempo...Agora paramos para pensar... Legal então quando eu aperto uma tecla no meu controle remoto ele liga piscando um LED infravermelho, enviado assim a informação que eu queria que ele enviasse? Basicamente sim, mas vamos com calma...Primeiro o que é o infravermelho? O Infravermelho nada mais é do que uma “luz” que nosso olho não consegue enxergar e que esta presente em vários outros locais, como na luz provida do sol, de um objeto de que esteja quente, etc..Entao imagina se a gente pegasse a nossa TV e colocasse perto de uma janela... o infravermelho contido na luz solar iria fazer o sensor da TV detectar um NL alto assim o controle remoto iria para de funcionar e com muita sorte a luz solar poderia até mudar de canal sozinho de vez em quanto :p...O que os caras resolveram fazer para arrumar isso? Modular o Sinal enviado...&nbsp; em um freqüência especifica (38Khz), ou seja agora o sensor da TV só vai ler o que for enviado para ele quando o sinal recebido estiver nessas condições, na qual consiste de uma modulação ASK usando como portadora um sinal quadrado com freqüência= 38Khz.Modulação é algo bem complexo muito utilizado em telecomunicações, a intenção aqui é só dar uma idéia do que é, não entrando em aspectos complexos... Quem quiser se aprofundar mais tem uma pancada de livros tratando de várias modulações (AM-DSB, AM-SSB,FM, ASK,FSK,PAM,etc...)...Ou seja, o que de fato o controle remoto envia, são vários pulsos quando quer representar nível lógico alto e não envia nada quando vai representar NL baixo como mostrado no gráfico acima chamado ASK, o que esta em preto é o que ele realmente envia para o receptor e é facil observar que a envoltória da onda enviada pelo controle remoto (em vermelho) era o que vc queria enviar, a única diferença que vc modulou a informação antes de enviá-la.Para entender como esse processo pode ser feito é só vc imaginar o seguinte... imagine uma chave onde toda vez é apertada ele deixa passar uma onda quadrada de freqüência muito alto (imagem dois do gráfico) e quando essa chave não esta sendo apertada, nada é enviado...No fim quem esta apertando essa chave é a informação que vc quer enviar, ou seja quando vc quer enviar o ts (2,4ms), o mesmo fica deixando a portadora (onda quadrada de 38khz) passar durante 2,4ms, portanto iram passar aproximadamente 91,2 pulsos onde cada pulso tem um período de 26us (f=38Khz)Bom já deu de modulação né?Agora como vcs podem ver na imagem acima, faltou explicar o ultimo gráfico... Esse ultimo gráfico representa exatamente o que o receptor ira receber... o Sinal depois de enviado via o controle remoto, modulado bonitinho em 38Khz, e assim que ele chega no receptor o mesmo através de um circuito demodulador, obtem a forma de onda recebida porem com a lógica trocada... Normalmente quando o receptor não esta recebendo nada, o mesmo fica em Nivel lógico alto, e assim que o mesmo recebe que começa a receber um dado vai para nível lógico baixo sendo assim a lógica trocada...Como a intenção aqui não é se concentrar no envio, mas sim no recebimento, deixo aqui só uma dica para quem quer enviar :Suponhamos que vc queira enviar o bit 1, já modulado....Bit 1= 1,2ms em alta +0,6ms em baixa 1 pulso consiste em um tal=8us e T=26usX pulsos para 1,2msX=45,6 =46pulsos...Podendo ser enviado já modulado da seguinte maneira..Movlw&nbsp;&nbsp;&nbsp;&nbsp; 46&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Movwf&nbsp;&nbsp;&nbsp; loop&nbsp;&nbsp; faz um loop de 46 vezes para enviar 46 pulsosLoop_bit1:Bsf&nbsp;&nbsp; porta,2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;ligado no led infravermelho Nop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;sequencia de 8 nop para dar um tal de 8usNop NopNopNopNopNopNopBcf&nbsp;&nbsp; porta,2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;desliga o infravermelhoNopNopNopNopNopNopNopNopNopNopNopNopNopNopNopDecfsz&nbsp;&nbsp; loop&nbsp; Goto&nbsp;&nbsp;&nbsp;&nbsp; loop_bit1&nbsp;&nbsp;&nbsp;&nbsp; ;call&nbsp;&nbsp;&nbsp; delay_06ms;-------Para zero é o mesmo esquema a diferenca é que vc vai ter que realizar 23 loops apenas ...
Bom agora deixo vcs com mais um vídeo explicando linha a linha como o código funciona...http://rapidshare.com/files/311107181/Infra-Vermelho.mp4
O codigo junto com o projeto inteiro do mplab pode ser baixado aqui...http://rapidshare.com/files/344985354/Codigo_Base.rar
Espero que vcs gostem e agradeco comentarios...Um AbracoTico&nbsp;