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á Roberto! Obrigado pelos seus comentários apreciativos. Realmente, é possivel usar o pino 3 como escolha para retenção ou pulso, no caso da versão 4. Agora, na versão 5, foi agregado um terceiro led , cujo acionamento ocorrerá quando os DOIS botões estiverem acionados.
Explique melhor, por favor, a idéia que voce tem em mente quanto a “1 comando do tx aciona a saida referente ao botão pressionado e outro desaciona” , visto termos apenas 2 botões e 3 leds? Seria o caso, de acionar concomitante os 2 botões, uma vez para ligar e aciona-los de novo para desligar?
Voce deseja acionar que dispositivos?
Claudio
eu quase consegui fazer o que eu quero , mas só com a versâo 3 ,ou seja, com 2 botões e não com 3 ( o que eu quero )
eu fiz a seguinte mudança:
onde estava:
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
coloquei assim :
ACIONAR
BTFSC RES2,7 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO
BSF LED1 ;ACENDE LED (UMA PISCADA)
MOVLW .2
CALL DELAYM
BTFSC RES2,7
BCF LED1 ;APAGA LED
MOVLW .2
CALL DELAYM
BTFSC RES2,7
BSF LED1 ;ACENDE LED (UMA PISCADA)
MOVLW .2
CALL DELAYM
BTFSC RES2,7
BCF LED1 ;APAGA LED
MOVLW .2
CALL DELAYM
BTFSC RES2,6
BSF LED1 ;ACENDE LED (UMA PISCADA)
MOVLW .2
CALL DELAYM
BTFSC RES2,6
BCF LED1 ;APAGA LED
MOVLW .2
CALL DELAYM
BTFSC RES2,6
BSF LED1 ;ACENDE LED (UMA PISCADA)
MOVLW .2
CALL DELAYM
BTFSC RES2,6
BCF LED1 ;APAGA LED
MOVLW .2
CALL DELAYM
BTFSC RES2,6
BSF LED1 ;ACENDE LED (UMA PISCADA)
MOVLW .2
CALL DELAYM
BTFSC RES2,6
BCF LED1 ;APAGA LED
MOVLW .2
CALL DELAYM
BTFSC RES2,6
BSF LED1 ;ACENDE LED (UMA PISCADA)
MOVLW .2
CALL DELAYM
BTFSC RES2,6
BCF LED1 ;APAGA LED
MOVLW .2
CALL DELAYM
BTFSC RES2,6
BSF LED1 ;ACENDE LED (UMA PISCADA)
MOVLW .2
CALL DELAYM
BTFSC RES2,6
BCF LED1 ;APAGA LED
MOVLW .2
CALL DELAYM
BTFSC RES2,6
BSF LED1 ;ACENDE LED (UMA PISCADA)
MOVLW .2
CALL DELAYM
BTFSC RES2,6
BCF LED1 ;APAGA LED
MOVLW .2
CALL DELAYM
GOTO INICIO
ou seja :
quando aperto o 1º botão pisca 2 vezes o led1
quando aperto o 2º botão pisca 6 vezes o led1
como faço para adicionar o 3º botão ??
tem um jeito mais fácil de colocar a quantidade de piscada ??
Olá Michael!
Vejo que voce já tá pegando o jeito. Parabéns!
Para testar o 3º botão , tem que testar os bits 7 e depois o 6 do registrador RES2. Só que tem que usar logica ‘E’ além de ter de temporizar para depois ‘testar’ novamente estes dois bits, após algum tempo, por causa que ‘nenhuma pessoa'(exceto um ‘ninja’) consegue apertar os dois botões ao mesmo tempo. É até dificil de explicar . Quanto a tempos em milisegundos, basta modificar a rotina de delay para contar exatos 1mseg com um valor de ‘w’ = 1. E depois tem de ajustar tudo que usa esta rotina atual. Ou voce poderá pegar dois registradores temporários e usa-los para fazer uma subrotina de nome, por ex. ‘delay_Milisegundos’ que substituiria a subrotina ‘delaym’.
Quanto a jeito mais facil de fazer piscar varias vezes o led, é usar outro registrador temporário, no qual se carregue a quantidade de piscadas e fazer um loop decrementado ele a cada piscada.
Ficaria assim:
movlw .10 ;carrega para 10 piscadas p.ex.
movwf temp1 ; em ‘w’ tem por o numero de piscadas a ser dada
meu_loop:
bsf led1 ;por exemplo ‘led1’
movlw .2
call delaym ; ou a sua nova rotina
bcf led1 ;tem que ser o mesmo acima
decfsz temp1,f ;decrementa
goto meu_loop ;não chegou a zero, vai piscar de novo
(aqui a proxima instrução, pois já acabou de piscar)
Vá tentando, que é assim que se aprende.
Claudio
olá claudio , tem como fazer uma rotina um pouco diferente :
ao invés de acender 3 leds independentes , fazer piscar somente um led de acordo com o botão apertado .
ex:
1º botão apertado do controle = pisca led1 1 vez
2º botão apertado do controle = pisca led1 2 vezes
3º botao apertado do controle = pisca led1 3 vezes
o outro circuito já está em casa funcionando !!
ah !! e tem como eu definir o tempo no .asm do led aceso e do led apagado em milisegundos ??
obrigado pela sua atenção de novo .
Bom Dia Claudio.
Sou iniciante no ramo da eletrônica, montei o circuito e testei os .HEX funcionou perfeitamente, parabéns por publicar seus conhecimentos e incentivar os novos proficionais da area respondendo e interagindo com os usuários.
Estava acompanhado as idéias do michaelverdan e resolvi contribuir.
IDÉIA 1)Na versão 4 é possivel você implementar a função PULSO / RETENÇÂO, colocando um resistor de PULL UP (5V) no pino 3 do PIC a função fica em modo PULSO (saida fica acionada em quanto o controle TX está acionado) e quando colocado GND no pino 3 a função fica em modo RETENÇÃO (um comando aciona a saída e outro comando desaciona as saídas independentemente).
IDÉIA 2) Na versão 5 inverter a lógica, hoje as saídas estão funcionando somente como PULSO, alterar para modo RETENÇÃO (1 comando do TX aciona a saída refente ao botão precionado e outro comando desaciona a saída.
Agradeço pela atenção.
era isso mesmo que queria . agora está mais que perfeito . muito obrigado mesmo . ficou super legal só precisar cadastrar 1 botão e os outros 2 cadastrarem automaticamente . excelente trabalho e super rápido . um abraço .
OK! Michael ! Divirta-se!
Obrigado pelo retorno.
Claudio