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:
Segue abaixo o arquivo HEX a ser gravado no chip PIC 12F629:
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:
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:
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
Segue versão para 3 leds com aprimoramentos:
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’:
Segue arquivo HEX (versão 6):
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:
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.
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):
Segue o arquivo HEX para a versão 9:
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:
Segue o arquivo Hex para versão 10:
Segue o esquema para versão 10:
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):
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:
Segue abaixo uma versão de 1 canal, modo retenção, feito em “C” no compilador MPLAB-IDE XC8:
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!!!
Olá Cláudio! Primeirmante quero te agradecer pelos belos projetos aqui postados… tb quero compartilhar minha alegria porque consegui fazer funcionar esse projeto do Receptor de controle remoto, com dois leds… te pergunto: tentei utilzar o fio que sai de um dos leds para dar entrada (input) em PIV 16F628A para controlar um motor de portao. Mas não acontece nada… O programa que fiz, em C, ja que não entendo nada de ASM, tem um comando basico: se Input Pin_X, Output Pin_y via um transistor… meu pprograma funciona com um botão simulando no proteus… A entrada no PIC 16f que sai do 12F precisa ser em pullUp??
Olá Waymovie! Obrigado por seu comentário e elogios. As saídas dos leds são em nível 1, não necessitando pull_up. Quanto a seu programa, já não posso dizer nada, mas geralmente é algum erro de esquecimento, como por exemplo, esquecer de programar a ‘palavra de configuração’ do pic, deixar o ‘Watch Dog’ ligado e coisas assim.
Claudio
Vou testar… então, se eu pegar no positivo do led que é uma saída em nível (1) do “teu” decodificador do HT, e ligar a um pino configurado como entreda no PIC 16F (meu projeto) deveria dar certo?? , devo ligar algum resistor? outra coisa estranha, que não consegui entender: fiz um teste na saíde de um dos leds, ligando a um BC548 e a um relê que acionava um Cooler de PC de 12V. Ao pressionar o controle o rele era acionado e também o cooler, mas o led não acende…por que será?
Abç e obrigado…
Olá Waymovie! Sim, sempre coloque um resistor de baixo valor 330 a 1k ohms, pois, de repente a entrada do pic está configurada como saída por engano, então teremos um curto que destruirá os pics. Quanto ao led, depende como você ligou, ele não acenderá. Por exemplo: Saí do pic vai para o resistor e depois ao led a massa. Se você ligar a base na junção resistor/led, não acenderá o led, mas funcionará o transistor e que estiver ligado no coletor. A tensão de base para emissor é de 0,7 volts, e o led precisa de 1,5 a 2,5 volts para funcionar. Assim, mantenha a ligação original dos leds e puxe um resistor de 4k7 direto do pino de saida do pic para a base do transistor. Então, voce verá acender o led e funcionar o transistor.
PINO PIC——–|———-WWWW————–!>——-GND
| 470 LED
|——-WWWW——————————————BASE DO TRANSISTOR
4K7
Claudio
Caraca… não consigo fazer funcionar… na saída do led tem uma tensão que oscila, quando aperto o botão do controle, de 0 a 1,7 V. Essa tensão é suficiente para alimentar o PIC?? to fazendo um teste simples: programei o 16F628A para piscar um led, recebendo como input a saída do led do teu projeto do receptor… mas testo a tensão do pino que configurei como saída e é Zero. Parece que que o meu input não é aceito…só tu pode me ajudar… Abraço.
Olá waymovie! Faça o seguinte: Teste o seu circuito com pic 16f628a aplicando Vcc (+5v) via resistor de 470 ohms. Se não funcionar, verifique o programa e o seu hardware relacionado ao 16f628a. Se funcionar , ligue este resistor direto no pino de saída do pic. Ao acionar o controle remoto, o pino terá 5volts (vcc) e têm que funcionar.
Claudio
Opa! Agora funcionou… tu é o cara mesmo. Pena que meu código não funcionou… no proteus funciona perfeito, mas na prática não rolou… vou ter que dar uma analisada… tem como eu postar o código e projeto proteus pra ti dar uma olhada? se não der, obrigado da mesmo forma… ja me ajudou demais… grande abraço.
Olá waymovie! Fico feliz que, em partes, você chegou a uma conclusão! Quanto a usar o proteus, não faço uso dele, por que ele tem algumas limitações que me impedem de trabalhar com ele.
Mas se algum dos colegas quiser da sugestões…
Claudio
💡 Olá waymovie, se vc quiser me mandar o arquivo em questão que esta com problemas ai no proteus eu posso verificar para vc, já tenho uma certa experiencia com ele e posso lhe ajudar ok. agnaldofraga@hotmail.com
Larios, nesse modelo de receptor, caso eu tenha um controle com dois botoes, quando cadastro os controles eles ficam em “canais” diferentes. Para o caso de acionameto de um portao, que é meu projeto, teria como eu cadastrar os dois botoes para acionar o motor? tem esse programa pronto? gostaria que, independentemente do botao pressioado, o motor fosse acionado. essa situação atual, somente um botao funciona.
Olá Waymovie! Por favor, identifique qual das versões você está se referindo. Você deseja que qualquer dos botões, se pressionado, atue na saída, é isto?
Claudio
Opa! isso mesmo…
mais uma: que software tu usa pra montar a placa de circuitos?? to usando o Eagle mas ta casca… não to achando alguns componentes, como o módulo RF e tb o TRAFO…
Olá WayMovie! Use o que você achar mais conveniente. Alguns gostam do Eagle, mas outros tem dificuldade em usa-lo. Quanto a componentes, tente comprar na Internet.
Claudio
Boa tarde Larios, estou com problema para fazer rodar a versão 3P1_asm, não codifica nenhum botão e quando tento com as versões que apreendem todos os botões funciona normal. Tenho que mudar alguma coisa ou ela roda normal desta maneira.Ou pode ser mu gravador (Beeprog2C), estou compilando o ASM no Mplab. Desde ja meu muito obrigado. fico no aguardo.
Olá Tiago! Vou verificar a versão em questão e retornarei. Aguarde, por favor…
Cláudio
Olá Tiago! Voce está usando o microcontrolador 12f629 ou alterou no asm para 12f675?
Se estiver usando o 12f675, descomente também algumas linhas logo no inicio do programa, para esta versão e depois recompilie.
São estas:
;DESCOMENTAR ABAIXO PARA 12F675
; BANK1
; MOVLW .0
; MOVWF ANSEL ;LIBERA PORTAS DO AD (somente 12f675)
; BANK0
Senão , não irá funcionar.
Claudio
Bom dia Larios estou usando pic 12f629, mesmo descomentando ou apagando continua não apreendendo o controle. Grato Tiago.
Olá Tiago!
Gostaria que você conferisse as ligações dos pinos do PIC, conforme abaixo:
pino 1 = vcc
pino 2 = led ‘learn’
pino 3 = desligado
pino 4= botão ‘learn’
pino 5= led2
pino 6= led1
pino 7= entrada rf proveniente do receptor de 433mhz
pino 8= vcc
Outra coisa, gostaria que você conferisse se o controle remoto que está usando, tem o circuito integrado Ht6P20B. Na dúvida, abra-o e veja. Não serve o modelo Hcs… ou outros.
Certifique que ele esteja funcionando. Para isto, ligue um fone a cristal ( capsula piezoeletrica ou campainha de telefone), com um resistor de 1k em série, na saída de rf do receptor para o gnd. Acione o controle e verifique se escuta um ruido característico de transmissão do sinal.
Caso não escute nada, poderá estar com defeito (ou bateria fraca!!!) ou ser de uma frequência diferente do receptor. Lembre-se: tx e rx da mesma frequência sempre!!!
Claudio
😆 Eu quero parabenizar o amigo Claudio Larios, pelo maravilhoso desenvolvimento que tem feito para o leitor 6p20, seu trabalho ficou muito bom. Eu tive o prazer de colocar em funcionamento seu software e funcionou corretamente…parabens
Olá ‘Agitec’! Obrigado pelo seu comentário e elogios. Fico feliz que conseguiu sucesso na sua montagem.
Claudio
A minha duvida é de como fazer uma saída com retenção e as outras duas como pulso. Estou tentando mas ainda não entendi muito bem a logica. Estou pensando em deixar em modo pulso e apagar toda referencia ao led1 da rotina pulso e direcionar para a rotina retenção mas somente o led1, me dá uma luz por favor.
Obrigado
Olá Marcia! Realmente não é fácil entender ‘de primeira’ a lógica envolvida. Mas, basicamente, o modo ‘pulso’ é o mais simples, onde apenas ligamos uma saída e deixamos ligado enquanto o botão estiver pressionado no tx. Usa-se um flag para determinar quando finalmente o botão do transmissor foi solto. Cada vez que recebe uma transmissão correta, o flag é setado e uma nova de carga de tempo é colocada em um contador. Quando não se recebe transmissão, gradativamente este contador vai ser decrementado até chegar a zero, quando vai resetar o flag, indicando que botão foi solto e a saida será desligada. Assim, apertando no tx liga a saída e soltando no tx, apaga o led da saída.
Quanto ao modo retenção, antes de acionar a saída, precisamos testar se está ligada ou desligada e inverter a situação. Supondo que esteja ligada,irá desliga-la e acionar um flag para travar enquanto o botão do tx estiver acionado. Igualmente ao ao acima, depois de soltar o botão do tx, irá decrementar uma carga do contador e ao chegar a zero, irá resetar o flag, permitindo uma mudança na saída caso o botão seja novamente apertado no tx. Confuso! Juro que para mim também é difícil até para explicar.
Tente, pois assim que eu tiver um tempinho irei postar uma versão nestas condições.
Claudio
Olá Marcia! Veja por favor, o novo artigo ‘Receptor de 3 canais com pulso e retenção individuais‘.
Claudio
Claudio Boa Noite.
Eu tenho a mesma duvida do Mario, entendi mais ou menos a diferença entre pulso e retenção, mas não consegui sucesso nas modificações.O que eu entendi é que em retenção vc usou FLAGLED e em pulso BSF e BCF. BSF liga E BCF desliga? 😳
Obrigada
Olá Marcia! Quando falamos em ‘pulso’, significa que teremos a saída ligada enquanto o botão do transmissor estiver pressionado. Já o termo ‘retenção’ se refere a mudança de estado da saída a cada aperto do botão do transmissor, ou seja, apertando o botão uma vez e a saída ligará. Apertando de novo a saída desligará , e assim sucessivamente. Exatamente, qual é a dúvida?
Claudio