RECEPTOR DE CONTROLE REMOTO GENERICO PARA HT6P20B COM PIC 12F629/675

Decodificar transmissores de controle remoto que usam o ci HT6P20B não é algo muito dificil de se fazer. Para ajudar os que desejam implementar aplicações com este circuito integrado, segue esta sugestão.

Adquirindo um controle remoto comercial (qualquer um usado em alarmes, portões, etc que use o HT6P20B) , carregando o código hex no microcontrolador PIC 12F629, e colocando na mesma placa do receptor de controle remoto genérico já publicado, você terá a opção de fazer experiências interessantes ou ainda , agregar a uma aplicação que deseje fazer ou usar. O programa permite a captura dos 24 bits enviados pelo transmissor (chaveirinho) e testa se já existe este endereço gravado na EEprom. Se tiver, testará os bit 6 e 7 da ultima palavra transmitida, que contem a chave apertada. Conforme o botão apertado, acenderá o Led1 ou Led2, por um período de 0,5 segundo e apaga de novo. Se manter o botão apertado, irá continuar aceso. Caso o endereço não esteja gravado na EEprom, necessitará ser ‘aprendido’ apertando o botão ‘learn’ na placa e acionando um dos botões do controle remoto. Após piscar uma vez o ‘ led learn’ na placa, terá sido bem sucedido a operação de aprendizado.
O HT6P20B já vem de fabrica programado com o ‘serial number’ que é recebido , com mais 2 bits que correspondem aos 2 botões (S1 e S2) nos pinos 1 e 2 do HT6P20B.
Mais informações, veja o datasheet do HT6P20B.
Para gravar o código hex no chip, poderá usar o SIMPLES PROGRAMADOR DE PIC e um software programador como o ‘WINPIC2000′, que é uma mão na roda para todos os hobistas.

Para obter uma versão em ‘C’, veja o artigo “RECEPTOR GENERICO FLEX – UM PROGRAMA PARA VARIAS OPÇÕES DE CIRCUITOS INTEGRADOS – COM PIC 12F675/629″> ‘RECEPTOR GENERICO FLEX – UM PROGRAMA PARA VARIAS OPÇÕES DE CIRCUITOS INTEGRADOS – COM PIC 12F675/629’ deste blog.

Segue abaixo o arquivo ASM:

RX_GEN_HT6P20_V3P1_ASM

Segue abaixo o arquivo HEX a ser gravado no chip PIC 12F629:

RX_GEN_HT6P20_V3P1_HEX

A versão acima está dando um bug ao programar 42 botões de controle, sendo operacional com menos. Segue abaixo pasta com arquivos de uma versão corrigida e melhorada. Foi alterado o modo de programar e ao atingir 42 botões aprendidos, o led ‘learn’ piscará para indicar memória cheia:

RX_GEN_HT6P20_V3P2_ASM

Clique aqui para ver o esquema da placa genérica.

Clique aqui para ver a sugestão da placa de circuito impresso.

clique aqui para ver a montagem dos componentes na placa visto pelo lado cobreado e lista de materiais.

Segue abaixo versão ASM/HEX que quando mantém o botão apertado, o led se mantém aceso, sem piscar:

RX_GEN_HT6P_V4P1_ASM

RX_GEN_HT6P_V4P1_HEX

Segue abaixo versão idêntica ao acima, mas com opção de inverter a saída no código Asm:

RX_GEN_HT6P20B_V41_INVERTIDO_ASM

RX_GEN_HT6P20B_V41_INVERT_HEX

Segue versão para 3 leds com aprimoramentos:

RX_GEN_HT6P_V5P1_ASM

RX_GEN_HT6P_V5P1_HEX

Segue arquivo ASM (versão 6) com opção de usar o pino 3 como entrada para uma chave seletora para modo ‘PULSO/RETENÇÃO’:

RX_GEN_629_V6P1_ASM

Segue arquivo HEX (versão 6):

RX_GEN_629_V6P1_HEX

Segue esquema de ligação (versão 6):

Na versão 7, com opção de usar mais um led (led3) no pino 3, podendo ser alterado o programa para modo ‘PULSO’ ou ‘RETENÇÃO’, por comentar e descomentar na ‘opção de usuário’ do arquivo ASM e recompilar. Para facilitar, segue uma pasta com arquivos compilados para modo PULSO e outra para modo RETENÇÃO, atualizada em 15/10/2017:

RX_GEN_HT6P20_V7_PULSO_

RX_GEN_HT6P20_V7_RET_

Segue vídeo caseiro do funcionamento da versão 7 em modo retenção:

Segue arquivo ASM para versão acima, mas com inversão das saídas no modo Pulso (alterável no linha de código como opção).

RX_GEN_HT6P_V7P1_INVERTIDO_ASM

Segue arquivo HEX para versão acima:

RX_GEN_HT6P_V7P1_INVERTIDO_HEX

Segue esquema para versão 7 abaixo:

Segue arquivo ASM para versão 8 (apenas didática, apresentando como podemos piscar os led’s na saída por um número de vezes, alterar qual saída fará isto, piscar mais de um led junto, alterar tempo aceso dos led’s , alterar tempo apagado, etc.

RX_GEN_629_V8BP1_ASM

Segue o arquivo ASM para versão 9 (idem versão 6, mas com aprendizado individual de controles, para poder usar um controle
com uma ou mais placa):

RX_GEN_629_V9AP1_ASM

Segue o arquivo HEX para a versão 9:

RX_GEN_629_V9AP1_HEX

Os arquivos abaixo permitem operação mista, entre retenção e pulso.
Acionando o botão 1 apenas, obtemos acendimento do led1 e se soltar, apaga. O mesmo com o botão 2 e led2 (modo pulso).
Mas se apertar os dois juntos, acende o led 3. Soltando-os e apertando-os de novo, apaga (retenção no led 3)
Obs. Necessita de pull up no pino 3 para funcionar. Veja esquema abaixo da V10.

Segue o arquivo ASM para a versão 10:

RX_GEN_629_V10P1_ASM

Segue o arquivo Hex para versão 10:

RX_GEN_629_V10P1_HEX

Segue o esquema para versão 10:

Esquema v10

Segue pasta zipada com versão 11 (14/07/2015) com 3 canais, programável no arquivo “C” (Compilador CCS C) por comentar/descomentar as linhas, para funcionar em modo retenção ou pulso, saída normal ou invertida, de forma individual para cada canal. Rotina de recepção alterada para testar cada parte do bit recebido (em teste):

RX_GEN_675_V11

Veja também o artigo:‘RECEPTOR DE 3 CANAIS PARA USO COM CONTROLE REMOTO (CI HT6P20B) E PULSO/RETENÇÃO INDIVIDUAL- COM PIC 12F675’

Segue abaixo uma versão de 1 canal, modo pulso, feito em “C” no compilador MPLAB-IDE XC8:

RX_HT6P20B_PULSO_XC8

Segue abaixo uma versão de 1 canal, modo retenção, feito em “C” no compilador MPLAB-IDE XC8:

RX_HT6P_XC8_RET

Links:
datasheet 12f629

Curiosidades:
controle remoto e o efeito estufa
ataques cibernéticos
Comportamento anti-colisão dos peixes
Jóqueis-robos para camelos

Outros assuntos:
Como acabar com a tática do silêncio
Os milagres são possíveis – 3 objeções
Como enfrentar o bullying sem ter de partir para a briga (animação)
Como criar filhos responsáveis
Como administrar o seu dinheiro
Ensine valores morais a seus filhos
Ensine seus filhos bons principios com atividades de colorir
Como posso ter ânimo para exercitar
Como posso controlar meu peso?
Entrevista com um bioquímico
Adolescentes- O que fazer se estou sofrendo bullying?
Como evitar ferir com palavras?
Como tratar seu cônjuge com respeito?

Até o próximo artigo!!!

248 comments on “RECEPTOR DE CONTROLE REMOTO GENERICO PARA HT6P20B COM PIC 12F629/675

  1. Olá, Lários… Ainda não desisti…tenho estudado a programação em C (CCS), mas como faço isso por hobby, tenho muitas dificuldades… gostaria muito de desenvolver um projeto em que, no mesmo PIC, pudesse fazer a decodificação do HT6P20 e as demais rotinas, como acionar um motor, por exemplo… Acontece que tenho pesquisado muito na internet e a rotina para decodificação do “maldito” parece um segredo guardado a sete chaves… além de ter poucos exemplos, são muito complexos… ficaria eternamente grato (na verdade ja sou) se escrevesse o código desse teu decodificador em C (pode ser a V1 mesmo)… não tenho pressa, ja estou esperando ha tempos mesmo… de qualquer forma, sou muito grato aos teus projetos e ensinamentos. Grande Abraço.

    1. Olá Waymovie!
      Realmente, não encontramos muitos artigos sobre isto. O problema geralmente é que dependendo da aplicação, temos que escolher a forma de recepção de sinais rf mais apropriada ao conjunto: por interrupção de pino de entrada, por interrupção de timer, por inclusão na rotina em loop constante. A temporização para recepção de sinais pode ser um grande problema junto com outras rotinas. Assim, cada caso “é um caso”. Poderá usar as informações do artigo “RECEPTOR GENERICO FLEX – UM PROGRAMA PARA VARIAS OPÇÕES DE CIRCUITOS INTEGRADOS – COM PIC 12F675/629” para iniciar seus testes.
      Cláudio

    1. Olá Douglas!
      Como os esquemas obviamente serão diferentes, faça primeiro um esquema elétrico novo, com as entradas e saídas, escolhendo quais pinos deseja usar e suas funções . (Use o datasheet ) Inicie escolhendo qual das versões deseja fazer (simples, com retenção, etc, das versões v1 a v7). Abra o arquivo asm escolhido no Mplab e salve-o com um novo nome. Substitua os arquivos de ‘include’ de pic 12f629 para o modelo 16f628a. Depois terá que alterar o port de GPIO para ‘PORTA’ ou ‘PORTB’, acertando também o sentido do port usado (entrada ou saída) com o registrador TRISA ou TRISB. Use o datasheet para identificar quais são os pinos e sua funções. Altere a palavra de configuração para corresponder de forma idêntica. As grafias costumam ser diferentes entre os pic’s usados e apresentarão erro ao compilar. (Abra os arquivos ‘includes’ com um Notepad e veja como ele deve ser grafado). Compile o arquivo e elimine algum erro gerado na transição de modelo. Se tudo correr bem, grave um pic 16f628a . Monte o esquema elétrico e insira o pic já gravado. Alimente o circuito. Grave o controle remoto na memória, conforme os procedimentos explicados no artigo.
      Existem ‘n’ pics disponíveis no mercado, sendo impossível para mim fazer uma versão para cada modelo. Mas, com um pouco de paciência e persistência, você conseguirá fazer esta modificação.
      Cláudio

  2. Bom dia cláudio!parabéns pelo projeto,estou fazendo um modelo de um mini elevador eu usei a sua versão 6 com retenção com pic 12f629.Se possível, gostaria que modificasse, ao pressionar um botão do controle remoto led 1, fica aceso,e ao pressionar o outro botão do controle, led 1 apaga e acende o led 2,assim vice versa.E ter uma opção de apagar o led que estiver aceso via aterramento de um dos pinos do pic, vou usar sensor fim de curso, ou se tiver como fazer um comparador de tensão para apagar os leds, melhor ainda,aí não precisa de sensor fim de curso.Valeu!

    1. Olá Geraldo!

      Obrigado por seu comentário apreciativo. Não estou em condições de mexer com isto agora, mas você mesmo
      poderá fazer as modificações no asm, que julgar necessárias.
      Como sugestão, você poderá usar o asm RX_GEN_HT6P20_V3P2_ASM e fazer algumas mudanças nele conforme segue:

      Localize a porção de código abaixo no asm citado:

      ;===================================================

      ACIONAR

      BTFSC RES2,7 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO
      BSF LED1 ;ATIVA LED1
      BTFSS RES2,7
      BCF LED1 ;APAGA LED1

      BTFSC RES2,6
      BSF LED2 ;ATIVA LED2
      BTFSS RES2,6
      BCF LED2 ;APAGA LED2

      MOVLW .20
      CALL DELAYM ;TEMPO QUE SE MANTEM ACESOS
      BCF LED1
      BCF LED2
      GOTO INICIO

      ;==============================================

      substitua toda esta parte, com muito cuidado para não
      pegar linhas erradas, por esta parte abaixo:
      (Use control_c, control_v , para copiar e colar sobre a
      área marcada no asm)

      ;===================================================
      ACIONAR

      BTFSS RES2,7 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO
      GOTO SEGA1
      BSF LED1 ;LIGA LED1
      BCF LED2 ;DESLIGA LED2

      SEGA1
      BTFSS RES2,6 ;TESTA QUAIS BOTÕES
      GOTO SEGA2
      BSF LED2 ;LIGA LED1
      BCF LED1 ;DESLIGA LED2

      SEGA2

      GOTO INICIO
      ;====================================================

      também, deverá localizar esta porção de código abaixo:

      INICIO:

      CLRF RES3
      CLRF RES2
      CLRF RES1
      CLRF RES0
      MOVLW QBYTE ;PREPARA PARA A RECEPÇÃO COM NUMERO DE BITS A RECEBER
      MOVWF BITCOUNTER

      L0
      BCF FLAG ;LIMPA FLAG E REGISTRADORES DE RECEPÇÃO
      CLRF HC
      CLRF LC
      L1
      ;———————————

      e substituir por esta:

      INICIO:
      BANK1
      BSF TRISIO,4 ;PINO 3 COMO ENTRADA
      BANK0
      BTFSC GPIO,4
      GOTO CONTJ7
      BCF LED1 ;APAGA LEDS SE PINO 3 FOR ATERRADO
      BCF LED2

      CONTJ7
      CLRF RES3
      CLRF RES2
      CLRF RES1
      CLRF RES0
      MOVLW QBYTE ;PREPARA PARA A RECEPÇÃO COM NUMERO DE BITS A RECEBER
      MOVWF BITCOUNTER

      L0
      BCF FLAG ;LIMPA FLAG E REGISTRADORES DE RECEPÇÃO
      CLRF HC
      CLRF LC
      L1
      ;———————————

      esquema em : http://picsource.com.br/wp-content/photos/2012/05/DECODER-GENERICO-PIC629.bmp

      Acrescente no pino 3 um interruptor (botão) ao gnd e pull up de 10k ao vcc, igual ao pino 4.Este irá apagar o led.

      Depois destas mudanças, salve o arquivo com um novo nome e recompile usando o Mplab para obter um novo hex.
      Grave o pic com este novo hex alterado. Não testei, mas deverá funcionar (se não errei… é claro!)

      Cláudio

    2. Opa! Claudio, me perdoe pela minha inesperiencia em programação,montei a placa deu certo,mas a modificação que vc me passou,infelizmente não funcionou, acredito eu que fiz algo errado.Se conseguisse pelo menos fazer a opção de apertar um botão, ficar aceso led 1 e ao apertar outro botão apagar led 1 e acende led 2 e vice versa, ficarei muito satisfeito. Para mim fazer a opção de resetar, fiz um circuito que ao acionar o sensor, corta a alimentação do pic, assim vem tudo apagado.Valeu!

      1. Olá Geraldo!
        Realmente não foi culpa sua. Olhando melhor o programa, percebi que eu cometi um engano na parte do ‘acionar’. Por favor, tente usar a porção de código parte abaixo:

        ;=========================================================================
        ACIONAR

        BTFSS RES2,7 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO
        GOTO SEGA1
        BSF LED1 ;LIGA LED1
        BCF LED2 ;DESLIGA LED2

        SEGA1
        BTFSS RES2,6 ;TESTA QUAIS BOTÕES
        GOTO SEGA2
        BSF LED2 ;LIGA LED1
        BCF LED1 ;DESLIGA LED2

        SEGA2
        GOTO INICIO

        ;==============================================================
        A anterior estava dando mensagem de erro em pelo menos 2 pontos.

        O resto da mudança segue a mesma.

        Fico no aguardo.

        Cláudio

    3. Bom dia claudio, já estou sem graça por te incomodar!
      como falei,não entendo de programação, fiz todas as alterações nos códigos que você me passou,mas na hora de compilar no mplab dá erro e não compila! tem 3 dias que estou tentando,kkkk, me ajude por favor!!!!!Valeu!

    4. o erro que dá, e;Debug build of project `C:\Users\Guilherme\Desktop\HT6p20\ht6p20.mcp’ started.
      Language tool versions: MPASMWIN.exe v5.34, mplink.exe v4.34
      Preprocessor symbol `__DEBUG’ is defined.
      Mon Sep 08 15:26:35 2014
      ———————————————————————-
      Build aborted. The project contains no source files.
      ———————————————————————-
      Debug build of project `C:\Users\Guilherme\Desktop\HT6p20\ht6p20.mcp’ failed.
      Language tool versions: MPASMWIN.exe v5.34, mplink.exe v4.34
      Preprocessor symbol `__DEBUG’ is defined.
      Mon Sep 08 15:26:35 2014
      ———————————————————————-
      BUILD FAILED

      1. Olá Geraldo! Parece que você esqueceu de incluir o seu asm no projeto. Você deverá ir na aba ‘Projects’ e em seguida na aba ‘ Adds file to project’ e adicionar o arquivo com o assembler desejado (tem que ter terminação ‘.asm’, se não estiver salve com esta terminação). Então tente de novo compilar. Deverá desaparecer a mensagem “Buid aborted. The project contains no source files”.
        Cláudio

  3. Boa Tarde Claudio, primeiro parabéns por todos os projetos. Bom eu gostaria de saber se há como aumentar a capacidade de gravação de txs de 21 para mais sem mudar o pic ou adicionar memoria externa. Fico no aguardo de uma resposta. Grato. Tiago

    1. Olá Tiago!
      Obrigado por seu comentário apreciativo. Quanto a aumentar o número de controles, o pic citado tem apenas 128 bytes de eeprom, usando 3 bytes por botão (modo individual) ou 3 bytes por controle (modo aprendizado único). Fica meio ‘apertado’ fazer isto no pic 12f629/675 , pois necessitaria mais 2 pinos para ligar uma memória I2c (24c08 por exemplo), pois temos apenas 6 io’s, sendo uma para recepção do tx, uma para o botão de aprendizado, uma para o led, 3 para saídas dos canais. Faltaria para a eeprom externa. Poderá ver alguma coisa sobre isto estudando o artigo ‘BIG_GEN II – RECEPTOR GENERICO (GRAVA ATÉ 255 CONTROLES HT6P20B/HCS200…301) – COM GRAVAÇÃO E APAGAMENTO INDIVIDUAL DE CONTROLES E LCD’.
      Claudio

  4. boa tarde Claudio, amigão montei o hardware deste receptor genérico pra usar com modo pulso e cadastrando individualmente os botoes do tx para aproveitar o maximo da memória, montei a pcb e fui até um distribuidor pra testar com txs mesmo, notei um bug que talvez não tenha percebido ainda,ou talvez tenha até corrigido, mas na versão que carreguei pro pic esteja ainda o erro, acontece o seguinte, cadastrei 41 tx, quando vou cadastrar o 42° ele aceita o cadastro mas não salva e junto apaga a memoria do primeiro tx que foi cadastrado, ai tento cadastrar outro, que deveria ir apagando os outros códigos e o que acontece, ele cadastra esse tx mas apaga todos os outros códigos da memória,como se tivesse feito um reset, mas como não tinha como eu acessar a memória pra visualizar o que está cadastrado nelas, ele de qualquer forma perde todos os outros tx tendo que cadastrar tudo de novo, não tem uma forma de bloquear o cadastro de novos TXs quando ele encher a memória? limitar em 40 txs e se tentar cadastrar piscar o led de alguma forma diferente acusando erro e não permitir mais o cadastro, usei a versão RX_GEN_HT6P20_V3P1_ASM
    grande abraço!

Comments are closed.

Back To Top