CONTROLE REMOTO 8 CANAIS ON/OFF – PIC 16F628A

Controlar brinquedos por controle remoto tem sido um dos passatempos mais apreciados por crianças e também ‘adultos’. Muitos gastam ‘fortunas’ comprando replicas de carros, locomotivas, etc. Os menos afortunados nas finanças , preferem ser mais ‘economicos’, montando suas proprias réplicas e construindo seus próprios circuitos eletrônicos. Em alguns casos, queremos apenas controlar alguma coisa a distância, como por exemplo, um aparelho colocado no telhado ou em um prédio distante. Será que poderiamos tirar proveito das facilidades de programação de um microcontrolador para fazermos isto? Veja a resposta…

Veja o esquema abaixo:

Este projeto experimental, utiliza 2 PIC’s 16F628A , sendo um no transmissor e outro no receptor. No transmissor, temos 8 chaves ligadas aos pinos do PIC, que quando acionadas, setarão as respectivas saidas no receptor (led 0 a led 7). Esta saidas poderão controlar reles de carga, controlando assim maior potência. Cargas pequenas poderão ser controladas por transistores, também pode-se usar foto acopladores como MOC3021 para controlar triac’s diretamente em corrente alternada (lampadas, motores,etc). Use sua imaginação!!!

O protocolo usado, basicamente envia um startbit, seguido por um numero de 8 bit, correspondente ao ‘NÚMERO IDENTIFICADOR’ do aparelho, após o que, vem os 8 bits correspondentes ao estado dos botões e um intervalos final entre transmissões. A idéia do numero do aparelho, é poder usar varios conjuntos tx + rx de numeros diferentes, sem que um controle o outro (pelo menos em teoria). Este número poderá ser alterado no arquivo asm e deverá ser recompilado para obter o novo arquivo hex.
Um bit ‘0’ é formado por 1 periodo de tempo ‘low’ + 2 periodos de tempo ‘high’ na saida, pino 17. O bit ‘1’ corresponde a 2 periodos de tempo em nivel ‘low’, seguido de 1 periodo de tempo em nivel ‘high’ na saida, pino 17.
A rotina de recepção examina a cada 50 microsegundos o estado do pino 17 (entrada de rf) e se=0 incrementa o contador ‘LC’. Se for =’1′, incrementa o contador ‘HC’. A diferença entre eles corresponde ao bit a ser transferido no contador de saida (Res1,Res0). Em uma recepção bem sucedida, o byte Res0 é comparado com um número fixo do aparelho, e se for igual, irá colocar na saida (Portb), os valores recebidos. Caso cesse a transmissão, os contadores de tempos NOTX1 E NOTX, serão decrementados pela rotina, e , chegando em ‘zero’, irão apagar todas as saidas (clrf portb).

Deverá ser usado transmissor e receptor na frequencia cedida a controle remotos na faixa de 27 mhz . Existe muitos vendidos comercialmente, mas poderão ser também montados. Abaixo temos um exemplo ilustrativo de circuito transmissor e receptor, comum nos sites da internet, (porém, não tendo sido testado por mim, nem tenho algum em especial para recomendar):

Como se trata de uma montagem experimental, foi testada apenas em protoboard, com um tx + rx de 433 mhz, mas, para uso em brinquedos, não é permitido, porque nesta frequencia, poderá atrapalhar o funcionamento de equipamentos como portões, alarmes, etc.

Segue abaixo o arquivo ASM para TX:

CR27_TX_ASM

Segue abaixo o arquivo HEX para TX:

CR27_TX_HEX

Segue abaixo o arquivo ASM para RX:

CR27_RX_ASM

Segue abaixo o arquivo HEX para RX:

CR27_RX_HEX

Adicionalmente, pode-se aproveitar as portas que sobram do portA para colocar uma chave ‘DIP’ externa, com o
objetivo de com um único transmissor, poder controlar vários receptores que usem o mesmo ‘serial number’ escolhido no ASM.
Aquele que tiver a combinação da chave “DIP’ igual a do transmissor é que será acionado naquele momento.
Veja o esquema para esta opção de montagem abaixo:

Como temos 6 bits disponíveis, isto permite usar até 64 receptores em um grupo de mesmo ‘serial number’.
Note que o acionamento é apenas momentâneo, uma vez que paramos de apertar a tecla, a saída do receptor desliga.
Assim, deverá ser previsto circuitos do tipo flip-flop ligados na saída do microcontrolador, quando se desejar funções de ‘retenção’.

Segue o arquivo ASM do TX desta versão com chave ‘DIP’:

CR_TX_8C_SEL_ASM

Segue o arquivo HEX do TX desta versão com chave ‘DIP’:

CR_TX_8C_PROG_HEX

Segue o arquivo ASM do RX desta versão com chave ‘DIP’:

CR_RX_8C_SEL_ASM

Segue o arquivo HEX do RX desta versão com chave ‘DIP’:

CR_RX_8C_PROG_HEX

Em 15/03/2014, foi realizado modificações no receptor para que se possa escolher entre modo pulso ou retenção, alterando o ASM e recompilando. O esquema é o mesmo, apenas foi ajustado o arquivo ASM. Portanto, segue abaixo a pasta com esta nova versão configurável pino a pino de saída, com atualização em 01/12/2015 (eliminado bug que alternava saída em modo retenção se interruptor fosse continuamente acionado):

CR_8C_PROG_RET_v4

Em 16/12/2015 foi feita esta versão abaixo que grava na EEprom a situação das saídas programadas para modo ‘Retenção’, retornando os valores após um reset (como na falta de energia elétrica da rede doméstica):

CR_8C_SEL_RET_V5_EEPROM_FILES

Caso queira uma versão PWM de 8 canais e 5 botões on/off veja o artigo ‘FAÇA UM CONTROLE REMOTO PWM 8 CANAIS (1MS A 2MS) – COM PIC 16F628A’
Caso deseje outra versão PWM de 2 canais e 3 botões on/off, veja o artigo ‘FAÇA UM PEQUENO CONTROLE REMOTO PWM DE 2 CANAIS (1MS A 2MS) – COM PIC 12F675’
Caso deseje ainda outra versão PWM de 2 canais (sendo uma de 0-5v) e 3 botões on/off, veja o artigo ‘FAÇA UM ‘VERSÁTIL’ CONTROLE REMOTO REMOTO – COM PIC12F675’

Curiosidades:
Filas
Petróleo – acabará algum dia?
Gás Natural – energia para o lar
Ponte da torre – Uma entrada para Londres

Outros assuntos:
Qual o objetivo dos pais ao criar os filhos?
Como lidar com os sogros?
Desempenhem bem o papel de pais
Como reagir ao assédio sexual
Como lidar com problemas financeiros e dívidas
Converse com seus filhos sobre sexo

Assista a este vídeo: O que é um amigo de verdade?

Até o próximo artigo!!!

156 comments on “CONTROLE REMOTO 8 CANAIS ON/OFF – PIC 16F628A

  1. Apreciado Larios e costroido el control remoto de 8 canales con
    retencion pero al apretar el pulsador se queda intermitente
    Megustaria saber que es lo que estoy aciendo mal

    saludos Manuel P

  2. Olá Claudio, parabéns pelo blog! Preciso de um circuito em que várias pessoas possuirão cada uma um controle remoto e quando for acionado, preciso identificar pelo receptor quem está acionando. É bem parecido com sistema de chamada de mesas de restaurante.
    Neste circuito posso usar as chaves SW0 a SW7 como bits (números binários) ou seja, acionar duas, três ou até todas ao mesmo tempo? Os led 0 a led 7 acenderão respectivamente? Com isso poderia ter até 256 transmissores/pessoas. Obrigado!

    1. Olá Giovanni!
      Você montará os tx também? Neste caso cada um terá que ter um número serial identificador. O uso de apenas um bit não é seguro. Existe muito ruído que poderá comprometer o funcionamento. Além do mais, acionamentos múltiplos poderiam gerar identificação errada.
      Claudio

  3. Olá, desculpe reviver esse tópico mas estou querendo uma ajuda sua!
    Gostaria de criar um controle remoto físico para o seu projeto. Procurando na net achei esse http://microcontrolado.com/controle-playstation-no-pic-2/. só que eu gostaria de misturar o seu projeto a esse citado, pois o mesmo tem um alcance muito curto e queria adicionar o RX e o TX do seu controle. Onde na programação do pic eu poderia mudar? Agradeço desde já.

    1. Olá David!
      Eu olhei o link acima e vi que o autor fez um adaptador para reconhecer os comandos enviados por um controle remoto de play station 2, usando um pic e que aciona varias saídas correspondentes aos comandos acionados. Eu não entendi bem o que você quer fazer. Como assim misturar um projeto com o outro? Qual seria a ideia de fazer isto?
      Claudio

      1. Obrigado por responder. No projeto do controle ps2 o alcance máximo dele é de 10mts, estou fazendo um carro guiado por controle remoto e precisaria de uma distância maior que isso. A minha idéia era pegar um controle remoto ps2 com fio conecta-lo as portas de 6 a 13 do transmissor que você criou, substituindo os swiths pelo controle. Mas como faria a modificação da programação no pic? essa é a dúvida. Obrigado desde já.

        1. Olá David!
          Muito interessante a sua ideia! No momento não saberia informar quais as mudanças, se é que seria possível neste programa atual. Talvez seria melhor começar do zero ao invés de ‘remendar o pano rasgado’.
          O primeiro passo seria conhecer qual é o protocolo usado no controle remoto do PS2. Depois criar um programa que realize a comunicação entre o pic e o controle. E finalmente , gerar o sinal a ser transmitido para o receptor ( o carrinho).

          Cláudio

  4. Buenas tardes Claudio Larios, antes que nada queria agradecerLe por postear tantos circuitos con sus respectivos ASM. Con toda humildad le pido si podria explicar brevemente el funcionamiento del programa Receptor, ya que le estoy sacando chispas a mi cerebro y no logro entenderlo, desde ya muchisimas gracias y espero que no tome a mal mi pedido. Un gran saludo desde Buenos Aires, 73’DX

    1. Olá Juan!
      O primeiro receptor ‘ RX_CR.ASM’ recebe do transmissor 2 bytes. O primeiro byte tem o número do tx que no caso é 0xaa. O segundo byte é a cópia dos interruptores no transmissor. Os leds podem ser substituídos por conjuntos de reles que acionarão cargas. Você poderia, por favor, explicar o que não está compreendendo?
      Claudio

      1. Hola Claudio, gracias por responder. Lo que no entiendo es como decodifica los pulsos recibidos 1 y 0, yo habia estudiado un programa (receptor) que estaba siempre a la espera de un bit de inicio, en este caso era de 300uSeg en estado alto, si se cumplia lo antes mencionado, se iban generando retardos de tiempo para “caer” encima de cada pulso y se prenuntaba si era 1 o 0, se generaba otro retardo y se “caia” cercanamente en el centro del pulso posterior, asi hasta completar el byte completo recibido. El problema era que al recibir tanto ruido, habian veces que el ruido mismo era tomado como una recepcion valida y encendia el rele. En su programa toma varias muestras y las compara (me parece perfecto). Lo que no logro comprender en su programa es como va detectando cuando el dato recibido es 1 o 0 .Por lo que veo no trabaja como el que yo le mencione…

        1. Olá Juan!
          O principio de funcionamento é incrementar sempre, de forma continua, um contador para quando a entrada de rf é ‘0’ e outro registrador para quando a entrada de rf for ‘1’. Comparando ambos registradores teremos ou um bit ‘1’ recebido ou ‘0’. Mas o inicio desta comparação somente deve ocorrer após uma pausa de tempo em ‘0’ seguido do ‘start bit’. Nesta ocasião resetamos estes 2 contadores e também o contador de bits recebidos.
          Um resumo seria mais ou menos assim:
          1) Aguarda uma pausa, e o start bit. A pausa é percebida se os contadores ficarem no seu máximo ou seja 0xff.
          2)Identificado a pausa, resetar os contadores de ‘0’ (Lc) e ‘1’ (Hc), e carregamos a quantidade de bits a receber (16).
          3)A medida que os bits são recebidos no rx, serão acumulados valores nos registradores LC e HC. No inicio de um pulso positivo, verificamos a diferença entre seus valores e deslocamos no buffer de recepção como valor ‘0’ ou ‘1’ ( se LC>HC ou LC<HC).
          4)Aguarda receber todos os bits
          5) compara o primeiro byte recebido se é igual a numero do receptor (0xaa)
          6) coloca o segundo byte no port de saída para acionar leds ou reles.

          Lembre que o 'bit' transmitido tem o formato:
          _!—————–|_____ com tempo '1' duas vezes maior que o '0' =BIT0

          ou o contrário :

          _|——–|____________ com tempo '1' duas vezes menor que o '0' = BIT1

          Cláudio

          1. Hola Claudio, super agradecido por su pronta respuesta, ahora voy a ver el programa con esa logica. El circuito me funciono perfectamente, pero no me gusta solo armar, si no tambien aprender y adecuar los circuitos y programas a mi necesidad, aunque hay veces como en este caso, se me estaba complicando el entender la logica del programa. Muchas gracias Claudio por su tiempo. Espero en poco tiempo compartir con usted lo que tengo en mente armar. Que tenga muy buenas tardes.

  5. Olá Lário, tentei utilizar um circuito 433 no lugar do 27MHZ e ele não funcionou. É preciso alterar o código ASM para utilizar essa faixa de frequência?
    Grato, Samir.

    1. Olá Samir! Conforme mencionei no final do artigo ‘ foi testada apenas em protoboard, com um tx + rx de 433 mhz’ . Então não precisa alterar o asm. Só usar um rx/tx para 433mhz.
      Cláudio

Comments are closed.

Back To Top