Controles remotos por infravermelhos não são apenas utilizados em equipamentos de consumo como televisores, equipamentos de som, DVDs, Videocassetes e outros. Os controles remotos IR podem ser encontrados em aplicações profissionais como máquinas industriais, sistemas de segurança e em muitos outros casos. Veja neste artigo, baseado no AN10210 da Philips, como usar o microcontrolador 87LPC76x da família do 80C51.
O microcontrolador P87LPC760 da Philips é um dispositivo de 14 pinos especialmente projetado para aplicações que exijam alto grau de integração, baixo custo numa ampla faixa de exigências de performances.
Trata-se de um dispositivo baseado na arquitetura do processador 80C51, mas com a capacidade de executar instruções duas vezes mais rápido que os 80C51 tradicionais.
Outras características de destaque nesse componente é a sua operação RC interna, ampla faixa de tensões de alimentação, porta I/O programável, saídas capazes de excitar LEDs, dois timers de 16 bits, um timer watch-dog interno, quatro interrupções por teclado e modos que permitem a redução do consumo.
Essa características permitem que o LPC760 seja usado com eficiência em um transmissor de controle remoto. Trata-se de uma alternativa interessante para substituir dispositivos que já estão fora de linha como o PCA84C122 e o SAA3010.
O Projeto
Na figura 1 mostramos o modo como um controle remoto de 16 funções pode ser implementado com o 87LPC760.
Observe que além de ser necessária uma alimentação de apenas 3 V, o circuito de transmissão usa apenas um transistor, um resistor e o LED infravermelho.
Transistores de uso geral como o BC558 podem ser usados sem problemas.
No teclado temos 16 interruptores organizados de forma matricial. Isso permite que apenas 8 pinos de entrada sejam usados pelo microcontrolador, o que simplifica bastante o projeto.
As linhas “sense” são ligadas às portas 0. O P87LPC760 permite que qualquer pino da porta 0 seja habilitado para provocar uma única interrupção de teclado. Assim, a interrupção é gerada quando qualquer pino é colocado no nível baixo pelo acionamento de uma tecla.
A linhas de varredura (scan) são ligadas aos pinos da porta 1. Levando cada linha dessa porta ao nível baixo (0) e ao mesmo tempo ativando as linhas “sense”, pode-se detectar qual tecla foi pressionada, o que faz com que o dispositivo gere o código de transmissão correspondente.
O código é determinado pela programação e juntamente com um sistema de endereçamento é enviado de acordo com o protocolo RC5.
Os pulsos gerados estarão disponíveis no pino P1.7 que é usado para excitar a etapa de potência. Essa etapa de potência é formada por um transistor que tem por carga de coletor o LED infravermelho.
No exemplo dado, o reset on-chip é usado e também o oscilador interno RC operando numa freqüência de 6 MHz com +/- 5% de tolerância.
Os pinos não usados neste exemplo podem ser empregados para expandir a matriz e assim obter mais funções para o controle remoto.
O Protocolo de Transmissão RC5
Com a finalidade de assegurar imunidade contra a interferência de outras fontes de infravermelho como o sol, lâmpadas e mesmo transmissores remotos de som para fones, uma codificação bi-fase (também denominada codificação Manchester) é usada para palavras do código RC5.
Nessa codificação, conforme mostra a figura 2, cada bi-fase codificada consiste num símbolo compreendido entre dois níveis lógicos com uma transição no meio.

A figura 3 mostra as palavras bi-fase modulando uma portadora de 36 kHz antes de serem transmitidas usando o LED infravermelho.
Levando em conta que o período de repetição da portadora de 36 kHz é de 27,778 us e o ciclo ativo de 25%, a duração de cada pulso da portadora é de 6,944 us.
Como a parte alta de cada bit do código RC5 contém 32 pulsos de portadora, o período de 1 bit é 64 x 27,778 us = 1,778 ms.
Uma palavra completa do código RC5 contém 14 bits o que significa que ela demora 14,889 ms para ser transmitida. Cada 14 bits do código RC5 consistem em:
• Um bit de partida (S) que sempre está no nível lógico 1.
• Um campo de bits (F) que correspondem aos códigos de comando de 0 a 63 ou 64 a 127.
• Um bit de controle (C) que muda de estado cada vez que uma tecla é solda e com isso inicia uma nova transmissão.
• Cinco bits de endereços de sistema para selecionar um dos 32 sistemas possíveis.
• Seis bits de comando representando um dos 128 comandos possíveis RC5.
Software:
Na figura 4 temos os blocos do loop principal.

Após a inicialização do hardware, as quatro linha de varredura (pinos P1.0 a P1.3) são levadas ao nível baixo e o LPC76x é levado ao estado de consumo reduzido.
Se uma das 16 teclas de controle é pressionada, uma interrupção será gerada e o microcontrolador vai “acordar” saindo do estado de baixo consumo.
Com isso o programa principal verifica qual é chave pressionada e uma rotina é chamada para acessar o código correspondente RC5. Depois disso, entra em ação o modo power down, e o microcontrolador entra em estado de baixo consumo esperando por um novo comando.
Interrupção de Teclado
Uma interrupção é gerada quando uma chave é pressionada. Na rotina de interrupção de teclado, o teclado é desabilitado e o timer 0 funciona como circuito anti-repique, entrando em ação.
A finalidade desse timer é assegurar um tempo da ordem de 5 ms para que a tecla estabilize e assim o valor correto seja lido pelas linhas sense da porta 0. Na figura 5 temos os blocos para essa interrupção.

Interrupção do Timer 0
No início da rotina de interrupção do timer 0, depois que o timer pára uma rotina é chamada para decodificar o código de teclado.
No final dessa interrupção o timer watchdog é inicializado. Esse timer é usado para a repetição de envio do código RC5 a cada 100 ms, enquanto a chave correspondente estiver pressionada.
Interrupção do Timer Watchdog
Se o timer watchdog transborda uma interrupção é gerada e com isso o microcontrolador sai do estado power down. Inicialmente, a rotina de decodificação do teclado é chamada para verificar se a tecla ainda está pressionada.
Se isso ocorrer, a rotina de interrupção é deixada e com isso um novo comando RC5 é enviado pelo loop principal até que ocorra uma nova interrrupção do watchdog 100 ms depois.
Enviando o Código RC5
Na figura 6 temos os blocos lógicos (fluxograma) que mostram a rotina usada para enviar uma palavra do código RC5.

O programa começa por inicializar um contador de bits em 14 e enviar o bit de partida. Para enviar os bits modulados numa frequência de 36 kHz, a subrotina “Start)Mod” é chamada.
Depois da transmissão do bit de partida, os 13 bits seguintes da palavra em código RC5 são transmitidos usando a codificação Manchester.
Depois da transferência de cada bit, um intervalo de 889 microssegundos é programado usando o Timer 1 do microcontrolador, de acordo com as especificações RC5. Assim os dois bits seguintes da palavra em código RC5 são verificados para que seja decidido se um pulso curto, longo ou um intervalo extra deve vir depois.
Quando o contador de bits chega a zero o programa volta ao início do loop principal e o circuito volta ao modo power down novamente.
O Modulador de 36 kHz
O timer 1 do microcontrolador é usado para gerar 32 (ou 64) pulsos modulados numa taxa de 36 kHz com um ciclo ativo de 25%. Essa parte do programa é muito crítico, pois o tempo deve ser preciso. Por esse motivo, o programa para essa finalidade é escrito em assembly.
T1 é programado para se auto-recarregar gerando uma interrupção a cada 27,777 microssegundos (incluindo a latência). Na rotina de interrupção, um contador de pulsos é decrementado e na porta P1.7 um pulso de 7 us é gerado, de acordo com as especificações RC5.