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. Poderia me ajudar a modificar esse seu código pra usar no PIC16F877? É porque eu precisava de mais portas de entradas e saída(pelo menos 16)Fico agradecido se puder me ajudar.

      1. Queria fazer o mesmo controle mas com o máximo de canais de transmissão e recepção possíveis pra eu fazer um detonador de fogos à distância

        1. Olá Aslem! Entendi o que você deseja fazer. Mas, trabalhos com pirotecnia exigem equipamentos profissionais com normas de segurança elevadas. Este transmissor/receptor é de caracter didático e pode apresentar falsos sinais na saída em decorrência de interferências externas, o que poderia gerar acidentes até fatais. Não recomendo, em hipótese alguma, o seu uso nesta função, visto que poderá causar, com certeza, acidentes até fatais.
          Claudio

          1. Pode ficar tranquilo quanto à segurança e etc.Sou de Santo Antônio do Monte-MG,a capital brasileira dos fogos de artifício, eu já trabalhei na fabricação deles, meu pai trabalha até hoje e conheço outros detonadores sem fio e com fio.Meu projeto é didático também e mesmo que apresente falhas, o risco é mínimo devido ao conhecimento que tenho dos perigos e precauções que vou tomar.

          2. Olá Aslem! Menos mau então. Para fazer o que você deseja, terá que aumentar a quantidade de bit a ser enviado em +8 bit, tanto no tx como no rx. Terá que fazer testes em mais 8 chaves, talvez colocando-as no portD. O portA é incompleta, no Pic 16f877, sendo melhor usar o portB e Portc no lugar do portA e B.
            Vai envolver muitas mudanças, com certeza. No momento, não estou com disponibilidade de tempo para isto, e também, não tenho um pic 16f877 (40 pinos) para testes. Talvez tenha um 16f872 (28 pinos) . Vai para o “caderninho”, ok.
            Claudio

  2. Amigo, como faço para alterar o endereço do startbit para usar dois TX e dois RX totalizando 16 canais,
    Desde já agradeço pela força.

    Aloisio

    1. Olá Aloisio! O startbit não deve ser alterado, mas o primeiro byte pode ser usado para diferenciar um tx de outro. Veja o pedaço de código abaixo:
      INICIO:

      ;=============================
      MOVLW 0XAA ;CÓDIGO DO TX
      MOVWF RES0
      MOVFW PORTB ;PEGA INFORMAÇÃO DAS TECLAS
      XORLW 0XFF
      BTFSC STATUS,Z
      GOTO INICIO ;AGUARDA ALGUMA TECLA SER APERTADA
      MOVFW PORTB
      MOVWF RES1

      ENVIAR:

      Voce pode alterar a primeira linha acima,onde está ‘ MOVLW 0XAA ;CÓDIGO DO TX’
      para outro valor, como por exemplo, MOVLW 0X33 ;CÓDIGO DO TX .

      A mesma mudança tem que ser feito no receptor que irá receber o sinal.

      Cláudio

  3. Claudio, valeu pela direção, vou estudar, e cara, que site bom, parabéns, depois que eu estudar e fizer os testes, posto o resultado, vlw e té+.

  4. Valeu, Claudio por responder, mas eu já tava usando um resistor de 10k, mas decobri que afonte estava ruim, não tinha corrente. Consertei a fonte e agora consigo acionar o relé. Mas aproveitando o seu conhecimento, eu notei que ao apertar um botão o relé é acionado e logo desarma, mas alterei uma linha do programa e consegui fazer o relé permanecer acionado. Tem como por exemplo: 1º) Ao apertar o botão novamente desativar o rele tipo liga/Desliga, mas apertando o mesmo botão? 2º) ao apertar outro botão o 1º relé não seje alterado, a menos que eu aperte o botão que corresponda a ele?, mais uma vez obrigado Claudio.

    1. Olá Gilvan!
      O que você quer fazer chama-se ‘modo de retenção’, ou seja , um aperto no botão irá ligar e outro aperto , desligar. Sim, é possivel fazer isto. Terá que alterar a rotina um pouco. Sugiro que você estude os arquivos asm do ‘RECEPTOR DE CONTROLE REMOTO GENERICO PARA HT6P20B COM PIC 12F629’ , de como foi feito na versão 6 PULSO/RETENÇÃO. Depois, altere as linhas para fazer o que deseja e recompile no Mplab-ide.
      Cláudio

  5. Boa noite, olha parabéns pelas informações que você disponibilizou, eu sou estudante, eu gravei o pic e montei o protoboard e funcionou perfeitamente, mas precis de sua ajuda, é que quando eu substituí os leds por relés e o relé fica ativo o tempo todo, mesmo quando não aperto nenhum botão, e quando eu monto um circuito só para o relé sem o pic com acionamento direto por botão passando enviando 5v na base do BC548 o relé funciona tem alguma idéia do que poderia ser para me ajudar, desde já antecipo meus agradecimentos.

    1. Olá Gilvan! Creio que seja um simples problema de polarização. Voce deve estar usando o mesmo valor do resistor para o led na base do bc 548. Tente troca-lo por um de 10K. Lembre-se que o nivel low do Pic pode variar de 0,2 até por volta de 0,8 volts. O transistor passa a conduzir a partir de 0,5 chegando a saturação com 0,7 volts. Na situação de low com o,6 volts já faria o transistor conduzir e ligar o rele.

      Pic (pino de saida) ———————resistor de 10k ————-base do bc548

      Cláudio

Comments are closed.

Back To Top